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