ArrayType.h revision 85eabdbe56720dcdcf130e5ca83129d47b143768
1c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#ifndef ARRAY_TYPE_H_
2c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
3c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define ARRAY_TYPE_H_
4c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
5c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "Type.h"
6c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
7c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include <string>
8c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
9c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android {
10c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
11c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct ArrayType : public Type {
12c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    ArrayType(Type *elementType, const char *dimension);
13c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
14881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    std::string getCppType(StorageMode mode, std::string *extra) const override;
15881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
162831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    std::string getJavaType() const override;
172831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
18881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void emitReaderWriter(
19881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
20881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &name,
21881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parcelObj,
22881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool parcelObjIsPointer,
23881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool isReader,
24881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            ErrorMode mode) const override;
25881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
26881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    void emitReaderWriterEmbedded(
27881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            Formatter &out,
28881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &name,
29881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool nameIsPointer,
30881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parcelObj,
31881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool parcelObjIsPointer,
32881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            bool isReader,
33881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            ErrorMode mode,
34881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &parentName,
35881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber            const std::string &offsetText) const override;
36881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
37881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber    bool needsEmbeddedReadWrite() const override;
38881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber
392831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber    void emitJavaReaderWriter(
402831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            Formatter &out,
412831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            const std::string &parcelObj,
422831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            const std::string &argName,
432831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber            bool isReader) const override;
442831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber
4585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    void emitJavaFieldInitializer(
4685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            Formatter &out, const std::string &fieldName) const override;
4785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
4885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    void emitJavaFieldReaderWriter(
4985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            Formatter &out,
5085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            const std::string &blobName,
5185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            const std::string &fieldName,
5285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            const std::string &offset,
5385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber            bool isReader) const override;
5485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
555158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang    status_t emitVtsTypeDeclarations(Formatter &out) const override;
565158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang
5770a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber    bool isJavaCompatible() const override;
5870a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber
5985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber    void getAlignmentAndSize(size_t *align, size_t *size) const override;
6085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber
61c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate:
62c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    Type *mElementType;
63c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    std::string mDimension;
64c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
65c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber    DISALLOW_COPY_AND_ASSIGN(ArrayType);
66c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber};
67c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
68c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}  // namespace android
69c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
70c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif  // ARRAY_TYPE_H_
71c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber
72