brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 9f9b631 Raw
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 &regex,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