diff options
Diffstat (limited to 'lldb/source')
-rw-r--r-- | lldb/source/Commands/CommandObjectType.cpp | 26 | ||||
-rw-r--r-- | lldb/source/DataFormatters/DataVisualization.cpp | 12 | ||||
-rw-r--r-- | lldb/source/DataFormatters/TypeCategory.cpp | 4 | ||||
-rw-r--r-- | lldb/source/DataFormatters/TypeCategoryMap.cpp | 25 |
4 files changed, 41 insertions, 26 deletions
diff --git a/lldb/source/Commands/CommandObjectType.cpp b/lldb/source/Commands/CommandObjectType.cpp index 640fd6dd3fa..461feb35fdf 100644 --- a/lldb/source/Commands/CommandObjectType.cpp +++ b/lldb/source/Commands/CommandObjectType.cpp @@ -2465,22 +2465,7 @@ protected: if (argc == 1 && strcmp(command.GetArgumentAtIndex(0),"*") == 0) { - // we want to make sure to enable "system" last and "default" first - DataVisualization::Categories::Enable(ConstString("default"), TypeCategoryMap::First); - uint32_t num_categories = DataVisualization::Categories::GetCount(); - for (uint32_t i = 0; i < num_categories; i++) - { - lldb::TypeCategoryImplSP category_sp = DataVisualization::Categories::GetCategoryAtIndex(i); - if (category_sp) - { - if ( ::strcmp(category_sp->GetName(), "system") == 0 || - ::strcmp(category_sp->GetName(), "default") == 0 ) - continue; - else - DataVisualization::Categories::Enable(category_sp, TypeCategoryMap::Default); - } - } - DataVisualization::Categories::Enable(ConstString("system"), TypeCategoryMap::Last); + DataVisualization::Categories::EnableStar(); } else { @@ -2630,14 +2615,7 @@ protected: if (argc == 1 && strcmp(command.GetArgumentAtIndex(0),"*") == 0) { - uint32_t num_categories = DataVisualization::Categories::GetCount(); - for (uint32_t i = 0; i < num_categories; i++) - { - lldb::TypeCategoryImplSP category_sp = DataVisualization::Categories::GetCategoryAtIndex(i); - // no need to check if the category is enabled - disabling a disabled category has no effect - if (category_sp) - DataVisualization::Categories::Disable(category_sp); - } + DataVisualization::Categories::DisableStar(); } else { diff --git a/lldb/source/DataFormatters/DataVisualization.cpp b/lldb/source/DataFormatters/DataVisualization.cpp index 8799c59103e..7ef0be50efe 100644 --- a/lldb/source/DataFormatters/DataVisualization.cpp +++ b/lldb/source/DataFormatters/DataVisualization.cpp @@ -196,6 +196,18 @@ DataVisualization::Categories::Disable (const lldb::TypeCategoryImplSP& category } void +DataVisualization::Categories::EnableStar () +{ + GetFormatManager().EnableAllCategories (); +} + +void +DataVisualization::Categories::DisableStar () +{ + GetFormatManager().DisableAllCategories(); +} + +void DataVisualization::Categories::LoopThrough (FormatManager::CategoryCallback callback, void* callback_baton) { GetFormatManager().LoopThroughCategories(callback, callback_baton); diff --git a/lldb/source/DataFormatters/TypeCategory.cpp b/lldb/source/DataFormatters/TypeCategory.cpp index d3291aa5545..3df6884fe67 100644 --- a/lldb/source/DataFormatters/TypeCategory.cpp +++ b/lldb/source/DataFormatters/TypeCategory.cpp @@ -564,8 +564,8 @@ void TypeCategoryImpl::Enable (bool value, uint32_t position) { Mutex::Locker locker(m_mutex); - m_enabled = value; - m_enabled_position = position; + if ( (m_enabled = value) ) + m_enabled_position = position; if (m_change_listener) m_change_listener->Changed(); } diff --git a/lldb/source/DataFormatters/TypeCategoryMap.cpp b/lldb/source/DataFormatters/TypeCategoryMap.cpp index 45444327882..c5f22b06628 100644 --- a/lldb/source/DataFormatters/TypeCategoryMap.cpp +++ b/lldb/source/DataFormatters/TypeCategoryMap.cpp @@ -120,6 +120,31 @@ TypeCategoryMap::Disable (ValueSP category) } void +TypeCategoryMap::EnableAllCategories () +{ + Mutex::Locker locker(m_map_mutex); + std::vector<ValueSP> sorted_categories(m_map.size(), ValueSP()); + MapType::iterator iter = m_map.begin(), end = m_map.end(); + for (; iter != end; ++iter) + sorted_categories.at(iter->second->GetLastEnabledPosition()) = iter->second; + decltype(sorted_categories)::iterator viter = sorted_categories.begin(), vend = sorted_categories.end(); + for (; viter != vend; viter++) + Enable(*viter, Last); +} + +void +TypeCategoryMap::DisableAllCategories () +{ + Mutex::Locker locker(m_map_mutex); + Position p = First; + for (; false == m_active_categories.empty(); p++) + { + m_active_categories.front()->SetEnabledPosition(p); + Disable(m_active_categories.front()); + } +} + +void TypeCategoryMap::Clear () { Mutex::Locker locker(m_map_mutex); |