Type.h revision cec46c48853a8c1246656d0095a9faa3fad5c4f9
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 <utils/Errors.h> 23979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland#include <set> 24cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov#include <string> 25cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov#include <vector> 26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 27505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov#include "Reference.h" 28505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov 29c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 30c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 31c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Formatter; 32737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberstruct ScalarType; 33979e099f1163ff75beed5776cd01fb409b90a0cdSteven Morelandstruct FQName; 34c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 35c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberstruct Type { 36c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber Type(); 37c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber virtual ~Type(); 38c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 3999e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isArray() const; 40295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber virtual bool isBinder() const; 41abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong virtual bool isBitField() const; 42f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber virtual bool isCompoundType() const; 4399e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isEnum() const; 44abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong virtual bool isHandle() const; 4599e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isInterface() const; 4699e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isNamedType() const; 47397b5e1957cc1a1ad3365e294437324d5c088039Steven Moreland virtual bool isMemory() const; 4899e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isPointer() const; 4999e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isScope() const; 50abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong virtual bool isScalar() const; 51abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong virtual bool isString() const; 52abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong virtual bool isTemplatedType() const; 5399e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen virtual bool isTypeDef() const; 54709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber virtual bool isVector() const; 558d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 56cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // Recursive tree pass that completes type declarations 57cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // that depend on super types 58cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov virtual status_t resolveInheritance(); 59cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov 60cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // Recursive tree pass that evaluates constant expressions 61cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov virtual status_t evaluate(); 62cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov 63cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // Recursive tree pass that validates all type-related 64cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // syntax restrictions 65cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov virtual status_t validate() const; 66cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov 67cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // Runs recursive tree pass for completing type declaration in references 68cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // The only current case when type is declared in reference is 69cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // array (array size is reference-related) and templates (as they can 70cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // contain array as element type) 71cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // A special call is needed to avoid recursive loop. ex: 72cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov // struct S { S[42] arr; }; -- we need to avoid pass call for S from array 73cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov status_t callForReference(std::function<status_t(Type*)> func); 74cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov status_t callForReference(std::function<status_t(const Type*)> func) const; 75cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov 76737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber virtual const ScalarType *resolveToScalarType() const; 77c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 780ecc7b8aca24a5618512610bb6371bdb91b5fdc2Steven Moreland virtual std::string typeName() const = 0; 7930bb6a869be0f3f82497b7b11c71ec9d47652ed0Steven Moreland 808d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber bool isValidEnumStorageType() const; 819df5244c1dd4508cc2e25f8a04d363903912d19cSteven Moreland virtual bool isElidableType() const; 82c6752dcea3b5dae1e99960b5beb6af394280b393Yifan Hong virtual bool canCheckEquality() const; 838d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 84881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber enum StorageMode { 85881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Stack, 86881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber StorageMode_Argument, 87ac5878945afde379e41d9c93de44c32537f868b1Martijn Coenen StorageMode_Result, 88881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber }; 893b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong 90e30ee9b06ac578006161e84633db91289f889068Steven Moreland // specifyNamespaces: whether to specify namespaces for built-in types 91881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual std::string getCppType( 92979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland StorageMode mode, 933b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong bool specifyNamespaces) const; 943b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong 953b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong std::string decorateCppName( 963b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong const std::string &name, 973b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong StorageMode mode, 98979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland bool specifyNamespaces) const; 99979e099f1163ff75beed5776cd01fb409b90a0cdSteven Moreland 1003b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong std::string getCppStackType(bool specifyNamespaces = true) const; 101881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 1023b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong std::string getCppResultType(bool specifyNamespaces = true) const; 1034c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber 1043b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong std::string getCppArgumentType(bool specifyNamespaces = true) const; 1054c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber 1064ed1347cd29e6e07acad368891bb03078c798abaYifan Hong // For an array type, dimensionality information will be accumulated at the 1074ed1347cd29e6e07acad368891bb03078c798abaYifan Hong // end of the returned string. 1084c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber // if forInitializer == true, actual dimensions are included, i.e. [3][5], 1094c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber // otherwise (and by default), they are omitted, i.e. [][]. 1104ed1347cd29e6e07acad368891bb03078c798abaYifan Hong virtual std::string getJavaType(bool forInitializer = false) const; 111881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 11285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber virtual std::string getJavaWrapperType() const; 1132831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual std::string getJavaSuffix() const; 1142831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 115c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang virtual std::string getVtsType() const; 116e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang virtual std::string getVtsValueName() const; 117c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang 118881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber enum ErrorMode { 119881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Ignore, 120881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Goto, 121881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode_Break, 122737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber ErrorMode_Return, 123881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber }; 124881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual void emitReaderWriter( 125881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 126881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 127881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 128881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 129881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 130881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode) const; 131881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 132881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual void emitReaderWriterEmbedded( 133881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 134f9d49f1468bd65595f6f0ae5f4d7300f4e95edf8Andreas Huber size_t depth, 135881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 136be2a3737675b83dd61b52c11f0d7549fa1276739Yifan Hong const std::string &sanitizedName, 137881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 138881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 139881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 140881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 141881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 142881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 143881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText) const; 144881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 145bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong virtual void emitResolveReferences( 146bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong Formatter &out, 147bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &name, 148bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool nameIsPointer, 149bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &parcelObj, 150bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool parcelObjIsPointer, 151bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool isReader, 152bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong ErrorMode mode) const; 153bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 154bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong virtual void emitResolveReferencesEmbedded( 155bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong Formatter &out, 156bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong size_t depth, 157bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &name, 158bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &sanitizedName, 159bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool nameIsPointer, 160bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &parcelObj, 161bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool parcelObjIsPointer, 162bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool isReader, 163bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong ErrorMode mode, 164bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &parentName, 165bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &offsetText) const; 166bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 167f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong virtual void emitDump( 168f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong Formatter &out, 169f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &streamName, 170f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &name) const; 171f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong 172e45b5303e072043679483a70606f6c00dde17382Yifan Hong virtual void emitJavaDump( 173e45b5303e072043679483a70606f6c00dde17382Yifan Hong Formatter &out, 174e45b5303e072043679483a70606f6c00dde17382Yifan Hong const std::string &streamName, 175e45b5303e072043679483a70606f6c00dde17382Yifan Hong const std::string &name) const; 176e45b5303e072043679483a70606f6c00dde17382Yifan Hong 17700f471711684903fd747e7871edf437ca54ed397Yifan Hong virtual bool useParentInEmitResolveReferencesEmbedded() const; 17800f471711684903fd747e7871edf437ca54ed397Yifan Hong 179244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong virtual bool useNameInEmitReaderWriterEmbedded(bool isReader) const; 180244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong 1812831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber virtual void emitJavaReaderWriter( 1822831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 1832831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 1842831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 1852831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader) const; 1862831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 18785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber virtual void emitJavaFieldInitializer( 18885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, 18985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &fieldName) const; 19085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 19185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber virtual void emitJavaFieldReaderWriter( 19285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, 1934c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber size_t depth, 194709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber const std::string &parcelName, 19585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &blobName, 19685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &fieldName, 19785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &offset, 19885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber bool isReader) const; 19985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 200881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual status_t emitTypeDeclarations(Formatter &out) const; 201881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 202e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber // Emit any declarations pertaining to this type that have to be 203e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber // at global scope, i.e. enum class operators. 204e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber virtual status_t emitGlobalTypeDeclarations(Formatter &out) const; 205e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber 206244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong // Emit any declarations pertaining to this type that have to be 207244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong // at global scope for transport, e.g. read/writeEmbeddedTo/FromParcel 208244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong virtual status_t emitGlobalHwDeclarations(Formatter &out) const; 209244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong 2108c90cc59bf93bd0c08970b4488067a33015d4a1cChih-Hung Hsieh virtual status_t emitTypeDefinitions(Formatter& out, const std::string& prefix) const; 211881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 21285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber virtual status_t emitJavaTypeDeclarations( 21385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, bool atTopLevel) const; 2142831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 215881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual bool needsEmbeddedReadWrite() const; 216bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong virtual bool needsResolveReferences() const; 217881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber virtual bool resultNeedsDeref() const; 218881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 2195158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang // Generates type declaration for vts proto file. 2205158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang // TODO (b/30844146): make it a pure virtual method. 2215158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang virtual status_t emitVtsTypeDeclarations(Formatter &out) const; 222864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang // Generates type declaration as attribute of method (return value or method 223864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang // argument) or attribute of compound type for vts proto file. 224864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang virtual status_t emitVtsAttributeType(Formatter &out) const; 2255158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 22670a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber // Returns true iff this type is supported through the Java backend. 22770a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber virtual bool isJavaCompatible() const; 22860d3b22101e911242d2d41c8dc8309e8706f1fe1Andreas Huber virtual bool containsPointer() const; 22985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber virtual void getAlignmentAndSize(size_t *align, size_t *size) const; 23085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 231019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber virtual void appendToExportedTypesVector( 232019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber std::vector<const Type *> *exportedTypes) const; 233019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber 2341c507273be6a1beefbe7ef6ec63992a7cf66c4f8Andreas Huber virtual status_t emitExportedHeader(Formatter &out, bool forJava) const; 235019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber 236881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberprotected: 237881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void handleError(Formatter &out, ErrorMode mode) const; 238881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 239881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber void emitReaderWriterEmbeddedForTypeName( 240881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 241881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 242881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 243881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 244881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 245881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 246881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 247881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 248881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText, 249881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &typeName, 250244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong const std::string &childName, 251244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong const std::string &funcNamespace) const; 252881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 2532831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber void emitJavaReaderWriterWithSuffix( 2542831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 2552831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 2562831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 2572831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader, 2582831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &suffix, 2592831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &extra) const; 2602831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 261f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong void emitDumpWithMethod( 262f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong Formatter &out, 263f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &streamName, 264f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &methodName, 265f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &name) const; 266f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong 267c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huberprivate: 268c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber DISALLOW_COPY_AND_ASSIGN(Type); 269c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber}; 270c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 271bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong/* Base type for VectorType and RefType. */ 272bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongstruct TemplatedType : public Type { 273505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov void setElementType(const Reference<Type>& elementType); 274505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov Type* getElementType() const; 275abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong bool isTemplatedType() const override; 276505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov virtual bool isCompatibleElementType(Type* elementType) const = 0; 277e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang status_t emitVtsTypeDeclarations(Formatter &out) const override; 278e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang status_t emitVtsAttributeType(Formatter &out) const override; 279cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov 280cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov virtual status_t evaluate() override; 281cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov virtual status_t validate() const override; 282cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov 283cec46c48853a8c1246656d0095a9faa3fad5c4f9Timur Iskhakov protected: 284bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong TemplatedType(); 285505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov Reference<Type> mElementType; 286505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov 287505316c499a4dbb95f6567e8531fb6f1e74c3dedTimur Iskhakov private: 288bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong DISALLOW_COPY_AND_ASSIGN(TemplatedType); 289bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong}; 290bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 291c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 292c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 293c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#endif // TYPE_H_ 294c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 295