• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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