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 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::kNavigation: 65 return "navigation"; 66 case ResourceType::kPlurals: 67 return "plurals"; 68 case ResourceType::kRaw: 69 return "raw"; 70 case ResourceType::kString: 71 return "string"; 72 case ResourceType::kStyle: 73 return "style"; 74 case ResourceType::kStyleable: 75 return "styleable"; 76 case ResourceType::kTransition: 77 return "transition"; 78 case ResourceType::kXml: 79 return "xml"; 80 } 81 return {}; 82 } 83 84 static const std::map<StringPiece, ResourceType> sResourceTypeMap{ 85 {"anim", ResourceType::kAnim}, 86 {"animator", ResourceType::kAnimator}, 87 {"array", ResourceType::kArray}, 88 {"attr", ResourceType::kAttr}, 89 {"^attr-private", ResourceType::kAttrPrivate}, 90 {"bool", ResourceType::kBool}, 91 {"color", ResourceType::kColor}, 92 {"configVarying", ResourceType::kConfigVarying}, 93 {"dimen", ResourceType::kDimen}, 94 {"drawable", ResourceType::kDrawable}, 95 {"font", ResourceType::kFont}, 96 {"fraction", ResourceType::kFraction}, 97 {"id", ResourceType::kId}, 98 {"integer", ResourceType::kInteger}, 99 {"interpolator", ResourceType::kInterpolator}, 100 {"layout", ResourceType::kLayout}, 101 {"menu", ResourceType::kMenu}, 102 {"mipmap", ResourceType::kMipmap}, 103 {"navigation", ResourceType::kNavigation}, 104 {"plurals", ResourceType::kPlurals}, 105 {"raw", ResourceType::kRaw}, 106 {"string", ResourceType::kString}, 107 {"style", ResourceType::kStyle}, 108 {"styleable", ResourceType::kStyleable}, 109 {"transition", ResourceType::kTransition}, 110 {"xml", ResourceType::kXml}, 111 }; 112 113 const ResourceType* ParseResourceType(const StringPiece& str) { 114 auto iter = sResourceTypeMap.find(str); 115 if (iter == std::end(sResourceTypeMap)) { 116 return nullptr; 117 } 118 return &iter->second; 119 } 120 121 bool operator<(const ResourceKey& a, const ResourceKey& b) { 122 return std::tie(a.name, a.config) < std::tie(b.name, b.config); 123 } 124 125 bool operator<(const ResourceKeyRef& a, const ResourceKeyRef& b) { 126 return std::tie(a.name, a.config) < std::tie(b.name, b.config); 127 } 128 129 } // namespace aapt 130