1359575Sdim//===-- SWIG Interface for SBTypeCategory---------------------------*- C++ -*-===//
2359575Sdim//
3359575Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4359575Sdim// See https://llvm.org/LICENSE.txt for license information.
5359575Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6359575Sdim//
7359575Sdim//===----------------------------------------------------------------------===//
8359575Sdim
9359575Sdimnamespace lldb {
10359575Sdim
11359575Sdim    %feature("docstring",
12359575Sdim    "Represents a category that can contain formatters for types.") SBTypeCategory;
13359575Sdim
14359575Sdim    class SBTypeCategory
15359575Sdim    {
16359575Sdim    public:
17359575Sdim
18359575Sdim        SBTypeCategory();
19359575Sdim
20359575Sdim        SBTypeCategory (const lldb::SBTypeCategory &rhs);
21359575Sdim
22359575Sdim        ~SBTypeCategory ();
23359575Sdim
24359575Sdim        bool
25359575Sdim        IsValid() const;
26359575Sdim
27359575Sdim        explicit operator bool() const;
28359575Sdim
29359575Sdim        bool
30359575Sdim        GetEnabled ();
31359575Sdim
32359575Sdim        void
33359575Sdim        SetEnabled (bool);
34359575Sdim
35359575Sdim        const char*
36359575Sdim        GetName();
37359575Sdim
38359575Sdim        lldb::LanguageType
39359575Sdim        GetLanguageAtIndex (uint32_t idx);
40359575Sdim
41359575Sdim        uint32_t
42359575Sdim        GetNumLanguages ();
43359575Sdim
44359575Sdim        void
45359575Sdim        AddLanguage (lldb::LanguageType language);
46359575Sdim
47359575Sdim        bool
48359575Sdim        GetDescription (lldb::SBStream &description,
49359575Sdim                        lldb::DescriptionLevel description_level);
50359575Sdim
51359575Sdim        uint32_t
52359575Sdim        GetNumFormats ();
53359575Sdim
54359575Sdim        uint32_t
55359575Sdim        GetNumSummaries ();
56359575Sdim
57359575Sdim        uint32_t
58359575Sdim        GetNumFilters ();
59359575Sdim
60359575Sdim        uint32_t
61359575Sdim        GetNumSynthetics ();
62359575Sdim
63359575Sdim        lldb::SBTypeNameSpecifier
64359575Sdim        GetTypeNameSpecifierForFilterAtIndex (uint32_t);
65359575Sdim
66359575Sdim        lldb::SBTypeNameSpecifier
67359575Sdim        GetTypeNameSpecifierForFormatAtIndex (uint32_t);
68359575Sdim
69359575Sdim        lldb::SBTypeNameSpecifier
70359575Sdim        GetTypeNameSpecifierForSummaryAtIndex (uint32_t);
71359575Sdim
72359575Sdim        lldb::SBTypeNameSpecifier
73359575Sdim        GetTypeNameSpecifierForSyntheticAtIndex (uint32_t);
74359575Sdim
75359575Sdim        lldb::SBTypeFilter
76359575Sdim        GetFilterForType (lldb::SBTypeNameSpecifier);
77359575Sdim
78359575Sdim        lldb::SBTypeFormat
79359575Sdim        GetFormatForType (lldb::SBTypeNameSpecifier);
80359575Sdim
81359575Sdim        lldb::SBTypeSummary
82359575Sdim        GetSummaryForType (lldb::SBTypeNameSpecifier);
83359575Sdim
84359575Sdim        lldb::SBTypeSynthetic
85359575Sdim        GetSyntheticForType (lldb::SBTypeNameSpecifier);
86359575Sdim
87359575Sdim        lldb::SBTypeFilter
88359575Sdim        GetFilterAtIndex (uint32_t);
89359575Sdim
90359575Sdim        lldb::SBTypeFormat
91359575Sdim        GetFormatAtIndex (uint32_t);
92359575Sdim
93359575Sdim        lldb::SBTypeSummary
94359575Sdim        GetSummaryAtIndex (uint32_t);
95359575Sdim
96359575Sdim        lldb::SBTypeSynthetic
97359575Sdim        GetSyntheticAtIndex (uint32_t);
98359575Sdim
99359575Sdim        bool
100359575Sdim        AddTypeFormat (lldb::SBTypeNameSpecifier,
101359575Sdim                       lldb::SBTypeFormat);
102359575Sdim
103359575Sdim        bool
104359575Sdim        DeleteTypeFormat (lldb::SBTypeNameSpecifier);
105359575Sdim
106359575Sdim        bool
107359575Sdim        AddTypeSummary (lldb::SBTypeNameSpecifier,
108359575Sdim                        lldb::SBTypeSummary);
109359575Sdim
110359575Sdim        bool
111359575Sdim        DeleteTypeSummary (lldb::SBTypeNameSpecifier);
112359575Sdim
113359575Sdim        bool
114359575Sdim        AddTypeFilter (lldb::SBTypeNameSpecifier,
115359575Sdim                       lldb::SBTypeFilter);
116359575Sdim
117359575Sdim        bool
118359575Sdim        DeleteTypeFilter (lldb::SBTypeNameSpecifier);
119359575Sdim
120359575Sdim        bool
121359575Sdim        AddTypeSynthetic (lldb::SBTypeNameSpecifier,
122359575Sdim                          lldb::SBTypeSynthetic);
123359575Sdim
124359575Sdim        bool
125359575Sdim        DeleteTypeSynthetic (lldb::SBTypeNameSpecifier);
126359575Sdim
127359575Sdim        STRING_EXTENSION_LEVEL(SBTypeCategory, lldb::eDescriptionLevelBrief)
128359575Sdim
129359575Sdim#ifdef SWIGPYTHON
130359575Sdim        %pythoncode %{
131359575Sdim
132359575Sdim            class formatters_access_class(object):
133359575Sdim                '''A helper object that will lazily hand out formatters for a specific category.'''
134359575Sdim                def __init__(self, sbcategory, get_count_function, get_at_index_function, get_by_name_function):
135359575Sdim                    self.sbcategory = sbcategory
136359575Sdim                    self.get_count_function = get_count_function
137359575Sdim                    self.get_at_index_function = get_at_index_function
138359575Sdim                    self.get_by_name_function = get_by_name_function
139359575Sdim                    self.regex_type = type(re.compile('.'))
140359575Sdim
141359575Sdim
142359575Sdim                def __len__(self):
143359575Sdim                    if self.sbcategory and self.get_count_function:
144359575Sdim                        return int(self.get_count_function(self.sbcategory))
145359575Sdim                    return 0
146359575Sdim
147359575Sdim                def __getitem__(self, key):
148359575Sdim                    num_items = len(self)
149359575Sdim                    if type(key) is int:
150359575Sdim                        if key < num_items:
151359575Sdim                            return self.get_at_index_function(self.sbcategory,key)
152359575Sdim                    elif type(key) is str:
153359575Sdim                        return self.get_by_name_function(self.sbcategory,SBTypeNameSpecifier(key))
154359575Sdim                    elif isinstance(key,self.regex_type):
155359575Sdim                        return self.get_by_name_function(self.sbcategory,SBTypeNameSpecifier(key.pattern,True))
156359575Sdim                    else:
157359575Sdim                        print("error: unsupported item type: %s" % type(key))
158359575Sdim                    return None
159359575Sdim
160359575Sdim            def get_formats_access_object(self):
161359575Sdim                '''An accessor function that returns an accessor object which allows lazy format access from a lldb.SBTypeCategory object.'''
162359575Sdim                return self.formatters_access_class (self,self.__class__.GetNumFormats,self.__class__.GetFormatAtIndex,self.__class__.GetFormatForType)
163359575Sdim
164359575Sdim            def get_formats_array(self):
165359575Sdim                '''An accessor function that returns a list() that contains all formats in a lldb.SBCategory object.'''
166359575Sdim                formats = []
167359575Sdim                for idx in range(self.GetNumFormats()):
168359575Sdim                    formats.append(self.GetFormatAtIndex(idx))
169359575Sdim                return formats
170359575Sdim
171359575Sdim            def get_summaries_access_object(self):
172359575Sdim                '''An accessor function that returns an accessor object which allows lazy summary access from a lldb.SBTypeCategory object.'''
173359575Sdim                return self.formatters_access_class (self,self.__class__.GetNumSummaries,self.__class__.GetSummaryAtIndex,self.__class__.GetSummaryForType)
174359575Sdim
175359575Sdim            def get_summaries_array(self):
176359575Sdim                '''An accessor function that returns a list() that contains all summaries in a lldb.SBCategory object.'''
177359575Sdim                summaries = []
178359575Sdim                for idx in range(self.GetNumSummaries()):
179359575Sdim                    summaries.append(self.GetSummaryAtIndex(idx))
180359575Sdim                return summaries
181359575Sdim
182359575Sdim            def get_synthetics_access_object(self):
183359575Sdim                '''An accessor function that returns an accessor object which allows lazy synthetic children provider access from a lldb.SBTypeCategory object.'''
184359575Sdim                return self.formatters_access_class (self,self.__class__.GetNumSynthetics,self.__class__.GetSyntheticAtIndex,self.__class__.GetSyntheticForType)
185359575Sdim
186359575Sdim            def get_synthetics_array(self):
187359575Sdim                '''An accessor function that returns a list() that contains all synthetic children providers in a lldb.SBCategory object.'''
188359575Sdim                synthetics = []
189359575Sdim                for idx in range(self.GetNumSynthetics()):
190359575Sdim                    synthetics.append(self.GetSyntheticAtIndex(idx))
191359575Sdim                return synthetics
192359575Sdim
193359575Sdim            def get_filters_access_object(self):
194359575Sdim                '''An accessor function that returns an accessor object which allows lazy filter access from a lldb.SBTypeCategory object.'''
195359575Sdim                return self.formatters_access_class (self,self.__class__.GetNumFilters,self.__class__.GetFilterAtIndex,self.__class__.GetFilterForType)
196359575Sdim
197359575Sdim            def get_filters_array(self):
198359575Sdim                '''An accessor function that returns a list() that contains all filters in a lldb.SBCategory object.'''
199359575Sdim                filters = []
200359575Sdim                for idx in range(self.GetNumFilters()):
201359575Sdim                    filters.append(self.GetFilterAtIndex(idx))
202359575Sdim                return filters
203359575Sdim
204359575Sdim            formats = property(get_formats_array, None, doc='''A read only property that returns a list() of lldb.SBTypeFormat objects contained in this category''')
205359575Sdim            format = property(get_formats_access_object, None, doc=r'''A read only property that returns an object that you can use to look for formats by index or type name.''')
206359575Sdim            summaries = property(get_summaries_array, None, doc='''A read only property that returns a list() of lldb.SBTypeSummary objects contained in this category''')
207359575Sdim            summary = property(get_summaries_access_object, None, doc=r'''A read only property that returns an object that you can use to look for summaries by index or type name or regular expression.''')
208359575Sdim            filters = property(get_filters_array, None, doc='''A read only property that returns a list() of lldb.SBTypeFilter objects contained in this category''')
209359575Sdim            filter = property(get_filters_access_object, None, doc=r'''A read only property that returns an object that you can use to look for filters by index or type name or regular expression.''')
210359575Sdim            synthetics = property(get_synthetics_array, None, doc='''A read only property that returns a list() of lldb.SBTypeSynthetic objects contained in this category''')
211359575Sdim            synthetic = property(get_synthetics_access_object, None, doc=r'''A read only property that returns an object that you can use to look for synthetic children provider by index or type name or regular expression.''')
212359575Sdim            num_formats = property(GetNumFormats, None)
213359575Sdim            num_summaries = property(GetNumSummaries, None)
214359575Sdim            num_filters = property(GetNumFilters, None)
215359575Sdim            num_synthetics = property(GetNumSynthetics, None)
216359575Sdim            name = property(GetName, None)
217359575Sdim            enabled = property(GetEnabled, SetEnabled)
218359575Sdim        %}
219359575Sdim#endif
220359575Sdim
221359575Sdim    };
222359575Sdim
223359575Sdim
224359575Sdim} // namespace lldb
225359575Sdim
226