1*dda28197Spatrick //===-- NSDictionary.h ------------------------------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9*dda28197Spatrick #ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_OBJC_NSDICTIONARY_H 10*dda28197Spatrick #define LLDB_SOURCE_PLUGINS_LANGUAGE_OBJC_NSDICTIONARY_H 11061da546Spatrick 12061da546Spatrick #include "lldb/Core/ValueObject.h" 13061da546Spatrick #include "lldb/DataFormatters/TypeSummary.h" 14061da546Spatrick #include "lldb/DataFormatters/TypeSynthetic.h" 15061da546Spatrick #include "lldb/Utility/ConstString.h" 16061da546Spatrick #include "lldb/Utility/Stream.h" 17061da546Spatrick 18061da546Spatrick #include <map> 19061da546Spatrick #include <memory> 20061da546Spatrick 21061da546Spatrick namespace lldb_private { 22061da546Spatrick namespace formatters { 23061da546Spatrick template <bool name_entries> 24061da546Spatrick bool NSDictionarySummaryProvider(ValueObject &valobj, Stream &stream, 25061da546Spatrick const TypeSummaryOptions &options); 26061da546Spatrick 27061da546Spatrick extern template bool 28061da546Spatrick NSDictionarySummaryProvider<true>(ValueObject &, Stream &, 29061da546Spatrick const TypeSummaryOptions &); 30061da546Spatrick 31061da546Spatrick extern template bool 32061da546Spatrick NSDictionarySummaryProvider<false>(ValueObject &, Stream &, 33061da546Spatrick const TypeSummaryOptions &); 34061da546Spatrick 35061da546Spatrick SyntheticChildrenFrontEnd * 36061da546Spatrick NSDictionarySyntheticFrontEndCreator(CXXSyntheticChildren *, 37061da546Spatrick lldb::ValueObjectSP); 38061da546Spatrick 39061da546Spatrick class NSDictionary_Additionals { 40061da546Spatrick public: 41061da546Spatrick class AdditionalFormatterMatching { 42061da546Spatrick public: 43061da546Spatrick class Matcher { 44061da546Spatrick public: 45061da546Spatrick virtual ~Matcher() = default; 46061da546Spatrick virtual bool Match(ConstString class_name) = 0; 47061da546Spatrick 48061da546Spatrick typedef std::unique_ptr<Matcher> UP; 49061da546Spatrick }; 50061da546Spatrick class Prefix : public Matcher { 51061da546Spatrick public: 52061da546Spatrick Prefix(ConstString p); 53061da546Spatrick ~Prefix() override = default; 54061da546Spatrick bool Match(ConstString class_name) override; 55061da546Spatrick 56061da546Spatrick private: 57061da546Spatrick ConstString m_prefix; 58061da546Spatrick }; 59061da546Spatrick class Full : public Matcher { 60061da546Spatrick public: 61061da546Spatrick Full(ConstString n); 62061da546Spatrick ~Full() override = default; 63061da546Spatrick bool Match(ConstString class_name) override; 64061da546Spatrick 65061da546Spatrick private: 66061da546Spatrick ConstString m_name; 67061da546Spatrick }; 68061da546Spatrick typedef Matcher::UP MatcherUP; 69061da546Spatrick GetFullMatch(ConstString n)70061da546Spatrick MatcherUP GetFullMatch(ConstString n) { return std::make_unique<Full>(n); } 71061da546Spatrick GetPrefixMatch(ConstString p)72061da546Spatrick MatcherUP GetPrefixMatch(ConstString p) { 73061da546Spatrick return std::make_unique<Prefix>(p); 74061da546Spatrick } 75061da546Spatrick }; 76061da546Spatrick 77061da546Spatrick template <typename FormatterType> 78061da546Spatrick using AdditionalFormatter = 79061da546Spatrick std::pair<AdditionalFormatterMatching::MatcherUP, FormatterType>; 80061da546Spatrick 81061da546Spatrick template <typename FormatterType> 82061da546Spatrick using AdditionalFormatters = std::vector<AdditionalFormatter<FormatterType>>; 83061da546Spatrick 84061da546Spatrick static AdditionalFormatters<CXXFunctionSummaryFormat::Callback> & 85061da546Spatrick GetAdditionalSummaries(); 86061da546Spatrick 87061da546Spatrick static AdditionalFormatters<CXXSyntheticChildren::CreateFrontEndCallback> & 88061da546Spatrick GetAdditionalSynthetics(); 89061da546Spatrick }; 90061da546Spatrick } // namespace formatters 91061da546Spatrick } // namespace lldb_private 92061da546Spatrick 93*dda28197Spatrick #endif // LLDB_SOURCE_PLUGINS_LANGUAGE_OBJC_NSDICTIONARY_H 94