Type.h revision ce65189eb8825c7239438e9ff1abb08f65f15bd0
1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef TYPE_H_ 18#define TYPE_H_ 19 20#include "Expression.h" 21 22#include <android-base/macros.h> 23#include <android-base/logging.h> 24#include <string> 25#include <vector> 26#include <map> 27 28namespace android { 29 30struct Type { 31 32 struct Qualifier { 33 34 enum Qualification { 35 NONE = 0, 36 STRUCT, 37 UNION, 38 SIGNED, 39 UNSIGNED, 40 VOID, 41 POINTER, 42 CONST, 43 GENERICS, 44 ID, 45 ENUM 46 } qualification; 47 48 union { 49 std::string id; 50 Type *generics; 51 }; 52 53 Qualifier(Qualification qualification) 54 : qualification(qualification) {} 55 Qualifier(Qualification qualification, std::string id) 56 : qualification(qualification), id(id) {} 57 Qualifier(Qualification qualification, Type* generics) 58 : qualification(qualification), generics(generics) {} 59 60 ~Qualifier() { 61 if (qualification == GENERICS) { 62 delete generics; 63 } 64 } 65 }; 66 67 Type(std::vector<Qualifier*> *qualifiers); 68 ~Type(); 69 70 static std::string qualifierText(Qualifier::Qualification qual) { 71 switch(qual) { 72 case Qualifier::STRUCT: return "struct"; 73 case Qualifier::UNION: return "union"; 74 case Qualifier::ENUM: return "enum"; 75 case Qualifier::SIGNED: return "signed"; 76 case Qualifier::UNSIGNED: return "unsigned"; 77 case Qualifier::VOID: return "void"; 78 case Qualifier::POINTER: return "*"; 79 case Qualifier::CONST: return "const"; 80 case Qualifier::ID: return "ID"; 81 case Qualifier::NONE: return ""; 82 default: return "/* UNKNOWN TYPE QUALIFIER */"; 83 } 84 } 85 86 void setArrays(std::vector<Expression *> *arrays); 87 88 const std::string decorateName(const std::string &name) const; 89 90 bool isVoid() const; 91 std::string removeLastId(); 92 93private: 94 95 static std::map<std::string, std::string> kCToHidlMap; 96 static const std::string cToHidlType(const std::string &cType); 97 98 const std::string getHidlType() const; 99 100 const std::string getRawQualifierList() const; 101 const std::string getSpecialTypeName() const; 102 103 std::vector<Qualifier*> *mQualifiers = NULL; 104 105 /* [ expression ] [ expression ] ... [ expression ] */ 106 std::vector<Expression*> *mArrays = NULL; 107 108 DISALLOW_COPY_AND_ASSIGN(Type); 109}; 110 111} // namespace android 112 113#endif // TYPE_H_