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