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