Type.h revision 2831d5145675ead9f2fb767bf5fe4ae56b88349f
1c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#ifndef TYPE_H_ 2c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 3c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define TYPE_H_ 4c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 5c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include <android-base/macros.h> 6881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <string> 7881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <utils/Errors.h> 8c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 9c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 10c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 11c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Formatter; 12737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberstruct ScalarType; 13c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 14c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Type { 15c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber Type(); 16c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber virtual ~Type(); 17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 18fd4afabde8fb9bbdd0021addeb9fbb62428f2c17Andreas Huber Type *ref() { return this; } 19fd4afabde8fb9bbdd0021addeb9fbb62428f2c17Andreas Huber 205345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber virtual bool isScope() const; 21a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber virtual bool isInterface() const; 228d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber virtual bool isEnum() const; 238d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber virtual bool isTypeDef() const; 248d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 25737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber virtual const ScalarType *resolveToScalarType() const; 26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 278d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber bool isValidEnumStorageType() const; 288d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 29881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber enum StorageMode { 30881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Stack, 31881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Argument, 32881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Result 33881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber }; 34881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual std::string getCppType( 35881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode mode, std::string *extra) const; 36881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 37881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber // Convenience, gets StorageMode_Stack type. 38881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber std::string getCppType(std::string *extra) const; 39881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 40881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber std::string getCppResultType(std::string *extra) const; 41881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber std::string getCppArgumentType(std::string *extra) const; 42881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 432831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual std::string getJavaType() const = 0; 442831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual std::string getJavaSuffix() const; 452831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 46881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber enum ErrorMode { 47881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Ignore, 48881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Goto, 49881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Break, 50737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber ErrorMode_Return, 51881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber }; 52881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual void emitReaderWriter( 53881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 54881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 56881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 57881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 58881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode) const; 59881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 60881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual void emitReaderWriterEmbedded( 61881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 62881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 63881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 64881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 65881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 67881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 69881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText) const; 70881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 712831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual void emitJavaReaderWriter( 722831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 732831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 742831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 752831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader) const; 762831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 77881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual status_t emitTypeDeclarations(Formatter &out) const; 78881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 79881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual status_t emitTypeDefinitions( 80881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, const std::string prefix) const; 81881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 822831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual status_t emitJavaTypeDeclarations(Formatter &out) const; 832831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 84881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual bool needsEmbeddedReadWrite() const; 85881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual bool resultNeedsDeref() const; 86881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 87881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberprotected: 88881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void handleError(Formatter &out, ErrorMode mode) const; 89881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void handleError2(Formatter &out, ErrorMode mode) const; 90881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 91881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void emitReaderWriterEmbeddedForTypeName( 92881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 93881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 94881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 95881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 96881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 97881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 98881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 99881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 100881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText, 101881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &typeName, 102881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &childName) const; 103881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 1042831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber void emitJavaReaderWriterWithSuffix( 1052831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 1062831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 1072831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 1082831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader, 1092831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &suffix, 1102831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &extra) const; 1112831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 112c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate: 113c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber DISALLOW_COPY_AND_ASSIGN(Type); 114c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}; 115c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 116c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 117c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 118c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif // TYPE_H_ 119c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 120