diff options
Diffstat (limited to 'include/lldb/DataFormatters/TypeCategory.h')
-rw-r--r-- | include/lldb/DataFormatters/TypeCategory.h | 914 |
1 files changed, 393 insertions, 521 deletions
diff --git a/include/lldb/DataFormatters/TypeCategory.h b/include/lldb/DataFormatters/TypeCategory.h index c6d7d7b0f878..0a5b09baa624 100644 --- a/include/lldb/DataFormatters/TypeCategory.h +++ b/include/lldb/DataFormatters/TypeCategory.h @@ -20,561 +20,433 @@ // Other libraries and framework includes // Project includes -#include "lldb/lldb-public.h" #include "lldb/lldb-enumerations.h" +#include "lldb/lldb-public.h" #include "lldb/DataFormatters/FormatClasses.h" #include "lldb/DataFormatters/FormattersContainer.h" namespace lldb_private { - - template <typename FormatterImpl> - class FormatterContainerPair - { - public: - typedef FormattersContainer<ConstString, FormatterImpl> ExactMatchContainer; - typedef FormattersContainer<lldb::RegularExpressionSP, FormatterImpl> RegexMatchContainer; - - typedef typename ExactMatchContainer::MapType ExactMatchMap; - typedef typename RegexMatchContainer::MapType RegexMatchMap; - - typedef typename ExactMatchContainer::MapValueType MapValueType; - - typedef typename ExactMatchContainer::SharedPointer ExactMatchContainerSP; - typedef typename RegexMatchContainer::SharedPointer RegexMatchContainerSP; - - typedef typename ExactMatchContainer::ForEachCallback ExactMatchForEachCallback; - typedef typename RegexMatchContainer::ForEachCallback RegexMatchForEachCallback; - - FormatterContainerPair (const char* exact_name, - const char* regex_name, - IFormatChangeListener* clist) : - m_exact_sp(new ExactMatchContainer(std::string(exact_name),clist)), - m_regex_sp(new RegexMatchContainer(std::string(regex_name),clist)) - { - } - - ~FormatterContainerPair () = default; - - ExactMatchContainerSP - GetExactMatch () const - { - return m_exact_sp; - } - - RegexMatchContainerSP - GetRegexMatch () const - { - return m_regex_sp; - } - - uint32_t - GetCount () - { - return GetExactMatch()->GetCount() + GetRegexMatch()->GetCount(); - } - - private: - ExactMatchContainerSP m_exact_sp; - RegexMatchContainerSP m_regex_sp; - }; - - class TypeCategoryImpl - { - private: - typedef FormatterContainerPair<TypeFormatImpl> FormatContainer; - typedef FormatterContainerPair<TypeSummaryImpl> SummaryContainer; - typedef FormatterContainerPair<TypeFilterImpl> FilterContainer; - typedef FormatterContainerPair<TypeValidatorImpl> ValidatorContainer; - + +template <typename FormatterImpl> class FormatterContainerPair { +public: + typedef FormattersContainer<ConstString, FormatterImpl> ExactMatchContainer; + typedef FormattersContainer<lldb::RegularExpressionSP, FormatterImpl> + RegexMatchContainer; + + typedef typename ExactMatchContainer::MapType ExactMatchMap; + typedef typename RegexMatchContainer::MapType RegexMatchMap; + + typedef typename ExactMatchContainer::MapValueType MapValueType; + + typedef typename ExactMatchContainer::SharedPointer ExactMatchContainerSP; + typedef typename RegexMatchContainer::SharedPointer RegexMatchContainerSP; + + typedef + typename ExactMatchContainer::ForEachCallback ExactMatchForEachCallback; + typedef + typename RegexMatchContainer::ForEachCallback RegexMatchForEachCallback; + + FormatterContainerPair(const char *exact_name, const char *regex_name, + IFormatChangeListener *clist) + : m_exact_sp(new ExactMatchContainer(std::string(exact_name), clist)), + m_regex_sp(new RegexMatchContainer(std::string(regex_name), clist)) {} + + ~FormatterContainerPair() = default; + + ExactMatchContainerSP GetExactMatch() const { return m_exact_sp; } + + RegexMatchContainerSP GetRegexMatch() const { return m_regex_sp; } + + uint32_t GetCount() { + return GetExactMatch()->GetCount() + GetRegexMatch()->GetCount(); + } + +private: + ExactMatchContainerSP m_exact_sp; + RegexMatchContainerSP m_regex_sp; +}; + +class TypeCategoryImpl { +private: + typedef FormatterContainerPair<TypeFormatImpl> FormatContainer; + typedef FormatterContainerPair<TypeSummaryImpl> SummaryContainer; + typedef FormatterContainerPair<TypeFilterImpl> FilterContainer; + typedef FormatterContainerPair<TypeValidatorImpl> ValidatorContainer; + #ifndef LLDB_DISABLE_PYTHON - typedef FormatterContainerPair<SyntheticChildren> SynthContainer; + typedef FormatterContainerPair<SyntheticChildren> SynthContainer; #endif // LLDB_DISABLE_PYTHON - public: - typedef uint16_t FormatCategoryItems; - static const uint16_t ALL_ITEM_TYPES = UINT16_MAX; +public: + typedef uint16_t FormatCategoryItems; + static const uint16_t ALL_ITEM_TYPES = UINT16_MAX; + + typedef FormatContainer::ExactMatchContainerSP FormatContainerSP; + typedef FormatContainer::RegexMatchContainerSP RegexFormatContainerSP; - typedef FormatContainer::ExactMatchContainerSP FormatContainerSP; - typedef FormatContainer::RegexMatchContainerSP RegexFormatContainerSP; - - typedef SummaryContainer::ExactMatchContainerSP SummaryContainerSP; - typedef SummaryContainer::RegexMatchContainerSP RegexSummaryContainerSP; + typedef SummaryContainer::ExactMatchContainerSP SummaryContainerSP; + typedef SummaryContainer::RegexMatchContainerSP RegexSummaryContainerSP; - typedef FilterContainer::ExactMatchContainerSP FilterContainerSP; - typedef FilterContainer::RegexMatchContainerSP RegexFilterContainerSP; + typedef FilterContainer::ExactMatchContainerSP FilterContainerSP; + typedef FilterContainer::RegexMatchContainerSP RegexFilterContainerSP; #ifndef LLDB_DISABLE_PYTHON - typedef SynthContainer::ExactMatchContainerSP SynthContainerSP; - typedef SynthContainer::RegexMatchContainerSP RegexSynthContainerSP; + typedef SynthContainer::ExactMatchContainerSP SynthContainerSP; + typedef SynthContainer::RegexMatchContainerSP RegexSynthContainerSP; #endif // LLDB_DISABLE_PYTHON - - typedef ValidatorContainer::ExactMatchContainerSP ValidatorContainerSP; - typedef ValidatorContainer::RegexMatchContainerSP RegexValidatorContainerSP; - - template <typename T> - class ForEachCallbacks - { - public: - ForEachCallbacks () = default; - ~ForEachCallbacks () = default; - - template<typename U = TypeFormatImpl> - typename std::enable_if<std::is_same<U,T>::value, ForEachCallbacks&>::type - SetExact (FormatContainer::ExactMatchForEachCallback callback) - { - m_format_exact = callback; - return *this; - } - template<typename U = TypeFormatImpl> - typename std::enable_if<std::is_same<U,T>::value, ForEachCallbacks&>::type - SetWithRegex (FormatContainer::RegexMatchForEachCallback callback) - { - m_format_regex = callback; - return *this; - } - - template<typename U = TypeSummaryImpl> - typename std::enable_if<std::is_same<U,T>::value, ForEachCallbacks&>::type - SetExact (SummaryContainer::ExactMatchForEachCallback callback) - { - m_summary_exact = callback; - return *this; - } - template<typename U = TypeSummaryImpl> - typename std::enable_if<std::is_same<U,T>::value, ForEachCallbacks&>::type - SetWithRegex (SummaryContainer::RegexMatchForEachCallback callback) - { - m_summary_regex = callback; - return *this; - } - - template<typename U = TypeFilterImpl> - typename std::enable_if<std::is_same<U,T>::value, ForEachCallbacks&>::type - SetExact (FilterContainer::ExactMatchForEachCallback callback) - { - m_filter_exact = callback; - return *this; - } - template<typename U = TypeFilterImpl> - typename std::enable_if<std::is_same<U,T>::value, ForEachCallbacks&>::type - SetWithRegex (FilterContainer::RegexMatchForEachCallback callback) - { - m_filter_regex = callback; - return *this; - } + + typedef ValidatorContainer::ExactMatchContainerSP ValidatorContainerSP; + typedef ValidatorContainer::RegexMatchContainerSP RegexValidatorContainerSP; + + template <typename T> class ForEachCallbacks { + public: + ForEachCallbacks() = default; + ~ForEachCallbacks() = default; + + template <typename U = TypeFormatImpl> + typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type + SetExact(FormatContainer::ExactMatchForEachCallback callback) { + m_format_exact = callback; + return *this; + } + template <typename U = TypeFormatImpl> + typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type + SetWithRegex(FormatContainer::RegexMatchForEachCallback callback) { + m_format_regex = callback; + return *this; + } + + template <typename U = TypeSummaryImpl> + typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type + SetExact(SummaryContainer::ExactMatchForEachCallback callback) { + m_summary_exact = callback; + return *this; + } + template <typename U = TypeSummaryImpl> + typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type + SetWithRegex(SummaryContainer::RegexMatchForEachCallback callback) { + m_summary_regex = callback; + return *this; + } + + template <typename U = TypeFilterImpl> + typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type + SetExact(FilterContainer::ExactMatchForEachCallback callback) { + m_filter_exact = callback; + return *this; + } + template <typename U = TypeFilterImpl> + typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type + SetWithRegex(FilterContainer::RegexMatchForEachCallback callback) { + m_filter_regex = callback; + return *this; + } #ifndef LLDB_DISABLE_PYTHON - template<typename U = SyntheticChildren> - typename std::enable_if<std::is_same<U,T>::value, ForEachCallbacks&>::type - SetExact (SynthContainer::ExactMatchForEachCallback callback) - { - m_synth_exact = callback; - return *this; - } - template<typename U = SyntheticChildren> - typename std::enable_if<std::is_same<U,T>::value, ForEachCallbacks&>::type - SetWithRegex (SynthContainer::RegexMatchForEachCallback callback) - { - m_synth_regex = callback; - return *this; - } + template <typename U = SyntheticChildren> + typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type + SetExact(SynthContainer::ExactMatchForEachCallback callback) { + m_synth_exact = callback; + return *this; + } + template <typename U = SyntheticChildren> + typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type + SetWithRegex(SynthContainer::RegexMatchForEachCallback callback) { + m_synth_regex = callback; + return *this; + } #endif // LLDB_DISABLE_PYTHON - template<typename U = TypeValidatorImpl> - typename std::enable_if<std::is_same<U,T>::value, ForEachCallbacks&>::type - SetExact (ValidatorContainer::ExactMatchForEachCallback callback) - { - m_validator_exact = callback; - return *this; - } - template<typename U = TypeValidatorImpl> - typename std::enable_if<std::is_same<U,T>::value, ForEachCallbacks&>::type - SetWithRegex (ValidatorContainer::RegexMatchForEachCallback callback) - { - m_validator_regex = callback; - return *this; - } - - FormatContainer::ExactMatchForEachCallback - GetFormatExactCallback () const - { - return m_format_exact; - } - FormatContainer::RegexMatchForEachCallback - GetFormatRegexCallback () const - { - return m_format_regex; - } - - SummaryContainer::ExactMatchForEachCallback - GetSummaryExactCallback () const - { - return m_summary_exact; - } - SummaryContainer::RegexMatchForEachCallback - GetSummaryRegexCallback () const - { - return m_summary_regex; - } - - FilterContainer::ExactMatchForEachCallback - GetFilterExactCallback () const - { - return m_filter_exact; - } - FilterContainer::RegexMatchForEachCallback - GetFilterRegexCallback () const - { - return m_filter_regex; - } + template <typename U = TypeValidatorImpl> + typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type + SetExact(ValidatorContainer::ExactMatchForEachCallback callback) { + m_validator_exact = callback; + return *this; + } + template <typename U = TypeValidatorImpl> + typename std::enable_if<std::is_same<U, T>::value, ForEachCallbacks &>::type + SetWithRegex(ValidatorContainer::RegexMatchForEachCallback callback) { + m_validator_regex = callback; + return *this; + } + + FormatContainer::ExactMatchForEachCallback GetFormatExactCallback() const { + return m_format_exact; + } + FormatContainer::RegexMatchForEachCallback GetFormatRegexCallback() const { + return m_format_regex; + } + + SummaryContainer::ExactMatchForEachCallback + GetSummaryExactCallback() const { + return m_summary_exact; + } + SummaryContainer::RegexMatchForEachCallback + GetSummaryRegexCallback() const { + return m_summary_regex; + } + + FilterContainer::ExactMatchForEachCallback GetFilterExactCallback() const { + return m_filter_exact; + } + FilterContainer::RegexMatchForEachCallback GetFilterRegexCallback() const { + return m_filter_regex; + } #ifndef LLDB_DISABLE_PYTHON - SynthContainer::ExactMatchForEachCallback - GetSynthExactCallback () const - { - return m_synth_exact; - } - SynthContainer::RegexMatchForEachCallback - GetSynthRegexCallback () const - { - return m_synth_regex; - } + SynthContainer::ExactMatchForEachCallback GetSynthExactCallback() const { + return m_synth_exact; + } + SynthContainer::RegexMatchForEachCallback GetSynthRegexCallback() const { + return m_synth_regex; + } #endif // LLDB_DISABLE_PYTHON - ValidatorContainer::ExactMatchForEachCallback - GetValidatorExactCallback () const - { - return m_validator_exact; - } - ValidatorContainer::RegexMatchForEachCallback - GetValidatorRegexCallback () const - { - return m_validator_regex; - } - - private: - FormatContainer::ExactMatchForEachCallback m_format_exact; - FormatContainer::RegexMatchForEachCallback m_format_regex; - - SummaryContainer::ExactMatchForEachCallback m_summary_exact; - SummaryContainer::RegexMatchForEachCallback m_summary_regex; - - FilterContainer::ExactMatchForEachCallback m_filter_exact; - FilterContainer::RegexMatchForEachCallback m_filter_regex; + ValidatorContainer::ExactMatchForEachCallback + GetValidatorExactCallback() const { + return m_validator_exact; + } + ValidatorContainer::RegexMatchForEachCallback + GetValidatorRegexCallback() const { + return m_validator_regex; + } + + private: + FormatContainer::ExactMatchForEachCallback m_format_exact; + FormatContainer::RegexMatchForEachCallback m_format_regex; + + SummaryContainer::ExactMatchForEachCallback m_summary_exact; + SummaryContainer::RegexMatchForEachCallback m_summary_regex; + + FilterContainer::ExactMatchForEachCallback m_filter_exact; + FilterContainer::RegexMatchForEachCallback m_filter_regex; #ifndef LLDB_DISABLE_PYTHON - SynthContainer::ExactMatchForEachCallback m_synth_exact; - SynthContainer::RegexMatchForEachCallback m_synth_regex; + SynthContainer::ExactMatchForEachCallback m_synth_exact; + SynthContainer::RegexMatchForEachCallback m_synth_regex; #endif // LLDB_DISABLE_PYTHON - ValidatorContainer::ExactMatchForEachCallback m_validator_exact; - ValidatorContainer::RegexMatchForEachCallback m_validator_regex; - }; - - TypeCategoryImpl (IFormatChangeListener* clist, - ConstString name, - std::initializer_list<lldb::LanguageType> langs = {}); - - template <typename T> - void - ForEach (const ForEachCallbacks<T> &foreach) - { - GetTypeFormatsContainer()->ForEach(foreach.GetFormatExactCallback()); - GetRegexTypeFormatsContainer()->ForEach(foreach.GetFormatRegexCallback()); - - GetTypeSummariesContainer()->ForEach(foreach.GetSummaryExactCallback()); - GetRegexTypeSummariesContainer()->ForEach(foreach.GetSummaryRegexCallback()); - - GetTypeFiltersContainer()->ForEach(foreach.GetFilterExactCallback()); - GetRegexTypeFiltersContainer()->ForEach(foreach.GetFilterRegexCallback()); - + ValidatorContainer::ExactMatchForEachCallback m_validator_exact; + ValidatorContainer::RegexMatchForEachCallback m_validator_regex; + }; + + TypeCategoryImpl(IFormatChangeListener *clist, ConstString name, + std::initializer_list<lldb::LanguageType> langs = {}); + + template <typename T> void ForEach(const ForEachCallbacks<T> &foreach) { + GetTypeFormatsContainer()->ForEach(foreach.GetFormatExactCallback()); + GetRegexTypeFormatsContainer()->ForEach(foreach.GetFormatRegexCallback()); + + GetTypeSummariesContainer()->ForEach(foreach.GetSummaryExactCallback()); + GetRegexTypeSummariesContainer()->ForEach( + foreach.GetSummaryRegexCallback()); + + GetTypeFiltersContainer()->ForEach(foreach.GetFilterExactCallback()); + GetRegexTypeFiltersContainer()->ForEach(foreach.GetFilterRegexCallback()); + #ifndef LLDB_DISABLE_PYTHON - GetTypeSyntheticsContainer()->ForEach(foreach.GetSynthExactCallback()); - GetRegexTypeSyntheticsContainer()->ForEach(foreach.GetSynthRegexCallback()); + GetTypeSyntheticsContainer()->ForEach(foreach.GetSynthExactCallback()); + GetRegexTypeSyntheticsContainer()->ForEach(foreach.GetSynthRegexCallback()); #endif // LLDB_DISABLE_PYTHON - - GetTypeValidatorsContainer()->ForEach(foreach.GetValidatorExactCallback()); - GetRegexTypeValidatorsContainer()->ForEach(foreach.GetValidatorRegexCallback()); - } - - FormatContainerSP - GetTypeFormatsContainer () - { - return m_format_cont.GetExactMatch(); - } - - RegexFormatContainerSP - GetRegexTypeFormatsContainer () - { - return m_format_cont.GetRegexMatch(); - } - - FormatContainer& - GetFormatContainer () - { - return m_format_cont; - } - - SummaryContainerSP - GetTypeSummariesContainer () - { - return m_summary_cont.GetExactMatch(); - } - - RegexSummaryContainerSP - GetRegexTypeSummariesContainer () - { - return m_summary_cont.GetRegexMatch(); - } - - SummaryContainer& - GetSummaryContainer () - { - return m_summary_cont; - } - - FilterContainerSP - GetTypeFiltersContainer () - { - return m_filter_cont.GetExactMatch(); - } - - RegexFilterContainerSP - GetRegexTypeFiltersContainer () - { - return m_filter_cont.GetRegexMatch(); - } - - FilterContainer& - GetFilterContainer () - { - return m_filter_cont; - } - - FormatContainer::MapValueType - GetFormatForType (lldb::TypeNameSpecifierImplSP type_sp); - - SummaryContainer::MapValueType - GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp); - - FilterContainer::MapValueType - GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp); - + + GetTypeValidatorsContainer()->ForEach(foreach.GetValidatorExactCallback()); + GetRegexTypeValidatorsContainer()->ForEach( + foreach.GetValidatorRegexCallback()); + } + + FormatContainerSP GetTypeFormatsContainer() { + return m_format_cont.GetExactMatch(); + } + + RegexFormatContainerSP GetRegexTypeFormatsContainer() { + return m_format_cont.GetRegexMatch(); + } + + FormatContainer &GetFormatContainer() { return m_format_cont; } + + SummaryContainerSP GetTypeSummariesContainer() { + return m_summary_cont.GetExactMatch(); + } + + RegexSummaryContainerSP GetRegexTypeSummariesContainer() { + return m_summary_cont.GetRegexMatch(); + } + + SummaryContainer &GetSummaryContainer() { return m_summary_cont; } + + FilterContainerSP GetTypeFiltersContainer() { + return m_filter_cont.GetExactMatch(); + } + + RegexFilterContainerSP GetRegexTypeFiltersContainer() { + return m_filter_cont.GetRegexMatch(); + } + + FilterContainer &GetFilterContainer() { return m_filter_cont; } + + FormatContainer::MapValueType + GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp); + + SummaryContainer::MapValueType + GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp); + + FilterContainer::MapValueType + GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp); + #ifndef LLDB_DISABLE_PYTHON - SynthContainer::MapValueType - GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp); + SynthContainer::MapValueType + GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp); #endif - - ValidatorContainer::MapValueType - GetValidatorForType (lldb::TypeNameSpecifierImplSP type_sp); - - lldb::TypeNameSpecifierImplSP - GetTypeNameSpecifierForFormatAtIndex (size_t index); - - lldb::TypeNameSpecifierImplSP - GetTypeNameSpecifierForSummaryAtIndex (size_t index); - - FormatContainer::MapValueType - GetFormatAtIndex (size_t index); - - SummaryContainer::MapValueType - GetSummaryAtIndex (size_t index); - - FilterContainer::MapValueType - GetFilterAtIndex (size_t index); - - lldb::TypeNameSpecifierImplSP - GetTypeNameSpecifierForFilterAtIndex (size_t index); - + + ValidatorContainer::MapValueType + GetValidatorForType(lldb::TypeNameSpecifierImplSP type_sp); + + lldb::TypeNameSpecifierImplSP + GetTypeNameSpecifierForFormatAtIndex(size_t index); + + lldb::TypeNameSpecifierImplSP + GetTypeNameSpecifierForSummaryAtIndex(size_t index); + + FormatContainer::MapValueType GetFormatAtIndex(size_t index); + + SummaryContainer::MapValueType GetSummaryAtIndex(size_t index); + + FilterContainer::MapValueType GetFilterAtIndex(size_t index); + + lldb::TypeNameSpecifierImplSP + GetTypeNameSpecifierForFilterAtIndex(size_t index); + #ifndef LLDB_DISABLE_PYTHON - SynthContainerSP - GetTypeSyntheticsContainer () - { - return m_synth_cont.GetExactMatch(); - } - - RegexSynthContainerSP - GetRegexTypeSyntheticsContainer () - { - return m_synth_cont.GetRegexMatch(); - } - - SynthContainer& - GetSyntheticsContainer () - { - return m_synth_cont; - } - - SynthContainer::MapValueType - GetSyntheticAtIndex (size_t index); - - lldb::TypeNameSpecifierImplSP - GetTypeNameSpecifierForSyntheticAtIndex (size_t index); + SynthContainerSP GetTypeSyntheticsContainer() { + return m_synth_cont.GetExactMatch(); + } + + RegexSynthContainerSP GetRegexTypeSyntheticsContainer() { + return m_synth_cont.GetRegexMatch(); + } + + SynthContainer &GetSyntheticsContainer() { return m_synth_cont; } + + SynthContainer::MapValueType GetSyntheticAtIndex(size_t index); + + lldb::TypeNameSpecifierImplSP + GetTypeNameSpecifierForSyntheticAtIndex(size_t index); #endif // LLDB_DISABLE_PYTHON - - ValidatorContainerSP - GetTypeValidatorsContainer () - { - return m_validator_cont.GetExactMatch(); - } - - RegexValidatorContainerSP - GetRegexTypeValidatorsContainer () - { - return m_validator_cont.GetRegexMatch(); - } - - ValidatorContainer::MapValueType - GetValidatorAtIndex (size_t index); - - lldb::TypeNameSpecifierImplSP - GetTypeNameSpecifierForValidatorAtIndex (size_t index); - - bool - IsEnabled () const - { - return m_enabled; - } - - uint32_t - GetEnabledPosition() - { - if (m_enabled == false) - return UINT32_MAX; - else - return m_enabled_position; - } - - bool - Get(ValueObject& valobj, - const FormattersMatchVector& candidates, - lldb::TypeFormatImplSP& entry, - uint32_t* reason = nullptr); - - bool - Get(ValueObject& valobj, - const FormattersMatchVector& candidates, - lldb::TypeSummaryImplSP& entry, - uint32_t* reason = nullptr); - - bool - Get(ValueObject& valobj, - const FormattersMatchVector& candidates, - lldb::SyntheticChildrenSP& entry, - uint32_t* reason = nullptr); - - bool - Get(ValueObject& valobj, - const FormattersMatchVector& candidates, - lldb::TypeValidatorImplSP& entry, - uint32_t* reason = nullptr); - - void - Clear (FormatCategoryItems items = ALL_ITEM_TYPES); - - bool - Delete (ConstString name, - FormatCategoryItems items = ALL_ITEM_TYPES); - - uint32_t - GetCount (FormatCategoryItems items = ALL_ITEM_TYPES); - - const char* - GetName () - { - return m_name.GetCString(); - } - - size_t - GetNumLanguages (); - - lldb::LanguageType - GetLanguageAtIndex (size_t idx); - - void - AddLanguage (lldb::LanguageType lang); - - bool - HasLanguage (lldb::LanguageType lang); - - std::string - GetDescription (); - - bool - AnyMatches(ConstString type_name, - FormatCategoryItems items = ALL_ITEM_TYPES, - bool only_enabled = true, - const char** matching_category = nullptr, - FormatCategoryItems* matching_type = nullptr); - - typedef std::shared_ptr<TypeCategoryImpl> SharedPointer; - - private: - FormatContainer m_format_cont; - SummaryContainer m_summary_cont; - FilterContainer m_filter_cont; + + ValidatorContainerSP GetTypeValidatorsContainer() { + return m_validator_cont.GetExactMatch(); + } + + RegexValidatorContainerSP GetRegexTypeValidatorsContainer() { + return m_validator_cont.GetRegexMatch(); + } + + ValidatorContainer::MapValueType GetValidatorAtIndex(size_t index); + + lldb::TypeNameSpecifierImplSP + GetTypeNameSpecifierForValidatorAtIndex(size_t index); + + bool IsEnabled() const { return m_enabled; } + + uint32_t GetEnabledPosition() { + if (m_enabled == false) + return UINT32_MAX; + else + return m_enabled_position; + } + + bool Get(ValueObject &valobj, const FormattersMatchVector &candidates, + lldb::TypeFormatImplSP &entry, uint32_t *reason = nullptr); + + bool Get(ValueObject &valobj, const FormattersMatchVector &candidates, + lldb::TypeSummaryImplSP &entry, uint32_t *reason = nullptr); + + bool Get(ValueObject &valobj, const FormattersMatchVector &candidates, + lldb::SyntheticChildrenSP &entry, uint32_t *reason = nullptr); + + bool Get(ValueObject &valobj, const FormattersMatchVector &candidates, + lldb::TypeValidatorImplSP &entry, uint32_t *reason = nullptr); + + void Clear(FormatCategoryItems items = ALL_ITEM_TYPES); + + bool Delete(ConstString name, FormatCategoryItems items = ALL_ITEM_TYPES); + + uint32_t GetCount(FormatCategoryItems items = ALL_ITEM_TYPES); + + const char *GetName() { return m_name.GetCString(); } + + size_t GetNumLanguages(); + + lldb::LanguageType GetLanguageAtIndex(size_t idx); + + void AddLanguage(lldb::LanguageType lang); + + bool HasLanguage(lldb::LanguageType lang); + + std::string GetDescription(); + + bool AnyMatches(ConstString type_name, + FormatCategoryItems items = ALL_ITEM_TYPES, + bool only_enabled = true, + const char **matching_category = nullptr, + FormatCategoryItems *matching_type = nullptr); + + typedef std::shared_ptr<TypeCategoryImpl> SharedPointer; + +private: + FormatContainer m_format_cont; + SummaryContainer m_summary_cont; + FilterContainer m_filter_cont; #ifndef LLDB_DISABLE_PYTHON - SynthContainer m_synth_cont; + SynthContainer m_synth_cont; #endif // LLDB_DISABLE_PYTHON - ValidatorContainer m_validator_cont; - - bool m_enabled; - - IFormatChangeListener* m_change_listener; - - std::recursive_mutex m_mutex; - - ConstString m_name; - - std::vector<lldb::LanguageType> m_languages; - - uint32_t m_enabled_position; - - void - Enable (bool value, uint32_t position); - - void - Disable () - { - Enable(false, UINT32_MAX); - } - - bool - IsApplicable (ValueObject& valobj); - - uint32_t - GetLastEnabledPosition () - { - return m_enabled_position; - } - - void - SetEnabledPosition (uint32_t p) - { - m_enabled_position = p; - } - - friend class FormatManager; - friend class LanguageCategory; - friend class TypeCategoryMap; - - friend class FormattersContainer<ConstString, TypeFormatImpl>; - friend class FormattersContainer<lldb::RegularExpressionSP, TypeFormatImpl>; - - friend class FormattersContainer<ConstString, TypeSummaryImpl>; - friend class FormattersContainer<lldb::RegularExpressionSP, TypeSummaryImpl>; - - friend class FormattersContainer<ConstString, TypeFilterImpl>; - friend class FormattersContainer<lldb::RegularExpressionSP, TypeFilterImpl>; - + ValidatorContainer m_validator_cont; + + bool m_enabled; + + IFormatChangeListener *m_change_listener; + + std::recursive_mutex m_mutex; + + ConstString m_name; + + std::vector<lldb::LanguageType> m_languages; + + uint32_t m_enabled_position; + + void Enable(bool value, uint32_t position); + + void Disable() { Enable(false, UINT32_MAX); } + + bool IsApplicable(ValueObject &valobj); + + uint32_t GetLastEnabledPosition() { return m_enabled_position; } + + void SetEnabledPosition(uint32_t p) { m_enabled_position = p; } + + friend class FormatManager; + friend class LanguageCategory; + friend class TypeCategoryMap; + + friend class FormattersContainer<ConstString, TypeFormatImpl>; + friend class FormattersContainer<lldb::RegularExpressionSP, TypeFormatImpl>; + + friend class FormattersContainer<ConstString, TypeSummaryImpl>; + friend class FormattersContainer<lldb::RegularExpressionSP, TypeSummaryImpl>; + + friend class FormattersContainer<ConstString, TypeFilterImpl>; + friend class FormattersContainer<lldb::RegularExpressionSP, TypeFilterImpl>; + #ifndef LLDB_DISABLE_PYTHON - friend class FormattersContainer<ConstString, ScriptedSyntheticChildren>; - friend class FormattersContainer<lldb::RegularExpressionSP, ScriptedSyntheticChildren>; + friend class FormattersContainer<ConstString, ScriptedSyntheticChildren>; + friend class FormattersContainer<lldb::RegularExpressionSP, + ScriptedSyntheticChildren>; #endif // LLDB_DISABLE_PYTHON - - friend class FormattersContainer<ConstString, TypeValidatorImpl>; - friend class FormattersContainer<lldb::RegularExpressionSP, TypeValidatorImpl>; - }; - + + friend class FormattersContainer<ConstString, TypeValidatorImpl>; + friend class FormattersContainer<lldb::RegularExpressionSP, + TypeValidatorImpl>; +}; + } // namespace lldb_private #endif // lldb_TypeCategory_h_ |