16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/*
26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2015 The Android Open Source Project
36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License.
66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at
76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software
116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and
146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License.
156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "Resource.h"
186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <map>
206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <string>
216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
22d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinskiusing android::StringPiece;
23d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski
246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt {
256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
26ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam LesinskiStringPiece ToString(ResourceType type) {
27cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  switch (type) {
28cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kAnim:
29cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "anim";
30cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kAnimator:
31cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "animator";
32cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kArray:
33cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "array";
34cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kAttr:
35cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "attr";
36cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kAttrPrivate:
37cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "^attr-private";
38cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kBool:
39cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "bool";
40cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kColor:
41cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "color";
4286d67df8d57b9537666f9b54a9ca563779a2288bAdam Lesinski    case ResourceType::kConfigVarying:
4386d67df8d57b9537666f9b54a9ca563779a2288bAdam Lesinski      return "configVarying";
44cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kDimen:
45cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "dimen";
46cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kDrawable:
47cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "drawable";
48c0c366394c658e3787b12e65833b520c9a9a34d9Adam Lesinski    case ResourceType::kFont:
49c0c366394c658e3787b12e65833b520c9a9a34d9Adam Lesinski      return "font";
50cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kFraction:
51cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "fraction";
52cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kId:
53cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "id";
54cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kInteger:
55cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "integer";
56cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kInterpolator:
57cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "interpolator";
58cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kLayout:
59cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "layout";
60cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kMenu:
61cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "menu";
62cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kMipmap:
63cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "mipmap";
64cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kPlurals:
65cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "plurals";
66cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kRaw:
67cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "raw";
68cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kString:
69cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "string";
70cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kStyle:
71cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "style";
72cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kStyleable:
73cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "styleable";
74cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kTransition:
75cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "transition";
76cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kXml:
77cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "xml";
78cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  }
79cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  return {};
806f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
816f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
82cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinskistatic const std::map<StringPiece, ResourceType> sResourceTypeMap{
83cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"anim", ResourceType::kAnim},
84cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"animator", ResourceType::kAnimator},
85cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"array", ResourceType::kArray},
86cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"attr", ResourceType::kAttr},
87cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"^attr-private", ResourceType::kAttrPrivate},
88cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"bool", ResourceType::kBool},
89cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"color", ResourceType::kColor},
9086d67df8d57b9537666f9b54a9ca563779a2288bAdam Lesinski    {"configVarying", ResourceType::kConfigVarying},
91cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"dimen", ResourceType::kDimen},
92cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"drawable", ResourceType::kDrawable},
93c0c366394c658e3787b12e65833b520c9a9a34d9Adam Lesinski    {"font", ResourceType::kFont},
94cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"fraction", ResourceType::kFraction},
95cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"id", ResourceType::kId},
96cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"integer", ResourceType::kInteger},
97cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"interpolator", ResourceType::kInterpolator},
98cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"layout", ResourceType::kLayout},
99cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"menu", ResourceType::kMenu},
100cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"mipmap", ResourceType::kMipmap},
101cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"plurals", ResourceType::kPlurals},
102cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"raw", ResourceType::kRaw},
103cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"string", ResourceType::kString},
104cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"style", ResourceType::kStyle},
105cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"styleable", ResourceType::kStyleable},
106cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"transition", ResourceType::kTransition},
107cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"xml", ResourceType::kXml},
1086f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
1096f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
110ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinskiconst ResourceType* ParseResourceType(const StringPiece& str) {
111cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  auto iter = sResourceTypeMap.find(str);
112cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  if (iter == std::end(sResourceTypeMap)) {
113cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    return nullptr;
114cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  }
115cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  return &iter->second;
1166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
1176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
118a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinskibool operator<(const ResourceKey& a, const ResourceKey& b) {
119cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  return std::tie(a.name, a.config) < std::tie(b.name, b.config);
120a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski}
121a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski
122a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinskibool operator<(const ResourceKeyRef& a, const ResourceKeyRef& b) {
123cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  return std::tie(a.name, a.config) < std::tie(b.name, b.config);
124a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski}
125a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski
126cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski}  // namespace aapt
127