Resource.cpp revision ce5e56e243d262a9b65459c3bd0bb9eaadd40628
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
226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt {
236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
24ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam LesinskiStringPiece ToString(ResourceType type) {
25cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  switch (type) {
26cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kAnim:
27cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "anim";
28cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kAnimator:
29cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "animator";
30cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kArray:
31cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "array";
32cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kAttr:
33cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "attr";
34cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kAttrPrivate:
35cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "^attr-private";
36cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kBool:
37cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "bool";
38cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kColor:
39cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "color";
40cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kDimen:
41cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "dimen";
42cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kDrawable:
43cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "drawable";
44cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kFraction:
45cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "fraction";
46cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kId:
47cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "id";
48cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kInteger:
49cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "integer";
50cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kInterpolator:
51cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "interpolator";
52cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kLayout:
53cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "layout";
54cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kMenu:
55cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "menu";
56cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kMipmap:
57cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "mipmap";
58cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kPlurals:
59cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "plurals";
60cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kRaw:
61cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "raw";
62cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kString:
63cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "string";
64cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kStyle:
65cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "style";
66cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kStyleable:
67cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "styleable";
68cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kTransition:
69cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "transition";
70cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    case ResourceType::kXml:
71cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski      return "xml";
72cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  }
73cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  return {};
746f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
756f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
76cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinskistatic const std::map<StringPiece, ResourceType> sResourceTypeMap{
77cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"anim", ResourceType::kAnim},
78cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"animator", ResourceType::kAnimator},
79cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"array", ResourceType::kArray},
80cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"attr", ResourceType::kAttr},
81cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"^attr-private", ResourceType::kAttrPrivate},
82cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"bool", ResourceType::kBool},
83cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"color", ResourceType::kColor},
84cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"dimen", ResourceType::kDimen},
85cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"drawable", ResourceType::kDrawable},
86cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"fraction", ResourceType::kFraction},
87cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"id", ResourceType::kId},
88cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"integer", ResourceType::kInteger},
89cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"interpolator", ResourceType::kInterpolator},
90cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"layout", ResourceType::kLayout},
91cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"menu", ResourceType::kMenu},
92cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"mipmap", ResourceType::kMipmap},
93cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"plurals", ResourceType::kPlurals},
94cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"raw", ResourceType::kRaw},
95cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"string", ResourceType::kString},
96cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"style", ResourceType::kStyle},
97cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"styleable", ResourceType::kStyleable},
98cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"transition", ResourceType::kTransition},
99cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    {"xml", ResourceType::kXml},
1006f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski};
1016f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
102ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinskiconst ResourceType* ParseResourceType(const StringPiece& str) {
103cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  auto iter = sResourceTypeMap.find(str);
104cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  if (iter == std::end(sResourceTypeMap)) {
105cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski    return nullptr;
106cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  }
107cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  return &iter->second;
1086f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
1096f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
110a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinskibool operator<(const ResourceKey& a, const ResourceKey& b) {
111cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  return std::tie(a.name, a.config) < std::tie(b.name, b.config);
112a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski}
113a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski
114a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinskibool operator<(const ResourceKeyRef& a, const ResourceKeyRef& b) {
115cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski  return std::tie(a.name, a.config) < std::tie(b.name, b.config);
116a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski}
117a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski
118cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski}  // namespace aapt
119