/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef AAPT_SYMBOL_H #define AAPT_SYMBOL_H #include <utils/String8.h> #include <utils/String16.h> #include "ConfigDescription.h" #include "SourcePos.h" /** * A resource symbol, not attached to any configuration or context. */ struct Symbol { inline Symbol(); inline Symbol(const android::String16& p, const android::String16& t, const android::String16& n, uint32_t i); inline android::String8 toString() const; inline bool operator<(const Symbol& rhs) const; android::String16 package; android::String16 type; android::String16 name; uint32_t id; }; /** * A specific defintion of a symbol, defined with a configuration and a definition site. */ struct SymbolDefinition { inline SymbolDefinition(); inline SymbolDefinition(const Symbol& s, const ConfigDescription& c, const SourcePos& src); inline bool operator<(const SymbolDefinition& rhs) const; Symbol symbol; ConfigDescription config; SourcePos source; }; // // Implementations // Symbol::Symbol() { } Symbol::Symbol(const android::String16& p, const android::String16& t, const android::String16& n, uint32_t i) : package(p) , type(t) , name(n) , id(i) { } android::String8 Symbol::toString() const { return android::String8::format("%s:%s/%s (0x%08x)", android::String8(package).string(), android::String8(type).string(), android::String8(name).string(), (int) id); } bool Symbol::operator<(const Symbol& rhs) const { return (package < rhs.package) || (type < rhs.type) || (name < rhs.name) || (id < rhs.id); } SymbolDefinition::SymbolDefinition() { } SymbolDefinition::SymbolDefinition(const Symbol& s, const ConfigDescription& c, const SourcePos& src) : symbol(s) , config(c) , source(src) { } bool SymbolDefinition::operator<(const SymbolDefinition& rhs) const { return (symbol < rhs.symbol) || (config < rhs.config) || (source < rhs.source); } #endif // AAPT_SYMBOL_H