DWARFDeclContext.h revision 263363
1//===-- DWARFDeclContext.h --------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef SymbolFileDWARF_DWARFDeclContext_h_
11#define SymbolFileDWARF_DWARFDeclContext_h_
12
13// C Includes
14// C++ Includes
15#include <string>
16#include <vector>
17// Other libraries and framework includes
18#include "lldb/Core/ConstString.h"
19// Project includes
20#include "DWARFDefines.h"
21
22//----------------------------------------------------------------------
23// DWARFDeclContext
24//
25// A class that represents a declaration context all the way down to a
26// DIE. This is useful when trying to find a DIE in one DWARF to a DIE
27// in another DWARF file.
28//----------------------------------------------------------------------
29
30class DWARFDeclContext
31{
32public:
33    struct Entry
34    {
35        Entry () :
36            tag(0),
37            name(NULL)
38        {
39        }
40        Entry (dw_tag_t t, const char *n) :
41            tag(t),
42            name(n)
43        {
44        }
45
46        bool
47        NameMatches (const Entry& rhs) const
48        {
49            if (name == rhs.name)
50                return true;
51            else if (name && rhs.name)
52                return strcmp(name, rhs.name) == 0;
53            return false;
54        }
55
56        // Test operator
57        explicit operator bool() const
58        {
59            return tag != 0;
60        }
61
62        dw_tag_t tag;
63        const char *name;
64    };
65
66    DWARFDeclContext () :
67        m_entries()
68    {
69    }
70
71    void
72    AppendDeclContext (dw_tag_t tag, const char *name)
73    {
74        m_entries.push_back(Entry(tag, name));
75    }
76
77    bool
78    operator ==(const DWARFDeclContext& rhs) const;
79
80    uint32_t
81    GetSize() const
82    {
83        return m_entries.size();
84    }
85
86    Entry &
87    operator[] (uint32_t idx)
88    {
89        // "idx" must be valid
90        return m_entries[idx];
91    }
92
93    const Entry &
94    operator[] (uint32_t idx) const
95    {
96        // "idx" must be valid
97        return m_entries[idx];
98    }
99
100    const char *
101    GetQualifiedName () const;
102
103protected:
104    typedef std::vector<Entry> collection;
105    collection m_entries;
106    mutable std::string m_qualified_name;
107};
108
109#endif  // SymbolFileDWARF_DWARFDeclContext_h_
110