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