Type.h revision 881227d860c59471eee31d39946e96ce2daa35d6
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; 12c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 13c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Type { 14c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber Type(); 15c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber virtual ~Type(); 16c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber virtual void dump(Formatter &out) const = 0; 185345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber virtual bool isScope() const; 19a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber virtual bool isInterface() const; 20c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 21881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber enum StorageMode { 22881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Stack, 23881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Argument, 24881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Result 25881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber }; 26881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual std::string getCppType( 27881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode mode, std::string *extra) const; 28881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 29881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber // Convenience, gets StorageMode_Stack type. 30881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber std::string getCppType(std::string *extra) const; 31881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 32881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber std::string getCppResultType(std::string *extra) const; 33881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber std::string getCppArgumentType(std::string *extra) const; 34881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 35881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber enum ErrorMode { 36881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Ignore, 37881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Goto, 38881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Break, 39881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber }; 40881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual void emitReaderWriter( 41881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 42881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 43881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 44881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 45881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 46881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode) const; 47881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 48881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual void emitReaderWriterEmbedded( 49881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 50881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 51881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 52881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 53881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 54881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 56881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 57881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText) const; 58881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 59881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual status_t emitTypeDeclarations(Formatter &out) const; 60881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 61881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual status_t emitTypeDefinitions( 62881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, const std::string prefix) const; 63881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 64881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual bool needsEmbeddedReadWrite() const; 65881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual bool resultNeedsDeref() const; 66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 67881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberprotected: 68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void handleError(Formatter &out, ErrorMode mode) const; 69881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void handleError2(Formatter &out, ErrorMode mode) const; 70881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 71881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void emitReaderWriterEmbeddedForTypeName( 72881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 73881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 74881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 75881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 76881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 77881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 78881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 79881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 80881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText, 81881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &typeName, 82881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &childName) const; 83881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 84c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate: 85c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber DISALLOW_COPY_AND_ASSIGN(Type); 86c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}; 87c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 88c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 89c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 90c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif // TYPE_H_ 91c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 92