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