1//===-- NSDictionary.h ------------------------------------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef LLDB_SOURCE_PLUGINS_LANGUAGE_OBJC_NSDICTIONARY_H 10#define LLDB_SOURCE_PLUGINS_LANGUAGE_OBJC_NSDICTIONARY_H 11 12#include "lldb/Core/ValueObject.h" 13#include "lldb/DataFormatters/TypeSummary.h" 14#include "lldb/DataFormatters/TypeSynthetic.h" 15#include "lldb/Utility/ConstString.h" 16#include "lldb/Utility/Stream.h" 17 18#include <map> 19#include <memory> 20 21namespace lldb_private { 22namespace formatters { 23template <bool name_entries> 24bool NSDictionarySummaryProvider(ValueObject &valobj, Stream &stream, 25 const TypeSummaryOptions &options); 26 27extern template bool 28NSDictionarySummaryProvider<true>(ValueObject &, Stream &, 29 const TypeSummaryOptions &); 30 31extern template bool 32NSDictionarySummaryProvider<false>(ValueObject &, Stream &, 33 const TypeSummaryOptions &); 34 35SyntheticChildrenFrontEnd * 36NSDictionarySyntheticFrontEndCreator(CXXSyntheticChildren *, 37 lldb::ValueObjectSP); 38 39class NSDictionary_Additionals { 40public: 41 class AdditionalFormatterMatching { 42 public: 43 class Matcher { 44 public: 45 virtual ~Matcher() = default; 46 virtual bool Match(ConstString class_name) = 0; 47 48 typedef std::unique_ptr<Matcher> UP; 49 }; 50 class Prefix : public Matcher { 51 public: 52 Prefix(ConstString p); 53 ~Prefix() override = default; 54 bool Match(ConstString class_name) override; 55 56 private: 57 ConstString m_prefix; 58 }; 59 class Full : public Matcher { 60 public: 61 Full(ConstString n); 62 ~Full() override = default; 63 bool Match(ConstString class_name) override; 64 65 private: 66 ConstString m_name; 67 }; 68 typedef Matcher::UP MatcherUP; 69 70 MatcherUP GetFullMatch(ConstString n) { return std::make_unique<Full>(n); } 71 72 MatcherUP GetPrefixMatch(ConstString p) { 73 return std::make_unique<Prefix>(p); 74 } 75 }; 76 77 template <typename FormatterType> 78 using AdditionalFormatter = 79 std::pair<AdditionalFormatterMatching::MatcherUP, FormatterType>; 80 81 template <typename FormatterType> 82 using AdditionalFormatters = std::vector<AdditionalFormatter<FormatterType>>; 83 84 static AdditionalFormatters<CXXFunctionSummaryFormat::Callback> & 85 GetAdditionalSummaries(); 86 87 static AdditionalFormatters<CXXSyntheticChildren::CreateFrontEndCallback> & 88 GetAdditionalSynthetics(); 89}; 90} // namespace formatters 91} // namespace lldb_private 92 93#endif // LLDB_SOURCE_PLUGINS_LANGUAGE_OBJC_NSDICTIONARY_H 94