]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / source / Plugins / SymbolFile / DWARF / DWARFDeclContext.h
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
30 class DWARFDeclContext
31 {
32 public:
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         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
103 protected:
104     typedef std::vector<Entry> collection;
105     collection m_entries;
106     mutable std::string m_qualified_name;
107 };
108
109 #endif  // SymbolFileDWARF_DWARFDeclContext_h_