llvm-project/lldb/source/DataFormatters/DataVisualization.cpp
Raphael Isemann 77ae06b8c6 [lldb][NFC] Remove FormatMap
Summary:

FormattersContainer.h has two containers: FormatMap and FormattersContainer
itself. FormatMap is essentially just a SetVector with a listener interface that
is aspiring to be thread-safe as most of its functions lock its member mutex.

FormattersContainer is for the most part just calling the matching functions of
internal FormatMap instance and essentially acts as a wrapper class with some
minor formatter search functionality on top. The only difference is that the
FormattersContainer's public `Get` function is actually searching formatters in
the list of formatters (and for example doing regex-matching) while FormatMap's
`Get` function is just looking up a a format by the type matcher string.

This patch deletes `FormatMap` by just renaming it to `FormattersContainer` and
pulling in the two `Get` functions from the original `FormattersContainer`
class.

The only other user of `FormatMap` was the `NamedSummariesMap` in the
`FormatManager` which I migrated by just making it also a `FormattersContainer`
and replaced the only call to the `Get` function (which now has new semantics)
with `GetExact` (which is FormattersContainer's function that has the semantics
of FormatMap's `Get`). As `NamedSummariesMap` only stores non-regex-based
formatters, both `Get` and `GetExact` would have worked, so this was mostly to
clarify that this is supposed to be NFC.

I also added the missing mutex lock in the `GetCount` function which was
previously missing in the `FormatMap` implementation. Technically not "NFC" but
I anyway had to change the function...

Reviewers: labath, mib

Reviewed By: labath

Subscribers: abidh, JDevlieghere

Differential Revision: https://reviews.llvm.org/D84296
2020-07-23 18:34:59 +02:00

197 lines
6.6 KiB
C++

//===-- DataVisualization.cpp ---------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#include "lldb/DataFormatters/DataVisualization.h"
using namespace lldb;
using namespace lldb_private;
static FormatManager &GetFormatManager() {
static FormatManager g_format_manager;
return g_format_manager;
}
void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); }
uint32_t DataVisualization::GetCurrentRevision() {
return GetFormatManager().GetCurrentRevision();
}
bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) {
return GetFormatManager().ShouldPrintAsOneLiner(valobj);
}
lldb::TypeFormatImplSP
DataVisualization::GetFormat(ValueObject &valobj,
lldb::DynamicValueType use_dynamic) {
return GetFormatManager().GetFormat(valobj, use_dynamic);
}
lldb::TypeFormatImplSP
DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) {
return GetFormatManager().GetFormatForType(type_sp);
}
lldb::TypeSummaryImplSP
DataVisualization::GetSummaryFormat(ValueObject &valobj,
lldb::DynamicValueType use_dynamic) {
return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
}
lldb::TypeSummaryImplSP
DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) {
return GetFormatManager().GetSummaryForType(type_sp);
}
lldb::SyntheticChildrenSP
DataVisualization::GetSyntheticChildren(ValueObject &valobj,
lldb::DynamicValueType use_dynamic) {
return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
}
lldb::TypeFilterImplSP
DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) {
return GetFormatManager().GetFilterForType(type_sp);
}
lldb::ScriptedSyntheticChildrenSP
DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) {
return GetFormatManager().GetSyntheticForType(type_sp);
}
bool DataVisualization::AnyMatches(
ConstString type_name, TypeCategoryImpl::FormatCategoryItems items,
bool only_enabled, const char **matching_category,
TypeCategoryImpl::FormatCategoryItems *matching_type) {
return GetFormatManager().AnyMatches(type_name, items, only_enabled,
matching_category, matching_type);
}
bool DataVisualization::Categories::GetCategory(ConstString category,
lldb::TypeCategoryImplSP &entry,
bool allow_create) {
entry = GetFormatManager().GetCategory(category, allow_create);
return (entry.get() != nullptr);
}
bool DataVisualization::Categories::GetCategory(
lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) {
if (LanguageCategory *lang_category =
GetFormatManager().GetCategoryForLanguage(language))
entry = lang_category->GetCategory();
return (entry.get() != nullptr);
}
void DataVisualization::Categories::Add(ConstString category) {
GetFormatManager().GetCategory(category);
}
bool DataVisualization::Categories::Delete(ConstString category) {
GetFormatManager().DisableCategory(category);
return GetFormatManager().DeleteCategory(category);
}
void DataVisualization::Categories::Clear() {
GetFormatManager().ClearCategories();
}
void DataVisualization::Categories::Clear(ConstString category) {
GetFormatManager().GetCategory(category)->Clear(
eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
}
void DataVisualization::Categories::Enable(ConstString category,
TypeCategoryMap::Position pos) {
if (GetFormatManager().GetCategory(category)->IsEnabled())
GetFormatManager().DisableCategory(category);
GetFormatManager().EnableCategory(category, pos, {});
}
void DataVisualization::Categories::Enable(lldb::LanguageType lang_type) {
if (LanguageCategory *lang_category =
GetFormatManager().GetCategoryForLanguage(lang_type))
lang_category->Enable();
}
void DataVisualization::Categories::Disable(ConstString category) {
if (GetFormatManager().GetCategory(category)->IsEnabled())
GetFormatManager().DisableCategory(category);
}
void DataVisualization::Categories::Disable(lldb::LanguageType lang_type) {
if (LanguageCategory *lang_category =
GetFormatManager().GetCategoryForLanguage(lang_type))
lang_category->Disable();
}
void DataVisualization::Categories::Enable(
const lldb::TypeCategoryImplSP &category, TypeCategoryMap::Position pos) {
if (category.get()) {
if (category->IsEnabled())
GetFormatManager().DisableCategory(category);
GetFormatManager().EnableCategory(category, pos);
}
}
void DataVisualization::Categories::Disable(
const lldb::TypeCategoryImplSP &category) {
if (category.get() && category->IsEnabled())
GetFormatManager().DisableCategory(category);
}
void DataVisualization::Categories::EnableStar() {
GetFormatManager().EnableAllCategories();
}
void DataVisualization::Categories::DisableStar() {
GetFormatManager().DisableAllCategories();
}
void DataVisualization::Categories::ForEach(
TypeCategoryMap::ForEachCallback callback) {
GetFormatManager().ForEachCategory(callback);
}
uint32_t DataVisualization::Categories::GetCount() {
return GetFormatManager().GetCategoriesCount();
}
lldb::TypeCategoryImplSP
DataVisualization::Categories::GetCategoryAtIndex(size_t index) {
return GetFormatManager().GetCategoryAtIndex(index);
}
bool DataVisualization::NamedSummaryFormats::GetSummaryFormat(
ConstString type, lldb::TypeSummaryImplSP &entry) {
return GetFormatManager().GetNamedSummaryContainer().GetExact(type, entry);
}
void DataVisualization::NamedSummaryFormats::Add(
ConstString type, const lldb::TypeSummaryImplSP &entry) {
GetFormatManager().GetNamedSummaryContainer().Add(type, entry);
}
bool DataVisualization::NamedSummaryFormats::Delete(ConstString type) {
return GetFormatManager().GetNamedSummaryContainer().Delete(type);
}
void DataVisualization::NamedSummaryFormats::Clear() {
GetFormatManager().GetNamedSummaryContainer().Clear();
}
void DataVisualization::NamedSummaryFormats::ForEach(
std::function<bool(const TypeMatcher &, const lldb::TypeSummaryImplSP &)>
callback) {
GetFormatManager().GetNamedSummaryContainer().ForEach(callback);
}
uint32_t DataVisualization::NamedSummaryFormats::GetCount() {
return GetFormatManager().GetNamedSummaryContainer().GetCount();
}