xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Language/ObjC/NSDictionary.h (revision dda2819751e49c83612958492e38917049128b41)
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