1 //===-- TypeCategoryMap.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 lldb_TypeCategoryMap_h_ 11 #define lldb_TypeCategoryMap_h_ 12 13 // C Includes 14 // C++ Includes 15 16 // Other libraries and framework includes 17 // Project includes 18 #include "lldb/lldb-public.h" 19 #include "lldb/lldb-enumerations.h" 20 21 #include "lldb/DataFormatters/FormatNavigator.h" 22 #include "lldb/DataFormatters/TypeCategory.h" 23 24 namespace lldb_private { 25 class TypeCategoryMap 26 { 27 private: 28 typedef ConstString KeyType; 29 typedef TypeCategoryImpl ValueType; 30 typedef ValueType::SharedPointer ValueSP; 31 typedef std::list<lldb::TypeCategoryImplSP> ActiveCategoriesList; 32 typedef ActiveCategoriesList::iterator ActiveCategoriesIterator; 33 34 public: 35 typedef std::map<KeyType, ValueSP> MapType; 36 typedef MapType::iterator MapIterator; 37 typedef bool(*CallbackType)(void*, const ValueSP&); 38 typedef uint32_t Position; 39 40 static const Position First = 0; 41 static const Position Default = 1; 42 static const Position Last = UINT32_MAX; 43 44 TypeCategoryMap (IFormatChangeListener* lst); 45 46 void 47 Add (KeyType name, 48 const ValueSP& entry); 49 50 bool 51 Delete (KeyType name); 52 53 bool 54 Enable (KeyType category_name, 55 Position pos = Default); 56 57 bool 58 Disable (KeyType category_name); 59 60 bool 61 Enable (ValueSP category, 62 Position pos = Default); 63 64 bool 65 Disable (ValueSP category); 66 67 void 68 Clear (); 69 70 bool 71 Get (KeyType name, 72 ValueSP& entry); 73 74 bool 75 Get (uint32_t pos, 76 ValueSP& entry); 77 78 void 79 LoopThrough (CallbackType callback, void* param); 80 81 lldb::TypeCategoryImplSP 82 GetAtIndex (uint32_t); 83 84 bool 85 AnyMatches (ConstString type_name, 86 TypeCategoryImpl::FormatCategoryItems items = TypeCategoryImpl::ALL_ITEM_TYPES, 87 bool only_enabled = true, 88 const char** matching_category = NULL, 89 TypeCategoryImpl::FormatCategoryItems* matching_type = NULL); 90 91 uint32_t GetCount()92 GetCount () 93 { 94 return m_map.size(); 95 } 96 97 lldb::TypeSummaryImplSP 98 GetSummaryFormat (ValueObject& valobj, 99 lldb::DynamicValueType use_dynamic); 100 101 #ifndef LLDB_DISABLE_PYTHON 102 lldb::SyntheticChildrenSP 103 GetSyntheticChildren (ValueObject& valobj, 104 lldb::DynamicValueType use_dynamic); 105 #endif 106 107 private: 108 109 class delete_matching_categories 110 { 111 lldb::TypeCategoryImplSP ptr; 112 public: delete_matching_categories(lldb::TypeCategoryImplSP p)113 delete_matching_categories(lldb::TypeCategoryImplSP p) : ptr(p) 114 {} 115 operator()116 bool operator()(const lldb::TypeCategoryImplSP& other) 117 { 118 return ptr.get() == other.get(); 119 } 120 }; 121 122 Mutex m_map_mutex; 123 IFormatChangeListener* listener; 124 125 MapType m_map; 126 ActiveCategoriesList m_active_categories; 127 map()128 MapType& map () 129 { 130 return m_map; 131 } 132 active_list()133 ActiveCategoriesList& active_list () 134 { 135 return m_active_categories; 136 } 137 mutex()138 Mutex& mutex () 139 { 140 return m_map_mutex; 141 } 142 143 friend class FormatNavigator<KeyType, ValueType>; 144 friend class FormatManager; 145 }; 146 } // namespace lldb_private 147 148 #endif // lldb_TypeCategoryMap_h_ 149