1 //===-- TypeMap.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 LLDB_SYMBOL_TYPEMAP_H 10 #define LLDB_SYMBOL_TYPEMAP_H 11 12 #include "lldb/Symbol/Type.h" 13 #include "lldb/Utility/Iterable.h" 14 #include "lldb/lldb-private.h" 15 #include <functional> 16 #include <map> 17 18 namespace lldb_private { 19 20 class TypeMap { 21 public: 22 // Constructors and Destructors 23 TypeMap(); 24 25 virtual ~TypeMap(); 26 27 void Clear(); 28 29 void Dump(Stream *s, bool show_context, 30 lldb::DescriptionLevel level = lldb::eDescriptionLevelFull); 31 32 TypeMap FindTypes(ConstString name); 33 34 void Insert(const lldb::TypeSP &type); 35 36 bool Empty() const; 37 38 bool InsertUnique(const lldb::TypeSP &type); 39 40 uint32_t GetSize() const; 41 42 lldb::TypeSP GetTypeAtIndex(uint32_t idx); 43 44 typedef std::multimap<lldb::user_id_t, lldb::TypeSP> collection; 45 typedef AdaptedIterable<collection, lldb::TypeSP, map_adapter> TypeIterable; 46 Types()47 TypeIterable Types() { return TypeIterable(m_types); } 48 49 void ForEach( 50 std::function<bool(const lldb::TypeSP &type_sp)> const &callback) const; 51 52 void ForEach(std::function<bool(lldb::TypeSP &type_sp)> const &callback); 53 54 bool Remove(const lldb::TypeSP &type_sp); 55 56 void RemoveMismatchedTypes(const char *qualified_typename, bool exact_match); 57 58 void RemoveMismatchedTypes(const std::string &type_scope, 59 const std::string &type_basename, 60 lldb::TypeClass type_class, bool exact_match); 61 62 void RemoveMismatchedTypes(lldb::TypeClass type_class); 63 64 private: 65 typedef collection::iterator iterator; 66 typedef collection::const_iterator const_iterator; 67 68 collection m_types; 69 70 TypeMap(const TypeMap &) = delete; 71 const TypeMap &operator=(const TypeMap &) = delete; 72 }; 73 74 } // namespace lldb_private 75 76 #endif // LLDB_SYMBOL_TYPEMAP_H 77