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