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