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