1//===-- NameToDIE.h ---------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef SymbolFileDWARF_NameToDIE_h_
10#define SymbolFileDWARF_NameToDIE_h_
11
12#include <functional>
13
14#include "DIERef.h"
15#include "lldb/Core/UniqueCStringMap.h"
16#include "lldb/Core/dwarf.h"
17#include "lldb/lldb-defines.h"
18
19class DWARFUnit;
20
21class NameToDIE {
22public:
23  NameToDIE() : m_map() {}
24
25  ~NameToDIE() {}
26
27  void Dump(lldb_private::Stream *s);
28
29  void Insert(lldb_private::ConstString name, const DIERef &die_ref);
30
31  void Append(const NameToDIE &other);
32
33  void Finalize();
34
35  size_t Find(lldb_private::ConstString name,
36              DIEArray &info_array) const;
37
38  size_t Find(const lldb_private::RegularExpression &regex,
39              DIEArray &info_array) const;
40
41  size_t FindAllEntriesForUnit(const DWARFUnit &unit,
42                               DIEArray &info_array) const;
43
44  void
45  ForEach(std::function<bool(lldb_private::ConstString name,
46                             const DIERef &die_ref)> const
47              &callback) const;
48
49protected:
50  lldb_private::UniqueCStringMap<DIERef> m_map;
51};
52
53#endif // SymbolFileDWARF_NameToDIE_h_
54