1de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski/* 2de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * Copyright (C) 2014 The Android Open Source Project 3de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * 4de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * you may not use this file except in compliance with the License. 6de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * You may obtain a copy of the License at 7de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * 8de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * 10de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * Unless required by applicable law or agreed to in writing, software 11de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * See the License for the specific language governing permissions and 14de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * limitations under the License. 15de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski */ 16de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 17de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#ifndef AAPT_SYMBOL_H 18de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#define AAPT_SYMBOL_H 19de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 20de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#include <utils/String8.h> 21de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#include <utils/String16.h> 22de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 23de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#include "ConfigDescription.h" 24de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#include "SourcePos.h" 25de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 26de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski/** 27de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * A resource symbol, not attached to any configuration or context. 28de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski */ 29de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinskistruct Symbol { 30de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski inline Symbol(); 31de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski inline Symbol(const android::String16& p, const android::String16& t, const android::String16& n, uint32_t i); 32de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski inline android::String8 toString() const; 33de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski inline bool operator<(const Symbol& rhs) const; 34de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 35de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski android::String16 package; 36de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski android::String16 type; 37de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski android::String16 name; 38de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski uint32_t id; 39de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 40de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski}; 41de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 42de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski/** 43de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski * A specific defintion of a symbol, defined with a configuration and a definition site. 44de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski */ 45de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinskistruct SymbolDefinition { 46de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski inline SymbolDefinition(); 47de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski inline SymbolDefinition(const Symbol& s, const ConfigDescription& c, const SourcePos& src); 48de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski inline bool operator<(const SymbolDefinition& rhs) const; 49de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 50de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski Symbol symbol; 51de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski ConfigDescription config; 52de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski SourcePos source; 53de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski}; 54de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 55de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski// 56de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski// Implementations 57de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski// 58de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 59de7de47fef1dcaa26d553665d89e4d3792325c3fAdam LesinskiSymbol::Symbol() { 60de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski} 61de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 62de7de47fef1dcaa26d553665d89e4d3792325c3fAdam LesinskiSymbol::Symbol(const android::String16& p, const android::String16& t, const android::String16& n, uint32_t i) 63de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski : package(p) 64de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski , type(t) 65de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski , name(n) 66de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski , id(i) { 67de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski} 68de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 69de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinskiandroid::String8 Symbol::toString() const { 70de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski return android::String8::format("%s:%s/%s (0x%08x)", 71de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski android::String8(package).string(), 72de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski android::String8(type).string(), 73de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski android::String8(name).string(), 74de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski (int) id); 75de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski} 76de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 77de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinskibool Symbol::operator<(const Symbol& rhs) const { 78de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski return (package < rhs.package) || (type < rhs.type) || (name < rhs.name) || (id < rhs.id); 79de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski} 80de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 81de7de47fef1dcaa26d553665d89e4d3792325c3fAdam LesinskiSymbolDefinition::SymbolDefinition() { 82de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski} 83de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 84de7de47fef1dcaa26d553665d89e4d3792325c3fAdam LesinskiSymbolDefinition::SymbolDefinition(const Symbol& s, const ConfigDescription& c, const SourcePos& src) 85de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski : symbol(s) 86de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski , config(c) 87de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski , source(src) { 88de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski} 89de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 90de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinskibool SymbolDefinition::operator<(const SymbolDefinition& rhs) const { 91de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski return (symbol < rhs.symbol) || (config < rhs.config) || (source < rhs.source); 92de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski} 93de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 94de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski#endif // AAPT_SYMBOL_H 95de7de47fef1dcaa26d553665d89e4d3792325c3fAdam Lesinski 96