1 /* 2 * Copyright (C) 2015 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 #include "Resource.h" 18 19 #include <map> 20 #include <string> 21 22 using android::StringPiece; 23 24 namespace aapt { 25 ToString(ResourceType type)26 StringPiece ToString(ResourceType type) { 27 switch (type) { 28 case ResourceType::kAnim: 29 return "anim"; 30 case ResourceType::kAnimator: 31 return "animator"; 32 case ResourceType::kArray: 33 return "array"; 34 case ResourceType::kAttr: 35 return "attr"; 36 case ResourceType::kAttrPrivate: 37 return "^attr-private"; 38 case ResourceType::kBool: 39 return "bool"; 40 case ResourceType::kColor: 41 return "color"; 42 case ResourceType::kConfigVarying: 43 return "configVarying"; 44 case ResourceType::kDimen: 45 return "dimen"; 46 case ResourceType::kDrawable: 47 return "drawable"; 48 case ResourceType::kFont: 49 return "font"; 50 case ResourceType::kFraction: 51 return "fraction"; 52 case ResourceType::kId: 53 return "id"; 54 case ResourceType::kInteger: 55 return "integer"; 56 case ResourceType::kInterpolator: 57 return "interpolator"; 58 case ResourceType::kLayout: 59 return "layout"; 60 case ResourceType::kMenu: 61 return "menu"; 62 case ResourceType::kMipmap: 63 return "mipmap"; 64 case ResourceType::kPlurals: 65 return "plurals"; 66 case ResourceType::kRaw: 67 return "raw"; 68 case ResourceType::kString: 69 return "string"; 70 case ResourceType::kStyle: 71 return "style"; 72 case ResourceType::kStyleable: 73 return "styleable"; 74 case ResourceType::kTransition: 75 return "transition"; 76 case ResourceType::kXml: 77 return "xml"; 78 } 79 return {}; 80 } 81 82 static const std::map<StringPiece, ResourceType> sResourceTypeMap{ 83 {"anim", ResourceType::kAnim}, 84 {"animator", ResourceType::kAnimator}, 85 {"array", ResourceType::kArray}, 86 {"attr", ResourceType::kAttr}, 87 {"^attr-private", ResourceType::kAttrPrivate}, 88 {"bool", ResourceType::kBool}, 89 {"color", ResourceType::kColor}, 90 {"configVarying", ResourceType::kConfigVarying}, 91 {"dimen", ResourceType::kDimen}, 92 {"drawable", ResourceType::kDrawable}, 93 {"font", ResourceType::kFont}, 94 {"fraction", ResourceType::kFraction}, 95 {"id", ResourceType::kId}, 96 {"integer", ResourceType::kInteger}, 97 {"interpolator", ResourceType::kInterpolator}, 98 {"layout", ResourceType::kLayout}, 99 {"menu", ResourceType::kMenu}, 100 {"mipmap", ResourceType::kMipmap}, 101 {"plurals", ResourceType::kPlurals}, 102 {"raw", ResourceType::kRaw}, 103 {"string", ResourceType::kString}, 104 {"style", ResourceType::kStyle}, 105 {"styleable", ResourceType::kStyleable}, 106 {"transition", ResourceType::kTransition}, 107 {"xml", ResourceType::kXml}, 108 }; 109 ParseResourceType(const StringPiece & str)110 const ResourceType* ParseResourceType(const StringPiece& str) { 111 auto iter = sResourceTypeMap.find(str); 112 if (iter == std::end(sResourceTypeMap)) { 113 return nullptr; 114 } 115 return &iter->second; 116 } 117 operator <(const ResourceKey & a,const ResourceKey & b)118 bool operator<(const ResourceKey& a, const ResourceKey& b) { 119 return std::tie(a.name, a.config) < std::tie(b.name, b.config); 120 } 121 operator <(const ResourceKeyRef & a,const ResourceKeyRef & b)122 bool operator<(const ResourceKeyRef& a, const ResourceKeyRef& b) { 123 return std::tie(a.name, a.config) < std::tie(b.name, b.config); 124 } 125 126 } // namespace aapt 127