96 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_NAMETODIE_H10#define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_NAMETODIE_H11 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#include "lldb/lldb-private-enumerations.h"19 20namespace lldb_private::plugin {21namespace dwarf {22class DWARFUnit;23 24class NameToDIE {25public:26 NameToDIE() : m_map() {}27 28 ~NameToDIE() = default;29 30 void Dump(Stream *s);31 32 void Insert(ConstString name, const DIERef &die_ref);33 34 void Append(const NameToDIE &other);35 36 void Finalize();37 38 bool Find(ConstString name,39 llvm::function_ref<IterationAction(DIERef ref)> callback) const;40 41 bool Find(const RegularExpression ®ex,42 llvm::function_ref<IterationAction(DIERef ref)> callback) const;43 44 /// \a unit must be the skeleton unit if possible, not GetNonSkeletonUnit().45 void FindAllEntriesForUnit(46 DWARFUnit &unit,47 llvm::function_ref<IterationAction(DIERef ref)> callback) const;48 49 void50 ForEach(std::function<bool(ConstString name, const DIERef &die_ref)> const51 &callback) const;52 53 /// Decode a serialized version of this object from data.54 ///55 /// \param data56 /// The decoder object that references the serialized data.57 ///58 /// \param offset_ptr59 /// A pointer that contains the offset from which the data will be decoded60 /// from that gets updated as data gets decoded.61 ///62 /// \param strtab63 /// All strings in cache files are put into string tables for efficiency64 /// and cache file size reduction. Strings are stored as uint32_t string65 /// table offsets in the cache data.66 bool Decode(const DataExtractor &data, lldb::offset_t *offset_ptr,67 const StringTableReader &strtab);68 69 /// Encode this object into a data encoder object.70 ///71 /// This allows this object to be serialized to disk.72 ///73 /// \param encoder74 /// A data encoder object that serialized bytes will be encoded into.75 ///76 /// \param strtab77 /// All strings in cache files are put into string tables for efficiency78 /// and cache file size reduction. Strings are stored as uint32_t string79 /// table offsets in the cache data.80 void Encode(DataEncoder &encoder, ConstStringTable &strtab) const;81 82 /// Used for unit testing the encoding and decoding.83 bool operator==(const NameToDIE &rhs) const;84 85 bool IsEmpty() const { return m_map.IsEmpty(); }86 87 void Clear() { m_map.Clear(); }88 89protected:90 UniqueCStringMap<DIERef> m_map;91};92} // namespace dwarf93} // namespace lldb_private::plugin94 95#endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_NAMETODIE_H96