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 22d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinskiusing android::StringPiece; 23d5083f6f6b9bc76bbe64052bcec639eee752a321Adam Lesinski 246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt { 256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 26ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam LesinskiStringPiece ToString(ResourceType type) { 27cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski switch (type) { 28cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kAnim: 29cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "anim"; 30cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kAnimator: 31cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "animator"; 32cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kArray: 33cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "array"; 34cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kAttr: 35cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "attr"; 36cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kAttrPrivate: 37cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "^attr-private"; 38cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kBool: 39cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "bool"; 40cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kColor: 41cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "color"; 4286d67df8d57b9537666f9b54a9ca563779a2288bAdam Lesinski case ResourceType::kConfigVarying: 4386d67df8d57b9537666f9b54a9ca563779a2288bAdam Lesinski return "configVarying"; 44cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kDimen: 45cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "dimen"; 46cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kDrawable: 47cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "drawable"; 48c0c366394c658e3787b12e65833b520c9a9a34d9Adam Lesinski case ResourceType::kFont: 49c0c366394c658e3787b12e65833b520c9a9a34d9Adam Lesinski return "font"; 50cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kFraction: 51cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "fraction"; 52cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kId: 53cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "id"; 54cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kInteger: 55cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "integer"; 56cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kInterpolator: 57cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "interpolator"; 58cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kLayout: 59cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "layout"; 60cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kMenu: 61cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "menu"; 62cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kMipmap: 63cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "mipmap"; 64cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kPlurals: 65cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "plurals"; 66cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kRaw: 67cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "raw"; 68cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kString: 69cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "string"; 70cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kStyle: 71cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "style"; 72cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kStyleable: 73cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "styleable"; 74cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kTransition: 75cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "transition"; 76cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski case ResourceType::kXml: 77cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return "xml"; 78cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski } 79cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return {}; 806f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 816f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 82cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinskistatic const std::map<StringPiece, ResourceType> sResourceTypeMap{ 83cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"anim", ResourceType::kAnim}, 84cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"animator", ResourceType::kAnimator}, 85cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"array", ResourceType::kArray}, 86cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"attr", ResourceType::kAttr}, 87cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"^attr-private", ResourceType::kAttrPrivate}, 88cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"bool", ResourceType::kBool}, 89cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"color", ResourceType::kColor}, 9086d67df8d57b9537666f9b54a9ca563779a2288bAdam Lesinski {"configVarying", ResourceType::kConfigVarying}, 91cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"dimen", ResourceType::kDimen}, 92cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"drawable", ResourceType::kDrawable}, 93c0c366394c658e3787b12e65833b520c9a9a34d9Adam Lesinski {"font", ResourceType::kFont}, 94cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"fraction", ResourceType::kFraction}, 95cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"id", ResourceType::kId}, 96cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"integer", ResourceType::kInteger}, 97cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"interpolator", ResourceType::kInterpolator}, 98cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"layout", ResourceType::kLayout}, 99cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"menu", ResourceType::kMenu}, 100cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"mipmap", ResourceType::kMipmap}, 101cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"plurals", ResourceType::kPlurals}, 102cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"raw", ResourceType::kRaw}, 103cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"string", ResourceType::kString}, 104cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"style", ResourceType::kStyle}, 105cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"styleable", ResourceType::kStyleable}, 106cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"transition", ResourceType::kTransition}, 107cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski {"xml", ResourceType::kXml}, 1086f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 1096f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 110ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinskiconst ResourceType* ParseResourceType(const StringPiece& str) { 111cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski auto iter = sResourceTypeMap.find(str); 112cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski if (iter == std::end(sResourceTypeMap)) { 113cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return nullptr; 114cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski } 115cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return &iter->second; 1166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 1176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 118a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinskibool operator<(const ResourceKey& a, const ResourceKey& b) { 119cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return std::tie(a.name, a.config) < std::tie(b.name, b.config); 120a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski} 121a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski 122a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinskibool operator<(const ResourceKeyRef& a, const ResourceKeyRef& b) { 123cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski return std::tie(a.name, a.config) < std::tie(b.name, b.config); 124a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski} 125a6fe345be955368a13aea76aefb4db821aad11dfAdam Lesinski 126cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski} // namespace aapt 127