blob: 6805631bd2600a5cc63d8457dc18500ce3361182 [file] [log] [blame]
Adam Lesinski6f6ceb72014-11-14 14:48:12 -08001/*
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"
Adam Lesinski1ab598f2015-08-14 14:26:04 -070018#include "util/StringPiece.h"
Adam Lesinski6f6ceb72014-11-14 14:48:12 -080019
20#include <map>
21#include <string>
22
23namespace aapt {
24
Adam Lesinskid0f116b2016-07-08 15:00:32 -070025StringPiece toString(ResourceType type) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -070026 switch (type) {
27 case ResourceType::kAnim:
28 return "anim";
29 case ResourceType::kAnimator:
30 return "animator";
31 case ResourceType::kArray:
32 return "array";
33 case ResourceType::kAttr:
34 return "attr";
35 case ResourceType::kAttrPrivate:
36 return "^attr-private";
37 case ResourceType::kBool:
38 return "bool";
39 case ResourceType::kColor:
40 return "color";
41 case ResourceType::kDimen:
42 return "dimen";
43 case ResourceType::kDrawable:
44 return "drawable";
45 case ResourceType::kFraction:
46 return "fraction";
47 case ResourceType::kId:
48 return "id";
49 case ResourceType::kInteger:
50 return "integer";
51 case ResourceType::kInterpolator:
52 return "interpolator";
53 case ResourceType::kLayout:
54 return "layout";
55 case ResourceType::kMenu:
56 return "menu";
57 case ResourceType::kMipmap:
58 return "mipmap";
59 case ResourceType::kPlurals:
60 return "plurals";
61 case ResourceType::kRaw:
62 return "raw";
63 case ResourceType::kString:
64 return "string";
65 case ResourceType::kStyle:
66 return "style";
67 case ResourceType::kStyleable:
68 return "styleable";
69 case ResourceType::kTransition:
70 return "transition";
71 case ResourceType::kXml:
72 return "xml";
73 }
74 return {};
Adam Lesinski6f6ceb72014-11-14 14:48:12 -080075}
76
Adam Lesinskicacb28f2016-10-19 12:18:14 -070077static const std::map<StringPiece, ResourceType> sResourceTypeMap{
78 {"anim", ResourceType::kAnim},
79 {"animator", ResourceType::kAnimator},
80 {"array", ResourceType::kArray},
81 {"attr", ResourceType::kAttr},
82 {"^attr-private", ResourceType::kAttrPrivate},
83 {"bool", ResourceType::kBool},
84 {"color", ResourceType::kColor},
85 {"dimen", ResourceType::kDimen},
86 {"drawable", ResourceType::kDrawable},
87 {"fraction", ResourceType::kFraction},
88 {"id", ResourceType::kId},
89 {"integer", ResourceType::kInteger},
90 {"interpolator", ResourceType::kInterpolator},
91 {"layout", ResourceType::kLayout},
92 {"menu", ResourceType::kMenu},
93 {"mipmap", ResourceType::kMipmap},
94 {"plurals", ResourceType::kPlurals},
95 {"raw", ResourceType::kRaw},
96 {"string", ResourceType::kString},
97 {"style", ResourceType::kStyle},
98 {"styleable", ResourceType::kStyleable},
99 {"transition", ResourceType::kTransition},
100 {"xml", ResourceType::kXml},
Adam Lesinski6f6ceb72014-11-14 14:48:12 -0800101};
102
Adam Lesinskid0f116b2016-07-08 15:00:32 -0700103const ResourceType* parseResourceType(const StringPiece& str) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700104 auto iter = sResourceTypeMap.find(str);
105 if (iter == std::end(sResourceTypeMap)) {
106 return nullptr;
107 }
108 return &iter->second;
Adam Lesinski6f6ceb72014-11-14 14:48:12 -0800109}
110
Adam Lesinskia6fe3452015-12-09 15:20:52 -0800111bool operator<(const ResourceKey& a, const ResourceKey& b) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700112 return std::tie(a.name, a.config) < std::tie(b.name, b.config);
Adam Lesinskia6fe3452015-12-09 15:20:52 -0800113}
114
115bool operator<(const ResourceKeyRef& a, const ResourceKeyRef& b) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700116 return std::tie(a.name, a.config) < std::tie(b.name, b.config);
Adam Lesinskia6fe3452015-12-09 15:20:52 -0800117}
118
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700119} // namespace aapt