• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
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"
18  
19  #include <map>
20  #include <string>
21  
22  using android::StringPiece;
23  
24  namespace aapt {
25  
ToString(ResourceType type)26  StringPiece ToString(ResourceType type) {
27    switch (type) {
28      case ResourceType::kAnim:
29        return "anim";
30      case ResourceType::kAnimator:
31        return "animator";
32      case ResourceType::kArray:
33        return "array";
34      case ResourceType::kAttr:
35        return "attr";
36      case ResourceType::kAttrPrivate:
37        return "^attr-private";
38      case ResourceType::kBool:
39        return "bool";
40      case ResourceType::kColor:
41        return "color";
42      case ResourceType::kConfigVarying:
43        return "configVarying";
44      case ResourceType::kDimen:
45        return "dimen";
46      case ResourceType::kDrawable:
47        return "drawable";
48      case ResourceType::kFont:
49        return "font";
50      case ResourceType::kFraction:
51        return "fraction";
52      case ResourceType::kId:
53        return "id";
54      case ResourceType::kInteger:
55        return "integer";
56      case ResourceType::kInterpolator:
57        return "interpolator";
58      case ResourceType::kLayout:
59        return "layout";
60      case ResourceType::kMenu:
61        return "menu";
62      case ResourceType::kMipmap:
63        return "mipmap";
64      case ResourceType::kPlurals:
65        return "plurals";
66      case ResourceType::kRaw:
67        return "raw";
68      case ResourceType::kString:
69        return "string";
70      case ResourceType::kStyle:
71        return "style";
72      case ResourceType::kStyleable:
73        return "styleable";
74      case ResourceType::kTransition:
75        return "transition";
76      case ResourceType::kXml:
77        return "xml";
78    }
79    return {};
80  }
81  
82  static const std::map<StringPiece, ResourceType> sResourceTypeMap{
83      {"anim", ResourceType::kAnim},
84      {"animator", ResourceType::kAnimator},
85      {"array", ResourceType::kArray},
86      {"attr", ResourceType::kAttr},
87      {"^attr-private", ResourceType::kAttrPrivate},
88      {"bool", ResourceType::kBool},
89      {"color", ResourceType::kColor},
90      {"configVarying", ResourceType::kConfigVarying},
91      {"dimen", ResourceType::kDimen},
92      {"drawable", ResourceType::kDrawable},
93      {"font", ResourceType::kFont},
94      {"fraction", ResourceType::kFraction},
95      {"id", ResourceType::kId},
96      {"integer", ResourceType::kInteger},
97      {"interpolator", ResourceType::kInterpolator},
98      {"layout", ResourceType::kLayout},
99      {"menu", ResourceType::kMenu},
100      {"mipmap", ResourceType::kMipmap},
101      {"plurals", ResourceType::kPlurals},
102      {"raw", ResourceType::kRaw},
103      {"string", ResourceType::kString},
104      {"style", ResourceType::kStyle},
105      {"styleable", ResourceType::kStyleable},
106      {"transition", ResourceType::kTransition},
107      {"xml", ResourceType::kXml},
108  };
109  
ParseResourceType(const StringPiece & str)110  const ResourceType* ParseResourceType(const StringPiece& str) {
111    auto iter = sResourceTypeMap.find(str);
112    if (iter == std::end(sResourceTypeMap)) {
113      return nullptr;
114    }
115    return &iter->second;
116  }
117  
operator <(const ResourceKey & a,const ResourceKey & b)118  bool operator<(const ResourceKey& a, const ResourceKey& b) {
119    return std::tie(a.name, a.config) < std::tie(b.name, b.config);
120  }
121  
operator <(const ResourceKeyRef & a,const ResourceKeyRef & b)122  bool operator<(const ResourceKeyRef& a, const ResourceKeyRef& b) {
123    return std::tie(a.name, a.config) < std::tie(b.name, b.config);
124  }
125  
126  }  // namespace aapt
127