diff options
Diffstat (limited to 'contrib/llvm-project/lldb/source/Plugins/Language/ObjC/NSDictionary.h')
-rw-r--r-- | contrib/llvm-project/lldb/source/Plugins/Language/ObjC/NSDictionary.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/contrib/llvm-project/lldb/source/Plugins/Language/ObjC/NSDictionary.h b/contrib/llvm-project/lldb/source/Plugins/Language/ObjC/NSDictionary.h new file mode 100644 index 000000000000..ecb3fccdf877 --- /dev/null +++ b/contrib/llvm-project/lldb/source/Plugins/Language/ObjC/NSDictionary.h @@ -0,0 +1,94 @@ +//===-- NSDictionary.h ---------------------------------------------------*- C++ +//-*-===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef liblldb_NSDictionary_h_ +#define liblldb_NSDictionary_h_ + +#include "lldb/Core/ValueObject.h" +#include "lldb/DataFormatters/TypeSummary.h" +#include "lldb/DataFormatters/TypeSynthetic.h" +#include "lldb/Utility/ConstString.h" +#include "lldb/Utility/Stream.h" + +#include <map> +#include <memory> + +namespace lldb_private { +namespace formatters { +template <bool name_entries> +bool NSDictionarySummaryProvider(ValueObject &valobj, Stream &stream, + const TypeSummaryOptions &options); + +extern template bool +NSDictionarySummaryProvider<true>(ValueObject &, Stream &, + const TypeSummaryOptions &); + +extern template bool +NSDictionarySummaryProvider<false>(ValueObject &, Stream &, + const TypeSummaryOptions &); + +SyntheticChildrenFrontEnd * +NSDictionarySyntheticFrontEndCreator(CXXSyntheticChildren *, + lldb::ValueObjectSP); + +class NSDictionary_Additionals { +public: + class AdditionalFormatterMatching { + public: + class Matcher { + public: + virtual ~Matcher() = default; + virtual bool Match(ConstString class_name) = 0; + + typedef std::unique_ptr<Matcher> UP; + }; + class Prefix : public Matcher { + public: + Prefix(ConstString p); + ~Prefix() override = default; + bool Match(ConstString class_name) override; + + private: + ConstString m_prefix; + }; + class Full : public Matcher { + public: + Full(ConstString n); + ~Full() override = default; + bool Match(ConstString class_name) override; + + private: + ConstString m_name; + }; + typedef Matcher::UP MatcherUP; + + MatcherUP GetFullMatch(ConstString n) { return llvm::make_unique<Full>(n); } + + MatcherUP GetPrefixMatch(ConstString p) { + return llvm::make_unique<Prefix>(p); + } + }; + + template <typename FormatterType> + using AdditionalFormatter = + std::pair<AdditionalFormatterMatching::MatcherUP, FormatterType>; + + template <typename FormatterType> + using AdditionalFormatters = std::vector<AdditionalFormatter<FormatterType>>; + + static AdditionalFormatters<CXXFunctionSummaryFormat::Callback> & + GetAdditionalSummaries(); + + static AdditionalFormatters<CXXSyntheticChildren::CreateFrontEndCallback> & + GetAdditionalSynthetics(); +}; +} // namespace formatters +} // namespace lldb_private + +#endif // liblldb_NSDictionary_h_ |