Home | History | Annotate | Download | only in aapt2
      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 
     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 
    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 
    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 
    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