1 //===-- NameToDIE.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_NameToDIE_h_
11 #define SymbolFileDWARF_NameToDIE_h_
12 
13 #include <functional>
14 
15 #include "DIERef.h"
16 #include "lldb/Core/UniqueCStringMap.h"
17 #include "lldb/Core/dwarf.h"
18 #include "lldb/lldb-defines.h"
19 
20 class SymbolFileDWARF;
21 
22 class NameToDIE {
23 public:
24   NameToDIE() : m_map() {}
25 
26   ~NameToDIE() {}
27 
28   void Dump(lldb_private::Stream *s);
29 
30   void Insert(const lldb_private::ConstString &name, const DIERef &die_ref);
31 
32   void Append(const NameToDIE &other);
33 
34   void Finalize();
35 
36   size_t Find(const lldb_private::ConstString &name,
37               DIEArray &info_array) const;
38 
39   size_t Find(const lldb_private::RegularExpression &regex,
40               DIEArray &info_array) const;
41 
42   size_t FindAllEntriesForCompileUnit(dw_offset_t cu_offset,
43                                       DIEArray &info_array) const;
44 
45   void
46   ForEach(std::function<bool(llvm::StringRef name, const DIERef &die_ref)> const
47               &callback) const;
48 
49 protected:
50   lldb_private::UniqueCStringMap<DIERef> m_map;
51 };
52 
53 #endif // SymbolFileDWARF_NameToDIE_h_
54