EnumType.cpp revision 1c8580863620f425188e86ec60b90cf269b5201c
1c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "EnumType.h" 2c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 3c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber#include "Formatter.h" 41c8580863620f425188e86ec60b90cf269b5201cIliyan Malchev#include <inttypes.h> 5881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber#include "ScalarType.h" 6c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 7737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber#include <android-base/logging.h> 8737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 9c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Hubernamespace android { 10c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 11c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas HuberEnumType::EnumType( 129ed827c8cd6e8eddb1ad9987ab9413c1de8a27dfAndreas Huber const char *localName, 139ed827c8cd6e8eddb1ad9987ab9413c1de8a27dfAndreas Huber std::vector<EnumValue *> *values, 149ed827c8cd6e8eddb1ad9987ab9413c1de8a27dfAndreas Huber Type *storageType) 159ed827c8cd6e8eddb1ad9987ab9413c1de8a27dfAndreas Huber : NamedType(localName), 169ed827c8cd6e8eddb1ad9987ab9413c1de8a27dfAndreas Huber mValues(values), 17881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber mStorageType( 18881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber storageType != NULL 19881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ? storageType 20881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber : new ScalarType(ScalarType::KIND_INT32)) { 21c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} 22c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 238d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberconst Type *EnumType::storageType() const { 248d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return mStorageType; 258d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 268d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 278d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberconst std::vector<EnumValue *> &EnumType::values() const { 288d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return *mValues; 298d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 308d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 31737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huberconst ScalarType *EnumType::resolveToScalarType() const { 32737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber return mStorageType->resolveToScalarType(); 33737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber} 34737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 358d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huberbool EnumType::isEnum() const { 368d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber return true; 378d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber} 388d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 39881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstd::string EnumType::getCppType(StorageMode, std::string *extra) const { 40881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber extra->clear(); 41881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 420e00de41d11a83ce3becb0dbd20b799acceb19a7Andreas Huber return fullName(); 43881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 44881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 452831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstd::string EnumType::getJavaType() const { 462831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return mStorageType->resolveToScalarType()->getJavaType(); 472831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 482831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 492831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstd::string EnumType::getJavaSuffix() const { 502831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return mStorageType->resolveToScalarType()->getJavaSuffix(); 512831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 522831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 53881227d860c59471eee31d39946e96ce2daa35d6Andreas Hubervoid EnumType::emitReaderWriter( 54881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber Formatter &out, 55881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &name, 56881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber const std::string &parcelObj, 57881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool parcelObjIsPointer, 58881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber bool isReader, 59881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber ErrorMode mode) const { 60737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber const ScalarType *scalarType = mStorageType->resolveToScalarType(); 61737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber CHECK(scalarType != NULL); 62737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 63737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber scalarType->emitReaderWriterWithCast( 64737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber out, 65737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber name, 66737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber parcelObj, 67737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber parcelObjIsPointer, 68737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber isReader, 69737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber mode, 70737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber true /* needsCast */); 71881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 72881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 73881227d860c59471eee31d39946e96ce2daa35d6Andreas Huberstatus_t EnumType::emitTypeDeclarations(Formatter &out) const { 74737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber const ScalarType *scalarType = mStorageType->resolveToScalarType(); 75737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber CHECK(scalarType != NULL); 76737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber 77881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber std::string extra; 78881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 79881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "enum class " 800e00de41d11a83ce3becb0dbd20b799acceb19a7Andreas Huber << localName() 81881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << " : " 82737080baf85882c45bb322ee2191ae5fd9e1283aAndreas Huber << ((Type *)scalarType)->getCppType(&extra) 83881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber << " {\n"; 84881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 85881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.indent(); 86881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 878d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber std::vector<const EnumType *> chain; 88864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang getTypeChain(&chain); 898d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 908d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber for (auto it = chain.rbegin(); it != chain.rend(); ++it) { 918d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber const auto &type = *it; 928d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 938d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber for (const auto &entry : type->values()) { 948d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber out << entry->name(); 958d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 968d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber const char *value = entry->value(); 978d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber if (value != NULL) { 988d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber out << " = " << value; 998d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber } 1008d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber 1018d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber out << ",\n"; 1028d3ac0c6112e02e3a705fd4f9d82e523f10b4287Andreas Huber } 103881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber } 104881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 105881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out.unindent(); 106881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber out << "};\n\n"; 107881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 108881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber return OK; 109881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber} 110881227d860c59471eee31d39946e96ce2daa35d6Andreas Huber 1112831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber// Attempt to convert enum value literals into their signed equivalents, 1122831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber// i.e. if an enum value is stored in typeName 'byte', the value "192" 1132831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber// will be converted to the output "-64". 1142831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstatic bool MakeSignedIntegerValue( 1152831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string &typeName, const char *value, std::string *output) { 1162831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber output->clear(); 1172831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1182831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber char *end; 1192831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber long long x = strtoll(value, &end, 10); 1202831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1212831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber if (end > value && *end == '\0' && errno != ERANGE) { 1222831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber char out[32]; 1232831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber if (typeName == "byte") { 1242831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber sprintf(out, "%d", (int)(int8_t)x); 1252831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } else if (typeName == "short") { 1262831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber sprintf(out, "%d", (int)(int16_t)x); 1272831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } else if (typeName == "int") { 1282831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber sprintf(out, "%d", (int)(int32_t)x); 1292831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } else { 1302831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber assert(typeName == "long"); 1311c8580863620f425188e86ec60b90cf269b5201cIliyan Malchev sprintf(out, "%" PRId64 "L", (int64_t)x); 1322831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 1332831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1342831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber *output = out; 1352831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return true; 1362831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 1372831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1382831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return false; 1392831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 1402831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1412831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huberstatus_t EnumType::emitJavaTypeDeclarations(Formatter &out) const { 1422831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const ScalarType *scalarType = mStorageType->resolveToScalarType(); 1432831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber CHECK(scalarType != NULL); 1442831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1452831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << "public final class " 1462831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << localName() 1472831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << " {\n"; 1482831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1492831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out.indent(); 1502831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1512831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const std::string typeName = scalarType->getJavaType(); 1522831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1532831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber std::vector<const EnumType *> chain; 154864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang getTypeChain(&chain); 1552831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1562831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber for (auto it = chain.rbegin(); it != chain.rend(); ++it) { 1572831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const auto &type = *it; 1582831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1592831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber for (const auto &entry : type->values()) { 1602831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << "public static final " 1612831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << typeName 1622831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << " " 1632831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber << entry->name(); 1642831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1652831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber const char *value = entry->value(); 1662831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber if (value != NULL) { 1672831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << " = "; 1682831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1692831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber std::string convertedValue; 1702831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber if (MakeSignedIntegerValue(typeName, value, &convertedValue)) { 1712831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << convertedValue; 1722831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } else { 1732831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber // The value is not an integer, but some other string, 1742831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber // hopefully referring to some other enum name. 1752831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << value; 1762831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 1772831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 1782831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1792831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << ";\n"; 1802831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 1812831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber } 1822831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1832831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out.unindent(); 1842831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber out << "};\n\n"; 1852831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1862831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber return OK; 1872831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber} 1882831d5145675ead9f2fb767bf5fe4ae56b88349fAndreas Huber 1895158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhangstatus_t EnumType::emitVtsTypeDeclarations(Formatter &out) const { 190864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang out << "name: \"" << localName() << "\"\n" 1915158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang << "type: TYPE_ENUM\n" 1925158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang << "enum_value: {\n"; 1935158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang out.indent(); 194864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang 195864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang std::vector<const EnumType *> chain; 196864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang getTypeChain(&chain); 197864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang 198864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang for (auto it = chain.rbegin(); it != chain.rend(); ++it) { 199864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang const auto &type = *it; 200864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang 201864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang for (const auto &entry : type->values()) { 202864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang out << "enumerator: \"" << entry->name() << "\"\n"; 203864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang 204864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang const char *value = entry->value(); 205864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang if (value != NULL) { 206864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang out << "value: " << value << "\n"; 207864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang } 208864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang } 2095158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang } 210864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang 2115158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang out.unindent(); 2125158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang out << "}\n"; 2135158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return OK; 2145158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 2155158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 216864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhangstatus_t EnumType::emitVtsAttributeType(Formatter &out) const { 2175158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang out << "type: TYPE_ENUM\n" << "predefined_type:\"" << localName() << "\"\n"; 2185158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang return OK; 2195158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang} 2205158db484e5ab302368f191d75d5b1334c270e52Zhuoyao Zhang 221864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhangvoid EnumType::getTypeChain(std::vector<const EnumType *> *out) const { 222864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang out->clear(); 223864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang const EnumType *type = this; 224864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang for (;;) { 225864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang out->push_back(type); 226864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang 227864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang const Type *superType = type->storageType(); 228864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang if (superType == NULL || !superType->isEnum()) { 229864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang break; 230864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang } 231864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang 232864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang type = static_cast<const EnumType *>(superType); 233864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang } 234864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang} 235864c771ca4ec8a01e31c7c243625b7a5f6316768Zhuoyao Zhang 23631629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber//////////////////////////////////////////////////////////////////////////////// 23731629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber 23831629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas HuberEnumValue::EnumValue(const char *name, const char *value) 23931629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber : mName(name), 24031629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber mValue(value) { 24131629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber} 24231629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber 24331629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huberstd::string EnumValue::name() const { 24431629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber return mName; 24531629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber} 24631629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber 24731629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huberconst char *EnumValue::value() const { 24831629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber return mValue; 24931629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber} 25031629bcd51ab30bc0aadc69f3fc8ce4893eca900Andreas Huber 251c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber} // namespace android 252c9410c7e62a33fd7599b2f3e025093a2d171577eAndreas Huber 253