Type.h revision e9667849dd310995d1e4d12f31942f68bf992d1c
11aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber/* 21aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Copyright (C) 2016 The Android Open Source Project 31aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 41aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 51aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * you may not use this file except in compliance with the License. 61aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * You may obtain a copy of the License at 71aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 81aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 91aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * 101aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * Unless required by applicable law or agreed to in writing, software 111aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 121aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * See the License for the specific language governing permissions and 141aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber * limitations under the License. 151aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber */ 161aec397b1fdea7db4120dbe55b6995bb2a9d9138Andreas Huber 17c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#ifndef TYPE_H_ 18c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 19c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#define TYPE_H_ 20c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 21c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include <android-base/macros.h> 22881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <string> 23881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <utils/Errors.h> 247c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber#include <vector> 25979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland#include <set> 26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 27c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 28c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 297c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huberstruct Annotation; 30c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Formatter; 31737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberstruct ScalarType; 32979e099f1163ff75beed5776cd01fb409b90a0cdSteven Morelandstruct FQName; 33c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 34c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Type { 35c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber Type(); 36c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber virtual ~Type(); 37c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 3899e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isArray() const; 39295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber virtual bool isBinder() const; 40abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong virtual bool isBitField() const; 41f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber virtual bool isCompoundType() const; 4299e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isEnum() const; 43abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong virtual bool isHandle() const; 4499e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isInterface() const; 4599e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isNamedType() const; 4699e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isPointer() const; 4799e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isScope() const; 48abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong virtual bool isScalar() const; 49abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong virtual bool isString() const; 50abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong virtual bool isTemplatedType() const; 5199e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isTypeDef() const; 52709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber virtual bool isVector() const; 538d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 54737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber virtual const ScalarType *resolveToScalarType() const; 55c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 5630bb6a869be0f3f82497b7b11c71ec9d47652ed0Steven Moreland virtual std::string typeName() const; 5730bb6a869be0f3f82497b7b11c71ec9d47652ed0Steven Moreland 588d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber bool isValidEnumStorageType() const; 599df5244c1dd4508cc2e25f8a04d363903912d19cSteven Moreland virtual bool isElidableType() const; 60c6752dcea3b5dae1e99960b5beb6af394280b393Yifan Hong virtual bool canCheckEquality() const; 618d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 62881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber enum StorageMode { 63881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Stack, 64881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Argument, 65ac5878945afde379e41d9c93de44c32537f868b1Martijn Coenen StorageMode_Result, 66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber }; 673b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong 68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual std::string getCppType( 69979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland StorageMode mode, 703b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong bool specifyNamespaces) const; 713b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong 723b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong std::string decorateCppName( 733b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong const std::string &name, 743b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong StorageMode mode, 75979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland bool specifyNamespaces) const; 76979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland 77979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland /* gets all hidl-defined types used when this item is 78979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland * printed using getCppType or getJavaType. Examples: 79979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland * 80979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland * vec<vec<vec<IFoo>>>: IFoo is added to the set 81979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland * (the hypothetical type pair) 82979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland * pair<IFoo, IBar>: IFoo and IBar are added to the set 83979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland * int32_t: nothing is added to the set 84979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland * string: nothing is added to the set 85979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland * IFoo: IFoo is added to the set 86979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland */ 87979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland virtual void addNamedTypesToSet(std::set<const FQName> &set) const = 0; 88881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 893b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong std::string getCppStackType(bool specifyNamespaces = true) const; 90881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 913b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong std::string getCppResultType(bool specifyNamespaces = true) const; 924c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber 933b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong std::string getCppArgumentType(bool specifyNamespaces = true) const; 944c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber 954ed1347cd29e6e07acad368891bb03078c798abaYifan Hong // For an array type, dimensionality information will be accumulated at the 964ed1347cd29e6e07acad368891bb03078c798abaYifan Hong // end of the returned string. 974c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber // if forInitializer == true, actual dimensions are included, i.e. [3][5], 984c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber // otherwise (and by default), they are omitted, i.e. [][]. 994ed1347cd29e6e07acad368891bb03078c798abaYifan Hong virtual std::string getJavaType(bool forInitializer = false) const; 100881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 10185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber virtual std::string getJavaWrapperType() const; 1022831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual std::string getJavaSuffix() const; 1032831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 104c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang virtual std::string getVtsType() const; 105e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang virtual std::string getVtsValueName() const; 106c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang 107881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber enum ErrorMode { 108881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Ignore, 109881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Goto, 110881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Break, 111737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber ErrorMode_Return, 112881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber }; 113881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual void emitReaderWriter( 114881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 115881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 116881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 117881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 118881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 119881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode) const; 120881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 121881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual void emitReaderWriterEmbedded( 122881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 123f9d49f1468bd65595f6f0ae5f4d7300f4e95edf8Andreas Huber size_t depth, 124881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 125be2a3737675b83dd61b52c11f0d7549fa1276739Yifan Hong const std::string &sanitizedName, 126881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 127881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 128881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 129881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 130881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 131881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 132881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText) const; 133881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 134bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong virtual void emitResolveReferences( 135bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong Formatter &out, 136bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &name, 137bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool nameIsPointer, 138bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &parcelObj, 139bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool parcelObjIsPointer, 140bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool isReader, 141bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong ErrorMode mode) const; 142bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 143bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong virtual void emitResolveReferencesEmbedded( 144bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong Formatter &out, 145bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong size_t depth, 146bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &name, 147bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &sanitizedName, 148bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool nameIsPointer, 149bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &parcelObj, 150bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool parcelObjIsPointer, 151bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool isReader, 152bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong ErrorMode mode, 153bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &parentName, 154bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &offsetText) const; 155bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 156f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong virtual void emitDump( 157f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong Formatter &out, 158f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &streamName, 159f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &name) const; 160f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong 16100f471711684903fd747e7871edf437ca54ed397Yifan Hong virtual bool useParentInEmitResolveReferencesEmbedded() const; 16200f471711684903fd747e7871edf437ca54ed397Yifan Hong 163244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong virtual bool useNameInEmitReaderWriterEmbedded(bool isReader) const; 164244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong 1652831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual void emitJavaReaderWriter( 1662831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 1672831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 1682831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 1692831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader) const; 1702831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 17185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber virtual void emitJavaFieldInitializer( 17285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, 17385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &fieldName) const; 17485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 17585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber virtual void emitJavaFieldReaderWriter( 17685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, 1774c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber size_t depth, 178709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber const std::string &parcelName, 17985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &blobName, 18085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &fieldName, 18185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &offset, 18285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber bool isReader) const; 18385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 184881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual status_t emitTypeDeclarations(Formatter &out) const; 185881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 186e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber // Emit any declarations pertaining to this type that have to be 187e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber // at global scope, i.e. enum class operators. 188e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber virtual status_t emitGlobalTypeDeclarations(Formatter &out) const; 189e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber 190244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong // Emit any declarations pertaining to this type that have to be 191244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong // at global scope for transport, e.g. read/writeEmbeddedTo/FromParcel 192244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong virtual status_t emitGlobalHwDeclarations(Formatter &out) const; 193244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong 194881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual status_t emitTypeDefinitions( 195881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, const std::string prefix) const; 196881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 19785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber virtual status_t emitJavaTypeDeclarations( 19885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, bool atTopLevel) const; 1992831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 200881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual bool needsEmbeddedReadWrite() const; 201bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong virtual bool needsResolveReferences() const; 202881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual bool resultNeedsDeref() const; 203881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 2045158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang // Generates type declaration for vts proto file. 2055158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang // TODO (b/30844146): make it a pure virtual method. 2065158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang virtual status_t emitVtsTypeDeclarations(Formatter &out) const; 207864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang // Generates type declaration as attribute of method (return value or method 208864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang // argument) or attribute of compound type for vts proto file. 209864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang virtual status_t emitVtsAttributeType(Formatter &out) const; 2105158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 21170a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber // Returns true iff this type is supported through the Java backend. 21270a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber virtual bool isJavaCompatible() const; 21370a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber 21485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber virtual void getAlignmentAndSize(size_t *align, size_t *size) const; 21585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 2167c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber void setAnnotations(std::vector<Annotation *> *annotations); 2177c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber const std::vector<Annotation *> &annotations() const; 2187c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber 219019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber virtual void appendToExportedTypesVector( 220019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber std::vector<const Type *> *exportedTypes) const; 221019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber 2221c507273be6a1beefbe7ef6ec63992a7cf66c4f8Andreas Huber virtual status_t emitExportedHeader(Formatter &out, bool forJava) const; 223019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber 224881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberprotected: 225881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void handleError(Formatter &out, ErrorMode mode) const; 226881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 227881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void emitReaderWriterEmbeddedForTypeName( 228881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 229881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 230881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 231881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 232881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 233881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 234881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 235881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 236881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText, 237881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &typeName, 238244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong const std::string &childName, 239244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong const std::string &funcNamespace) const; 240881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 2412831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber void emitJavaReaderWriterWithSuffix( 2422831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 2432831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 2442831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 2452831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader, 2462831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &suffix, 2472831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &extra) const; 2482831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 249f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong void emitDumpWithMethod( 250f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong Formatter &out, 251f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &streamName, 252f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &methodName, 253f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &name) const; 254f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong 255c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate: 2567c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber std::vector<Annotation *> *mAnnotations; 2577c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber 258c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber DISALLOW_COPY_AND_ASSIGN(Type); 259c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}; 260c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 261bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong/* Base type for VectorType and RefType. */ 262bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongstruct TemplatedType : public Type { 263bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong void setElementType(Type *elementType); 264abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong Type *getElementType() const; 265abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong bool isTemplatedType() const override; 26630bb6a869be0f3f82497b7b11c71ec9d47652ed0Steven Moreland virtual bool isCompatibleElementType(Type *elementType) const = 0; 267e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang status_t emitVtsTypeDeclarations(Formatter &out) const override; 268e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang status_t emitVtsAttributeType(Formatter &out) const override; 269bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongprotected: 270bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong TemplatedType(); 271bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong Type *mElementType; 272bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongprivate: 273bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong DISALLOW_COPY_AND_ASSIGN(TemplatedType); 274bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong}; 275bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 276c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 277c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 278c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif // TYPE_H_ 279c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 280