1f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//===-- TypeCategory.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_TypeCategory_h_ 11f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#define lldb_TypeCategory_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 23f509c5ec066599a3399fced39ea36996184939e8Enrico Granatanamespace lldb_private { 24f509c5ec066599a3399fced39ea36996184939e8Enrico Granata class TypeCategoryImpl 25f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 26f509c5ec066599a3399fced39ea36996184939e8Enrico Granata private: 27f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 28f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef FormatNavigator<ConstString, TypeSummaryImpl> SummaryNavigator; 29f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef FormatNavigator<lldb::RegularExpressionSP, TypeSummaryImpl> RegexSummaryNavigator; 30f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 31f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef FormatNavigator<ConstString, TypeFilterImpl> FilterNavigator; 32f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef FormatNavigator<lldb::RegularExpressionSP, TypeFilterImpl> RegexFilterNavigator; 33f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 34f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 35f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef FormatNavigator<ConstString, ScriptedSyntheticChildren> SynthNavigator; 36f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef FormatNavigator<lldb::RegularExpressionSP, ScriptedSyntheticChildren> RegexSynthNavigator; 37f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif // #ifndef LLDB_DISABLE_PYTHON 38f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 39f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef SummaryNavigator::MapType SummaryMap; 40f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef RegexSummaryNavigator::MapType RegexSummaryMap; 41f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef FilterNavigator::MapType FilterMap; 42f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef RegexFilterNavigator::MapType RegexFilterMap; 43f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 44f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef SynthNavigator::MapType SynthMap; 45f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef RegexSynthNavigator::MapType RegexSynthMap; 46f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif // #ifndef LLDB_DISABLE_PYTHON 47f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 48f509c5ec066599a3399fced39ea36996184939e8Enrico Granata public: 49f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 50f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef uint16_t FormatCategoryItems; 51f509c5ec066599a3399fced39ea36996184939e8Enrico Granata static const uint16_t ALL_ITEM_TYPES = UINT16_MAX; 52f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 53f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef SummaryNavigator::SharedPointer SummaryNavigatorSP; 54f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef RegexSummaryNavigator::SharedPointer RegexSummaryNavigatorSP; 55f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef FilterNavigator::SharedPointer FilterNavigatorSP; 56f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef RegexFilterNavigator::SharedPointer RegexFilterNavigatorSP; 57f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 58f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef SynthNavigator::SharedPointer SynthNavigatorSP; 59f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef RegexSynthNavigator::SharedPointer RegexSynthNavigatorSP; 60f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif // #ifndef LLDB_DISABLE_PYTHON 61f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 62f509c5ec066599a3399fced39ea36996184939e8Enrico Granata TypeCategoryImpl (IFormatChangeListener* clist, 63f509c5ec066599a3399fced39ea36996184939e8Enrico Granata ConstString name); 64f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 65f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SummaryNavigatorSP 66f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetSummaryNavigator () 67f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 68f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return SummaryNavigatorSP(m_summary_nav); 69f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 70f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 71f509c5ec066599a3399fced39ea36996184939e8Enrico Granata RegexSummaryNavigatorSP 72f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetRegexSummaryNavigator () 73f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 74f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return RegexSummaryNavigatorSP(m_regex_summary_nav); 75f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 76f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 77f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FilterNavigatorSP 78f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetFilterNavigator () 79f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 80f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return FilterNavigatorSP(m_filter_nav); 81f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 82f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 83f509c5ec066599a3399fced39ea36996184939e8Enrico Granata RegexFilterNavigatorSP 84f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetRegexFilterNavigator () 85f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 86f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return RegexFilterNavigatorSP(m_regex_filter_nav); 87f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 88f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 89f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SummaryNavigator::MapValueType 90f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp); 91f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 92f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FilterNavigator::MapValueType 93f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp); 94f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 95f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 96f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SynthNavigator::MapValueType 97f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp); 98f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 99f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 100f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::TypeNameSpecifierImplSP 101f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetTypeNameSpecifierForSummaryAtIndex (size_t index); 102f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 103f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SummaryNavigator::MapValueType 104f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetSummaryAtIndex (size_t index); 105f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 106f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FilterNavigator::MapValueType 107f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetFilterAtIndex (size_t index); 108f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 109f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::TypeNameSpecifierImplSP 110f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetTypeNameSpecifierForFilterAtIndex (size_t index); 111f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 112f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 113f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SynthNavigatorSP 114f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetSyntheticNavigator () 115f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 116f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return SynthNavigatorSP(m_synth_nav); 117f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 118f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 119f509c5ec066599a3399fced39ea36996184939e8Enrico Granata RegexSynthNavigatorSP 120f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetRegexSyntheticNavigator () 121f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 122f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return RegexSynthNavigatorSP(m_regex_synth_nav); 123f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 124f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 125f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SynthNavigator::MapValueType 126f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetSyntheticAtIndex (size_t index); 127f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 128f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::TypeNameSpecifierImplSP 129f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetTypeNameSpecifierForSyntheticAtIndex (size_t index); 130f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 131f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif // #ifndef LLDB_DISABLE_PYTHON 132f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 133f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool 134f509c5ec066599a3399fced39ea36996184939e8Enrico Granata IsEnabled () const 135f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 136f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_enabled; 137f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 138f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 139f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint32_t 140f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetEnabledPosition() 141f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 142f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (m_enabled == false) 143f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return UINT32_MAX; 144f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 145f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_enabled_position; 146f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 147f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 148f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool 149f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Get (ValueObject& valobj, 150f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::TypeSummaryImplSP& entry, 151f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::DynamicValueType use_dynamic, 152f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint32_t* reason = NULL); 153f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 154f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool 155f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Get (ValueObject& valobj, 156f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::SyntheticChildrenSP& entry, 157f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::DynamicValueType use_dynamic, 158f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint32_t* reason = NULL); 159f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 160f509c5ec066599a3399fced39ea36996184939e8Enrico Granata void 161f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Clear (FormatCategoryItems items = ALL_ITEM_TYPES); 162f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 163f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool 164f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Delete (ConstString name, 165f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FormatCategoryItems items = ALL_ITEM_TYPES); 166f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 167f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint32_t 168f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetCount (FormatCategoryItems items = ALL_ITEM_TYPES); 169f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 170f509c5ec066599a3399fced39ea36996184939e8Enrico Granata const char* 171f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetName () 172f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 173f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_name.GetCString(); 174f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 175f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 176f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool 177f509c5ec066599a3399fced39ea36996184939e8Enrico Granata AnyMatches (ConstString type_name, 178f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FormatCategoryItems items = ALL_ITEM_TYPES, 179f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool only_enabled = true, 180f509c5ec066599a3399fced39ea36996184939e8Enrico Granata const char** matching_category = NULL, 181f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FormatCategoryItems* matching_type = NULL); 182f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 183102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton typedef std::shared_ptr<TypeCategoryImpl> SharedPointer; 184f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 185f509c5ec066599a3399fced39ea36996184939e8Enrico Granata private: 186f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SummaryNavigator::SharedPointer m_summary_nav; 187f509c5ec066599a3399fced39ea36996184939e8Enrico Granata RegexSummaryNavigator::SharedPointer m_regex_summary_nav; 188f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FilterNavigator::SharedPointer m_filter_nav; 189f509c5ec066599a3399fced39ea36996184939e8Enrico Granata RegexFilterNavigator::SharedPointer m_regex_filter_nav; 190f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 191f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SynthNavigator::SharedPointer m_synth_nav; 192f509c5ec066599a3399fced39ea36996184939e8Enrico Granata RegexSynthNavigator::SharedPointer m_regex_synth_nav; 193f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif // #ifndef LLDB_DISABLE_PYTHON 194f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 195f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool m_enabled; 196f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 197f509c5ec066599a3399fced39ea36996184939e8Enrico Granata IFormatChangeListener* m_change_listener; 198f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 199f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Mutex m_mutex; 200f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 201f509c5ec066599a3399fced39ea36996184939e8Enrico Granata ConstString m_name; 202f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 203f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint32_t m_enabled_position; 204f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 205f509c5ec066599a3399fced39ea36996184939e8Enrico Granata void 206f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Enable (bool value, uint32_t position); 207f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 208f509c5ec066599a3399fced39ea36996184939e8Enrico Granata void 209f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Disable () 210f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 211f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Enable(false, UINT32_MAX); 212f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 213f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 214f509c5ec066599a3399fced39ea36996184939e8Enrico Granata friend class TypeCategoryMap; 215f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 216f509c5ec066599a3399fced39ea36996184939e8Enrico Granata friend class FormatNavigator<ConstString, TypeSummaryImpl>; 217f509c5ec066599a3399fced39ea36996184939e8Enrico Granata friend class FormatNavigator<lldb::RegularExpressionSP, TypeSummaryImpl>; 218f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 219f509c5ec066599a3399fced39ea36996184939e8Enrico Granata friend class FormatNavigator<ConstString, TypeFilterImpl>; 220f509c5ec066599a3399fced39ea36996184939e8Enrico Granata friend class FormatNavigator<lldb::RegularExpressionSP, TypeFilterImpl>; 221f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 222f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 223f509c5ec066599a3399fced39ea36996184939e8Enrico Granata friend class FormatNavigator<ConstString, ScriptedSyntheticChildren>; 224f509c5ec066599a3399fced39ea36996184939e8Enrico Granata friend class FormatNavigator<lldb::RegularExpressionSP, ScriptedSyntheticChildren>; 225f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif // #ifndef LLDB_DISABLE_PYTHON 226f509c5ec066599a3399fced39ea36996184939e8Enrico Granata }; 227f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 228f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} // namespace lldb_private 229f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 230f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif // lldb_TypeCategory_h_ 231