blob: 3eef7aa71a925648efdad2d46f43dd81b53e9fea [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 Lesinski6f6ceb72014-11-14 14:48:12 -080018
19#include <map>
20#include <string>
21
22namespace aapt {
23
Adam Lesinskice5e56e2016-10-21 17:56:45 -070024StringPiece ToString(ResourceType type) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -070025 switch (type) {
26 case ResourceType::kAnim:
27 return "anim";
28 case ResourceType::kAnimator:
29 return "animator";
30 case ResourceType::kArray:
31 return "array";
32 case ResourceType::kAttr:
33 return "attr";
34 case ResourceType::kAttrPrivate:
35 return "^attr-private";
36 case ResourceType::kBool:
37 return "bool";
38 case ResourceType::kColor:
39 return "color";
40 case ResourceType::kDimen:
41 return "dimen";
42 case ResourceType::kDrawable:
43 return "drawable";
Adam Lesinskic0c36632016-10-19 18:37:53 -070044 case ResourceType::kFont:
45 return "font";
Adam Lesinskicacb28f2016-10-19 12:18:14 -070046 case ResourceType::kFraction:
47 return "fraction";
48 case ResourceType::kId:
49 return "id";
50 case ResourceType::kInteger:
51 return "integer";
52 case ResourceType::kInterpolator:
53 return "interpolator";
54 case ResourceType::kLayout:
55 return "layout";
56 case ResourceType::kMenu:
57 return "menu";
58 case ResourceType::kMipmap:
59 return "mipmap";
60 case ResourceType::kPlurals:
61 return "plurals";
62 case ResourceType::kRaw:
63 return "raw";
64 case ResourceType::kString:
65 return "string";
66 case ResourceType::kStyle:
67 return "style";
68 case ResourceType::kStyleable:
69 return "styleable";
70 case ResourceType::kTransition:
71 return "transition";
72 case ResourceType::kXml:
73 return "xml";
74 }
75 return {};
Adam Lesinski6f6ceb72014-11-14 14:48:12 -080076}
77
Adam Lesinskicacb28f2016-10-19 12:18:14 -070078static const std::map<StringPiece, ResourceType> sResourceTypeMap{
79 {"anim", ResourceType::kAnim},
80 {"animator", ResourceType::kAnimator},
81 {"array", ResourceType::kArray},
82 {"attr", ResourceType::kAttr},
83 {"^attr-private", ResourceType::kAttrPrivate},
84 {"bool", ResourceType::kBool},
85 {"color", ResourceType::kColor},
86 {"dimen", ResourceType::kDimen},
87 {"drawable", ResourceType::kDrawable},
Adam Lesinskic0c36632016-10-19 18:37:53 -070088 {"font", ResourceType::kFont},
Adam Lesinskicacb28f2016-10-19 12:18:14 -070089 {"fraction", ResourceType::kFraction},
90 {"id", ResourceType::kId},
91 {"integer", ResourceType::kInteger},
92 {"interpolator", ResourceType::kInterpolator},
93 {"layout", ResourceType::kLayout},
94 {"menu", ResourceType::kMenu},
95 {"mipmap", ResourceType::kMipmap},
96 {"plurals", ResourceType::kPlurals},
97 {"raw", ResourceType::kRaw},
98 {"string", ResourceType::kString},
99 {"style", ResourceType::kStyle},
100 {"styleable", ResourceType::kStyleable},
101 {"transition", ResourceType::kTransition},
102 {"xml", ResourceType::kXml},
Adam Lesinski6f6ceb72014-11-14 14:48:12 -0800103};
104
Adam Lesinskice5e56e2016-10-21 17:56:45 -0700105const ResourceType* ParseResourceType(const StringPiece& str) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700106 auto iter = sResourceTypeMap.find(str);
107 if (iter == std::end(sResourceTypeMap)) {
108 return nullptr;
109 }
110 return &iter->second;
Adam Lesinski6f6ceb72014-11-14 14:48:12 -0800111}
112
Adam Lesinskia6fe3452015-12-09 15:20:52 -0800113bool operator<(const ResourceKey& a, const ResourceKey& b) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700114 return std::tie(a.name, a.config) < std::tie(b.name, b.config);
Adam Lesinskia6fe3452015-12-09 15:20:52 -0800115}
116
117bool operator<(const ResourceKeyRef& a, const ResourceKeyRef& b) {
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700118 return std::tie(a.name, a.config) < std::tie(b.name, b.config);
Adam Lesinskia6fe3452015-12-09 15:20:52 -0800119}
120
Adam Lesinskicacb28f2016-10-19 12:18:14 -0700121} // namespace aapt