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#include "Type.h" 18c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 197c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber#include "Annotation.h" 208d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber#include "ScalarType.h" 21881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 22a72e0d2be173cebf62f728b9d215808bd862f219Iliyan Malchev#include <hidl-util/Formatter.h> 23881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <android-base/logging.h> 24881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 25c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 26c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 277c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas HuberType::Type() 287c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber : mAnnotations(nullptr) { 297c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber} 307c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber 31c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas HuberType::~Type() {} 32c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 337c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Hubervoid Type::setAnnotations(std::vector<Annotation *> *annotations) { 347c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber mAnnotations = annotations; 357c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber} 367c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber 377c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huberconst std::vector<Annotation *> &Type::annotations() const { 387c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber return *mAnnotations; 397c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber} 407c5ddfb41a806a7bf71581952d06b637a7670cf7Andreas Huber 415345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huberbool Type::isScope() const { 425345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber return false; 435345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber} 445345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber 45a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huberbool Type::isInterface() const { 46a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber return false; 47a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber} 48a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber 49abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hongbool Type::isScalar() const { 50abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong return false; 51abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong} 52abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong 53abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hongbool Type::isString() const { 54abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong return false; 55abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong} 56abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong 578d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isEnum() const { 588d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 598d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 608d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 61abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hongbool Type::isBitField() const { 62abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong return false; 63abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong} 64abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong 65abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hongbool Type::isHandle() const { 66abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong return false; 67abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong} 68abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong 698d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isTypeDef() const { 708d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 718d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 728d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 73295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huberbool Type::isBinder() const { 74295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber return false; 75295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber} 76295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber 7739fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huberbool Type::isNamedType() const { 7839fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber return false; 7939fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber} 8039fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber 8160864a4374fe867fc3e7f309ca8e4e7c757d7583Steven Morelandbool Type::isMemory() const { 8260864a4374fe867fc3e7f309ca8e4e7c757d7583Steven Moreland return false; 8360864a4374fe867fc3e7f309ca8e4e7c757d7583Steven Moreland} 8460864a4374fe867fc3e7f309ca8e4e7c757d7583Steven Moreland 85f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huberbool Type::isCompoundType() const { 86f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber return false; 87f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber} 88f630bc8736003dcf4aac3dfe47167beb6beb6c6aAndreas Huber 89709b62dbda6184770bb34470ff550e02c1643e67Andreas Huberbool Type::isArray() const { 90709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber return false; 91709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber} 92709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber 93709b62dbda6184770bb34470ff550e02c1643e67Andreas Huberbool Type::isVector() const { 9499e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen return false; 9599e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen} 9699e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenen 97abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hongbool Type::isTemplatedType() const { 98abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong return false; 99abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong} 100abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong 10199e6bebc96d75d1c9b9b8130cd9b880dacb95b01Martijn Coenenbool Type::isPointer() const { 102709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber return false; 103709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber} 104709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber 105737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberconst ScalarType *Type::resolveToScalarType() const { 106737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber return NULL; 107737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber} 108737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 1098d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isValidEnumStorageType() const { 1108d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber const ScalarType *scalarType = resolveToScalarType(); 1118d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 1128d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber if (scalarType == NULL) { 1138d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 1148d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber } 1158d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 1168d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return scalarType->isValidEnumStorageType(); 1178d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 1188d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 1199df5244c1dd4508cc2e25f8a04d363903912d19cSteven Morelandbool Type::isElidableType() const { 1209df5244c1dd4508cc2e25f8a04d363903912d19cSteven Moreland return false; 1219df5244c1dd4508cc2e25f8a04d363903912d19cSteven Moreland} 1229df5244c1dd4508cc2e25f8a04d363903912d19cSteven Moreland 123c6752dcea3b5dae1e99960b5beb6af394280b393Yifan Hongbool Type::canCheckEquality() const { 124c6752dcea3b5dae1e99960b5beb6af394280b393Yifan Hong return false; 125c6752dcea3b5dae1e99960b5beb6af394280b393Yifan Hong} 126c6752dcea3b5dae1e99960b5beb6af394280b393Yifan Hong 1273b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hongstd::string Type::getCppType(StorageMode, bool) const { 128881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 129881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return std::string(); 130881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 131881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 1323b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hongstd::string Type::decorateCppName( 1333b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong const std::string &name, StorageMode mode, bool specifyNamespaces) const { 1343b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong return getCppType(mode, specifyNamespaces) + " " + name; 1353b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong} 1363b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong 1374ed1347cd29e6e07acad368891bb03078c798abaYifan Hongstd::string Type::getJavaType(bool /* forInitializer */) const { 1384c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber CHECK(!"Should not be here"); 1394c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber return std::string(); 1404c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber} 1414c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber 14285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huberstd::string Type::getJavaWrapperType() const { 1434ed1347cd29e6e07acad368891bb03078c798abaYifan Hong return getJavaType(); 14485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 14585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 1462831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstd::string Type::getJavaSuffix() const { 1472831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber CHECK(!"Should not be here"); 1482831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return std::string(); 1492831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 1502831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 151c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhangstd::string Type::getVtsType() const { 152c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang CHECK(!"Should not be here"); 153c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang return std::string(); 154c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang} 155c5ea9f589cc7cce0b5e97bd4ac6a8561eb313a02Zhuoyao Zhang 156e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhangstd::string Type::getVtsValueName() const { 157e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang CHECK(!"Should not be here"); 158e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang return std::string(); 159e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang} 160e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang 161881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriter( 162881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, 163881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 164881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 165881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 166881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 167881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode) const { 168881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 169881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 170881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 171bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongvoid Type::emitResolveReferences( 172bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong Formatter &, 173bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 174bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 175bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 176bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 177bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 178bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong ErrorMode) const { 179bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong CHECK(!"Should not be here"); 180bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong} 181bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 182bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongvoid Type::emitResolveReferencesEmbedded( 183bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong Formatter &, 184bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong size_t, 185bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 186bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 187bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 188bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 189bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 190bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong bool, 191bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong ErrorMode, 192bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &, 193bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong const std::string &) const { 194bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong CHECK(!"Should not be here"); 195bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong} 196bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 197f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hongvoid Type::emitDump( 198f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong Formatter &out, 199f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &streamName, 200f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &name) const { 2019ab1e9e4fe5c1d0565c91ad2d45dd4b9f59e4c5bHridya Valsaraju emitDumpWithMethod(out, streamName, "::android::hardware::toString", name); 202f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong} 203f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong 204f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hongvoid Type::emitDumpWithMethod( 205f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong Formatter &out, 206f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &streamName, 207f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &methodName, 208f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong const std::string &name) const { 209f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong out << streamName 210f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong << " += " 211f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong << methodName 212f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong << "(" 213f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong << name 214f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong << ");\n"; 215f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong} 216f5cc2f74e86504f7904a0a24e7fcc00fa19cd579Yifan Hong 217e45b5303e072043679483a70606f6c00dde17382Yifan Hongvoid Type::emitJavaDump( 218e45b5303e072043679483a70606f6c00dde17382Yifan Hong Formatter &out, 219e45b5303e072043679483a70606f6c00dde17382Yifan Hong const std::string &streamName, 220e45b5303e072043679483a70606f6c00dde17382Yifan Hong const std::string &name) const { 221e45b5303e072043679483a70606f6c00dde17382Yifan Hong out << streamName << ".append(" << name << ");\n"; 222e45b5303e072043679483a70606f6c00dde17382Yifan Hong} 223e45b5303e072043679483a70606f6c00dde17382Yifan Hong 22400f471711684903fd747e7871edf437ca54ed397Yifan Hongbool Type::useParentInEmitResolveReferencesEmbedded() const { 225244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong return needsResolveReferences(); 226244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong} 227244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong 228244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hongbool Type::useNameInEmitReaderWriterEmbedded(bool) const { 229244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong return needsEmbeddedReadWrite(); 23000f471711684903fd747e7871edf437ca54ed397Yifan Hong} 23100f471711684903fd747e7871edf437ca54ed397Yifan Hong 232881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbedded( 233881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, 234f9d49f1468bd65595f6f0ae5f4d7300f4e95edf8Andreas Huber size_t, 235881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 236be2a3737675b83dd61b52c11f0d7549fa1276739Yifan Hong const std::string &, 237881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 238881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 239881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 240881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 241881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode, 242881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 243881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &) const { 244881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 245881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 246881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 2472831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriter( 2482831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 2492831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 2502831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 2512831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader) const { 2522831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber emitJavaReaderWriterWithSuffix( 2532831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out, 2542831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber parcelObj, 2552831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber argName, 2562831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber isReader, 2572831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber getJavaSuffix(), 2582831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber "" /* extra */); 2592831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 2602831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 26185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::emitJavaFieldInitializer( 26285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, 26385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &fieldName) const { 2644ed1347cd29e6e07acad368891bb03078c798abaYifan Hong out << getJavaType() 26585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << " " 26685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << fieldName 26785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << ";\n"; 26885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 26985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 27085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::emitJavaFieldReaderWriter( 27185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &, 2724c865b72b320a46f326a335cfd326b66b0e10f67Andreas Huber size_t, 27385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 27485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 27585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 276709b62dbda6184770bb34470ff550e02c1643e67Andreas Huber const std::string &, 27785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber bool) const { 27885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber CHECK(!"Should not be here"); 27985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 28085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 281881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError(Formatter &out, ErrorMode mode) const { 282881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber switch (mode) { 283881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Ignore: 284881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 285549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "/* _hidl_err ignored! */\n\n"; 286881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 287881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 288881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 289881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Goto: 290881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 291549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { goto _hidl_error; }\n\n"; 292881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 293881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 294881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 295881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Break: 296881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 297549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { break; }\n\n"; 298881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 299881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 300737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 301737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber case ErrorMode_Return: 302737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber { 303549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { return _hidl_err; }\n\n"; 304737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber break; 305737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber } 306881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 307881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 308881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 309881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbeddedForTypeName( 310881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 311881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 312881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 313881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 314881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 315881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 316881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 317881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 318881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText, 319881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &typeName, 320244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong const std::string &childName, 321244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong const std::string &funcNamespace) const { 322244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong 323244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong const std::string parcelObjDeref = 324881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber parcelObjIsPointer ? ("*" + parcelObj) : parcelObj; 325881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 326881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string parcelObjPointer = 327881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber parcelObjIsPointer ? parcelObj : ("&" + parcelObj); 328881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 329244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong const std::string nameDerefed = nameIsPointer ? ("*" + name) : name; 330881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string namePointer = nameIsPointer ? name : ("&" + name); 331881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 332549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "_hidl_err = "; 333881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 334244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong if (!funcNamespace.empty()) { 335244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong out << funcNamespace << "::"; 336244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong } 337244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong 338244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong out << (isReader ? "readEmbeddedFromParcel(\n" : "writeEmbeddedToParcel(\n"); 339244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong 340244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong out.indent(); 341244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong out.indent(); 342244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong 343881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber if (isReader) { 344881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "const_cast<" 345881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << typeName 346857ea5f75bc814be1d5ba9ef42f8d07a00965382Martijn Coenen << " &>(" 347857ea5f75bc814be1d5ba9ef42f8d07a00965382Martijn Coenen << nameDerefed 348244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong << "),\n"; 349881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } else { 350244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong out << nameDerefed 351244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong << ",\n"; 352881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 353881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 354881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << (isReader ? parcelObjDeref : parcelObjPointer) 355881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ",\n" 356881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << parentName 357881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ",\n" 358881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << offsetText; 359881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 360881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber if (!childName.empty()) { 361881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << ", &" 362881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << childName; 363881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 364881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 365881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << ");\n\n"; 366881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 367881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 368881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 369881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 370881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber handleError(out, mode); 371881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 372881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 373881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDeclarations(Formatter &) const { 374881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 375881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 376881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 377e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huberstatus_t Type::emitGlobalTypeDeclarations(Formatter &) const { 378e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber return OK; 379e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber} 380e3f769aa75dd6be6bb1ba83904def47d9e464769Andreas Huber 381244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hongstatus_t Type::emitGlobalHwDeclarations(Formatter &) const { 382244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong return OK; 383244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong} 384244e82d34bf0ef5d8d5b0730a9dea3e3fc4de7c5Yifan Hong 385881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDefinitions( 386881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, const std::string) const { 387881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 388881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 389881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 39085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huberstatus_t Type::emitJavaTypeDeclarations(Formatter &, bool) const { 3912831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return OK; 3922831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 3932831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 394881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::needsEmbeddedReadWrite() const { 395881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return false; 396881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 397881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 398bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongbool Type::needsResolveReferences() const { 399bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong return false; 400bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong} 401bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 402881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::resultNeedsDeref() const { 403881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return false; 404881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 405881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 4063b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hongstd::string Type::getCppStackType(bool specifyNamespaces) const { 4073b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong return getCppType(StorageMode_Stack, specifyNamespaces); 408881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 409881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 4103b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hongstd::string Type::getCppResultType(bool specifyNamespaces) const { 4113b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong return getCppType(StorageMode_Result, specifyNamespaces); 412881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 413881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 4143b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hongstd::string Type::getCppArgumentType(bool specifyNamespaces) const { 4153b320f8a60e4343bf06319bca3fc949c95eaf326Yifan Hong return getCppType(StorageMode_Argument, specifyNamespaces); 416881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 417881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 4182831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriterWithSuffix( 4192831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 4202831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 4212831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 4222831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader, 4232831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &suffix, 4242831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &extra) const { 4252831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << parcelObj 4262831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << "." 4272831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << (isReader ? "read" : "write") 4282831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << suffix 4292831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << "("; 4302831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 4312831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber if (isReader) { 4322831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << extra; 4332831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } else { 4342831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << (extra.empty() ? "" : (extra + ", ")); 4352831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << argName; 4362831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 4372831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 4382831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << ");\n"; 4392831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 4402831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 4415158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhangstatus_t Type::emitVtsTypeDeclarations(Formatter &) const { 4425158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return OK; 4435158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 4445158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 445864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhangstatus_t Type::emitVtsAttributeType(Formatter &out) const { 4465158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return emitVtsTypeDeclarations(out); 4475158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 4485158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 44970a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huberbool Type::isJavaCompatible() const { 45070a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber return true; 45170a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber} 45270a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber 4532639fa32c9d9cc37a15e771b26aaa6cea415b499Andreas Hubervoid Type::getAlignmentAndSize( 4542639fa32c9d9cc37a15e771b26aaa6cea415b499Andreas Huber size_t * /* align */, size_t * /* size */) const { 4552639fa32c9d9cc37a15e771b26aaa6cea415b499Andreas Huber CHECK(!"Should not be here."); 4562639fa32c9d9cc37a15e771b26aaa6cea415b499Andreas Huber} 4572639fa32c9d9cc37a15e771b26aaa6cea415b499Andreas Huber 4582639fa32c9d9cc37a15e771b26aaa6cea415b499Andreas Huberbool Type::containsPointer() const { 4592639fa32c9d9cc37a15e771b26aaa6cea415b499Andreas Huber return false; 46085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 46185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 462019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Hubervoid Type::appendToExportedTypesVector( 463019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber std::vector<const Type *> * /* exportedTypes */) const { 464019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber} 465019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber 4661c507273be6a1beefbe7ef6ec63992a7cf66c4f8Andreas Huberstatus_t Type::emitExportedHeader( 4671c507273be6a1beefbe7ef6ec63992a7cf66c4f8Andreas Huber Formatter & /* out */, bool /* forJava */) const { 468019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber return OK; 469019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber} 470019d21db821ee4ae6dd3858174a0a5cee4d33c25Andreas Huber 471bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong//////////////////////////////////////// 472bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 473bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan HongTemplatedType::TemplatedType() : mElementType(nullptr) { 474bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong} 47530bb6a869be0f3f82497b7b11c71ec9d47652ed0Steven Moreland 476bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hongvoid TemplatedType::setElementType(Type *elementType) { 477bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong CHECK(mElementType == nullptr); // can only be set once. 47830bb6a869be0f3f82497b7b11c71ec9d47652ed0Steven Moreland CHECK(isCompatibleElementType(elementType)); 479bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong mElementType = elementType; 480bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong} 481bf459bcedc2ab1a22a9cc290fbcc0a5462e63690Yifan Hong 482abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan HongType *TemplatedType::getElementType() const { 483abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong return mElementType; 484abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong} 485abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong 486abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hongbool TemplatedType::isTemplatedType() const { 487abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong return true; 488abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong} 489abf73eef7f23f0b0ba0fe85694dcd511f4e69962Yifan Hong 490e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhangstatus_t TemplatedType::emitVtsTypeDeclarations(Formatter &out) const { 491e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang out << "type: " << getVtsType() << "\n"; 492e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang out << getVtsValueName() << ": {\n"; 493e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang out.indent(); 494e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang status_t err = mElementType->emitVtsTypeDeclarations(out); 495e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang if (err != OK) { 496e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang return err; 497e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang } 498e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang out.unindent(); 499e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang out << "}\n"; 500e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang return OK; 501e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang} 502e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang 503e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhangstatus_t TemplatedType::emitVtsAttributeType(Formatter &out) const { 504e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang out << "type: " << getVtsType() << "\n"; 505e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang out << getVtsValueName() << ": {\n"; 506e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang out.indent(); 507e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang status_t status = mElementType->emitVtsAttributeType(out); 508e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang if (status != OK) { 509e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang return status; 510e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang } 511e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang out.unindent(); 512e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang out << "}\n"; 513e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang return OK; 514e9667849dd310995d1e4d12f31942f68bf992d1cZhuoyao Zhang} 515c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 516c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 517