Type.cpp revision 85eabdbe56720dcdcf130e5ca83129d47b143768
1c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "Type.h" 2c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 3881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include "Formatter.h" 48d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber#include "ScalarType.h" 5881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 6881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include <android-base/logging.h> 7881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 8c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 9c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 10c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas HuberType::Type() {} 11c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas HuberType::~Type() {} 12c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 135345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huberbool Type::isScope() const { 145345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber return false; 155345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber} 165345ec2b1b7e4126b77aa2131b231a9eb5ee811dAndreas Huber 17a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huberbool Type::isInterface() const { 18a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber return false; 19a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber} 20a2723d26427f7db19777dfed330047253e7a4e1bAndreas Huber 218d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isEnum() const { 228d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 238d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 248d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 258d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isTypeDef() const { 268d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 278d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 288d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 29295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huberbool Type::isBinder() const { 30295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber return false; 31295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber} 32295ad30bf6212c16accc5095601b2a71d44b4c8bAndreas Huber 3339fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huberbool Type::isNamedType() const { 3439fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber return false; 3539fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber} 3639fa71827738f6c1340e4523946fe9bf704eef3aAndreas Huber 37737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberconst ScalarType *Type::resolveToScalarType() const { 38737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber return NULL; 39737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber} 40737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 418d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool Type::isValidEnumStorageType() const { 428d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber const ScalarType *scalarType = resolveToScalarType(); 438d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 448d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber if (scalarType == NULL) { 458d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return false; 468d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber } 478d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 488d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return scalarType->isValidEnumStorageType(); 498d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 508d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 51881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppType(StorageMode, std::string *) const { 52881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 53881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return std::string(); 54881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 5685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huberstd::string Type::getJavaWrapperType() const { 5785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber return getJavaType(); 5885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 5985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 602831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstd::string Type::getJavaSuffix() const { 612831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber CHECK(!"Should not be here"); 622831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return std::string(); 632831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 642831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 65881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriter( 66881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, 67881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 68881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 69881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 70881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 71881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode) const { 72881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 73881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 74881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 75881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbedded( 76881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, 77881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 78881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 79881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 80881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 81881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool, 82881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode, 83881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &, 84881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &) const { 85881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber CHECK(!"Should not be here"); 86881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 87881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 882831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriter( 892831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 902831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 912831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 922831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader) const { 932831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber emitJavaReaderWriterWithSuffix( 942831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out, 952831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber parcelObj, 962831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber argName, 972831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber isReader, 982831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber getJavaSuffix(), 992831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber "" /* extra */); 1002831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 1012831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 10285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::emitJavaFieldInitializer( 10385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &out, 10485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &fieldName) const { 10585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber out << getJavaType() 10685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << " " 10785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << fieldName 10885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber << ";\n"; 10985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 11085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 11185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::emitJavaFieldReaderWriter( 11285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber Formatter &, 11385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 11485eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 11585eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber const std::string &, 11685eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber bool) const { 11785eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber CHECK(!"Should not be here"); 11885eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 11985eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 120881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError(Formatter &out, ErrorMode mode) const { 121881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber switch (mode) { 122881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Ignore: 123881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 124549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "/* _hidl_err ignored! */\n\n"; 125881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 126881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 127881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 128881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Goto: 129881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 130549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { goto _hidl_error; }\n\n"; 131881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 132881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 133881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 134881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Break: 135881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 136549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { break; }\n\n"; 137881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 138881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 139737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 140737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber case ErrorMode_Return: 141737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber { 142549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "if (_hidl_err != ::android::OK) { return _hidl_err; }\n\n"; 143737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber break; 144737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber } 145881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 146881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 147881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 148881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::handleError2(Formatter &out, ErrorMode mode) const { 149881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber switch (mode) { 150881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Goto: 151881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 152549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "goto _hidl_error;\n"; 153881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 154881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 155737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 156881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Break: 157881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 158881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "break;\n"; 159881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 160881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 161737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 162881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber case ErrorMode_Ignore: 163881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber { 164549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "/* ignoring _hidl_error! */"; 165881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber break; 166881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 167737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 168737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber case ErrorMode_Return: 169737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber { 170549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "return _hidl_err;\n"; 171737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber break; 172737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber } 173881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 174881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 175881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 176881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid Type::emitReaderWriterEmbeddedForTypeName( 177881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 178881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 179881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool nameIsPointer, 180881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 181881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 182881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 183881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode, 184881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parentName, 185881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &offsetText, 186881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &typeName, 187881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &childName) const { 188881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string parcelObjDeref = 189881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber parcelObjIsPointer ? ("*" + parcelObj) : parcelObj; 190881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 191881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string parcelObjPointer = 192881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber parcelObjIsPointer ? parcelObj : ("&" + parcelObj); 193881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 194881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string nameDeref = name + (nameIsPointer ? "->" : "."); 195881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string namePointer = nameIsPointer ? name : ("&" + name); 196881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 197549e2598843dcc092a6049bbd9e209c249b1b11aIliyan Malchev out << "_hidl_err = "; 198881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 199881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber if (isReader) { 200881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "const_cast<" 201881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << typeName 202881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << " *>(" 203881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << namePointer 204881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ")->readEmbeddedFromParcel(\n"; 205881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } else { 206881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << nameDeref 207881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << "writeEmbeddedToParcel(\n"; 208881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 209881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 210881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.indent(); 211881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.indent(); 212881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 213881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << (isReader ? parcelObjDeref : parcelObjPointer) 214881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ",\n" 215881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << parentName 216881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << ",\n" 217881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << offsetText; 218881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 219881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber if (!childName.empty()) { 220881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << ", &" 221881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << childName; 222881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 223881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 224881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << ");\n\n"; 225881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 226881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 227881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 228881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 229881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber handleError(out, mode); 230881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 231881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 232881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDeclarations(Formatter &) const { 233881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 234881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 235881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 236881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t Type::emitTypeDefinitions( 237881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &, const std::string) const { 238881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 239881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 240881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 24185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huberstatus_t Type::emitJavaTypeDeclarations(Formatter &, bool) const { 2422831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return OK; 2432831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 2442831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 245881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::needsEmbeddedReadWrite() const { 246881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return false; 247881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 248881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 249881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberbool Type::resultNeedsDeref() const { 250881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return false; 251881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 252881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 253881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppType(std::string *extra) const { 254881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return getCppType(StorageMode_Stack, extra); 255881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 256881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 257881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppResultType(std::string *extra) const { 258881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return getCppType(StorageMode_Result, extra); 259881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 260881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 261881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string Type::getCppArgumentType(std::string *extra) const { 262881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return getCppType(StorageMode_Argument, extra); 263881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 264881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 2652831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Hubervoid Type::emitJavaReaderWriterWithSuffix( 2662831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber Formatter &out, 2672831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &parcelObj, 2682831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &argName, 2692831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber bool isReader, 2702831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &suffix, 2712831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &extra) const { 2722831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << parcelObj 2732831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << "." 2742831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << (isReader ? "read" : "write") 2752831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << suffix 2762831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << "("; 2772831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 2782831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber if (isReader) { 2792831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << extra; 2802831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } else { 2812831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << (extra.empty() ? "" : (extra + ", ")); 2822831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << argName; 2832831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 2842831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 2852831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << ");\n"; 2862831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 2872831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 2885158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhangstatus_t Type::emitVtsTypeDeclarations(Formatter &) const { 2895158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return OK; 2905158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 2915158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 292864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhangstatus_t Type::emitVtsAttributeType(Formatter &out) const { 2935158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return emitVtsTypeDeclarations(out); 2945158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 2955158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 29670a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huberbool Type::isJavaCompatible() const { 29770a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber return true; 29870a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber} 29970a59e1dc3dcf32f791d2dd7966111d4adf32ecaAndreas Huber 30085eabdbe56720dcdcf130e5ca83129d47b143768Andreas Hubervoid Type::getAlignmentAndSize(size_t *, size_t *) const { 30185eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber CHECK(!"Should not be here"); 30285eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber} 30385eabdbe56720dcdcf130e5ca83129d47b143768Andreas Huber 304c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 305c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 306