//===-- TypeCategoryMap.h ---------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef lldb_TypeCategoryMap_h_ #define lldb_TypeCategoryMap_h_ // C Includes // C++ Includes #include #include #include #include // Other libraries and framework includes // Project includes #include "lldb/lldb-public.h" #include "lldb/lldb-enumerations.h" #include "lldb/DataFormatters/FormattersContainer.h" #include "lldb/DataFormatters/TypeCategory.h" namespace lldb_private { class TypeCategoryMap { private: typedef ConstString KeyType; typedef TypeCategoryImpl ValueType; typedef ValueType::SharedPointer ValueSP; typedef std::list ActiveCategoriesList; typedef ActiveCategoriesList::iterator ActiveCategoriesIterator; public: typedef std::map MapType; typedef MapType::iterator MapIterator; typedef std::function ForEachCallback; typedef uint32_t Position; static const Position First = 0; static const Position Default = 1; static const Position Last = UINT32_MAX; TypeCategoryMap (IFormatChangeListener* lst); void Add (KeyType name, const ValueSP& entry); bool Delete (KeyType name); bool Enable (KeyType category_name, Position pos = Default); bool Disable (KeyType category_name); bool Enable (ValueSP category, Position pos = Default); bool Disable (ValueSP category); void EnableAllCategories (); void DisableAllCategories (); void Clear (); bool Get (KeyType name, ValueSP& entry); bool Get (uint32_t pos, ValueSP& entry); void ForEach (ForEachCallback callback); lldb::TypeCategoryImplSP GetAtIndex (uint32_t); bool AnyMatches(ConstString type_name, TypeCategoryImpl::FormatCategoryItems items = TypeCategoryImpl::ALL_ITEM_TYPES, bool only_enabled = true, const char** matching_category = nullptr, TypeCategoryImpl::FormatCategoryItems* matching_type = nullptr); uint32_t GetCount () { return m_map.size(); } lldb::TypeFormatImplSP GetFormat (FormattersMatchData& match_data); lldb::TypeSummaryImplSP GetSummaryFormat (FormattersMatchData& match_data); #ifndef LLDB_DISABLE_PYTHON lldb::SyntheticChildrenSP GetSyntheticChildren (FormattersMatchData& match_data); #endif lldb::TypeValidatorImplSP GetValidator(FormattersMatchData& match_data); private: class delete_matching_categories { lldb::TypeCategoryImplSP ptr; public: delete_matching_categories(lldb::TypeCategoryImplSP p) : ptr(p) {} bool operator()(const lldb::TypeCategoryImplSP& other) { return ptr.get() == other.get(); } }; std::recursive_mutex m_map_mutex; IFormatChangeListener* listener; MapType m_map; ActiveCategoriesList m_active_categories; MapType& map () { return m_map; } ActiveCategoriesList& active_list () { return m_active_categories; } std::recursive_mutex & mutex() { return m_map_mutex; } friend class FormattersContainer; friend class FormatManager; }; } // namespace lldb_private #endif // lldb_TypeCategoryMap_h_