1 //===-- SBTypeFilter.cpp ------------------------------------------*- C++
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //===----------------------------------------------------------------------===//
10 #include "lldb/API/SBTypeFilter.h"
11 #include "SBReproducerPrivate.h"
13 #include "lldb/API/SBStream.h"
15 #include "lldb/DataFormatters/DataVisualization.h"
18 using namespace lldb_private;
20 SBTypeFilter::SBTypeFilter() : m_opaque_sp() {
21 LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBTypeFilter);
24 SBTypeFilter::SBTypeFilter(uint32_t options)
25 : m_opaque_sp(TypeFilterImplSP(new TypeFilterImpl(options))) {
26 LLDB_RECORD_CONSTRUCTOR(SBTypeFilter, (uint32_t), options);
29 SBTypeFilter::SBTypeFilter(const lldb::SBTypeFilter &rhs)
30 : m_opaque_sp(rhs.m_opaque_sp) {
31 LLDB_RECORD_CONSTRUCTOR(SBTypeFilter, (const lldb::SBTypeFilter &), rhs);
34 SBTypeFilter::~SBTypeFilter() {}
36 bool SBTypeFilter::IsValid() const {
37 LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBTypeFilter, IsValid);
38 return this->operator bool();
40 SBTypeFilter::operator bool() const {
41 LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBTypeFilter, operator bool);
43 return m_opaque_sp.get() != nullptr;
46 uint32_t SBTypeFilter::GetOptions() {
47 LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBTypeFilter, GetOptions);
50 return m_opaque_sp->GetOptions();
54 void SBTypeFilter::SetOptions(uint32_t value) {
55 LLDB_RECORD_METHOD(void, SBTypeFilter, SetOptions, (uint32_t), value);
57 if (CopyOnWrite_Impl())
58 m_opaque_sp->SetOptions(value);
61 bool SBTypeFilter::GetDescription(lldb::SBStream &description,
62 lldb::DescriptionLevel description_level) {
63 LLDB_RECORD_METHOD(bool, SBTypeFilter, GetDescription,
64 (lldb::SBStream &, lldb::DescriptionLevel), description,
70 description.Printf("%s\n", m_opaque_sp->GetDescription().c_str());
75 void SBTypeFilter::Clear() {
76 LLDB_RECORD_METHOD_NO_ARGS(void, SBTypeFilter, Clear);
78 if (CopyOnWrite_Impl())
82 uint32_t SBTypeFilter::GetNumberOfExpressionPaths() {
83 LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBTypeFilter,
84 GetNumberOfExpressionPaths);
87 return m_opaque_sp->GetCount();
91 const char *SBTypeFilter::GetExpressionPathAtIndex(uint32_t i) {
92 LLDB_RECORD_METHOD(const char *, SBTypeFilter, GetExpressionPathAtIndex,
96 const char *item = m_opaque_sp->GetExpressionPathAtIndex(i);
97 if (item && *item == '.')
104 bool SBTypeFilter::ReplaceExpressionPathAtIndex(uint32_t i, const char *item) {
105 LLDB_RECORD_METHOD(bool, SBTypeFilter, ReplaceExpressionPathAtIndex,
106 (uint32_t, const char *), i, item);
108 if (CopyOnWrite_Impl())
109 return m_opaque_sp->SetExpressionPathAtIndex(i, item);
114 void SBTypeFilter::AppendExpressionPath(const char *item) {
115 LLDB_RECORD_METHOD(void, SBTypeFilter, AppendExpressionPath, (const char *),
118 if (CopyOnWrite_Impl())
119 m_opaque_sp->AddExpressionPath(item);
122 lldb::SBTypeFilter &SBTypeFilter::operator=(const lldb::SBTypeFilter &rhs) {
123 LLDB_RECORD_METHOD(lldb::SBTypeFilter &,
124 SBTypeFilter, operator=,(const lldb::SBTypeFilter &), rhs);
127 m_opaque_sp = rhs.m_opaque_sp;
129 return LLDB_RECORD_RESULT(*this);
132 bool SBTypeFilter::operator==(lldb::SBTypeFilter &rhs) {
133 LLDB_RECORD_METHOD(bool, SBTypeFilter, operator==,(lldb::SBTypeFilter &),
137 return !rhs.IsValid();
139 return m_opaque_sp == rhs.m_opaque_sp;
142 bool SBTypeFilter::IsEqualTo(lldb::SBTypeFilter &rhs) {
143 LLDB_RECORD_METHOD(bool, SBTypeFilter, IsEqualTo, (lldb::SBTypeFilter &),
147 return !rhs.IsValid();
149 if (GetNumberOfExpressionPaths() != rhs.GetNumberOfExpressionPaths())
152 for (uint32_t j = 0; j < GetNumberOfExpressionPaths(); j++)
153 if (strcmp(GetExpressionPathAtIndex(j), rhs.GetExpressionPathAtIndex(j)) !=
157 return GetOptions() == rhs.GetOptions();
160 bool SBTypeFilter::operator!=(lldb::SBTypeFilter &rhs) {
161 LLDB_RECORD_METHOD(bool, SBTypeFilter, operator!=,(lldb::SBTypeFilter &),
165 return !rhs.IsValid();
167 return m_opaque_sp != rhs.m_opaque_sp;
170 lldb::TypeFilterImplSP SBTypeFilter::GetSP() { return m_opaque_sp; }
172 void SBTypeFilter::SetSP(const lldb::TypeFilterImplSP &typefilter_impl_sp) {
173 m_opaque_sp = typefilter_impl_sp;
176 SBTypeFilter::SBTypeFilter(const lldb::TypeFilterImplSP &typefilter_impl_sp)
177 : m_opaque_sp(typefilter_impl_sp) {}
179 bool SBTypeFilter::CopyOnWrite_Impl() {
182 if (m_opaque_sp.unique())
185 TypeFilterImplSP new_sp(new TypeFilterImpl(GetOptions()));
187 for (uint32_t j = 0; j < GetNumberOfExpressionPaths(); j++)
188 new_sp->AddExpressionPath(GetExpressionPathAtIndex(j));
195 namespace lldb_private {
199 void RegisterMethods<SBTypeFilter>(Registry &R) {
200 LLDB_REGISTER_CONSTRUCTOR(SBTypeFilter, ());
201 LLDB_REGISTER_CONSTRUCTOR(SBTypeFilter, (uint32_t));
202 LLDB_REGISTER_CONSTRUCTOR(SBTypeFilter, (const lldb::SBTypeFilter &));
203 LLDB_REGISTER_METHOD_CONST(bool, SBTypeFilter, IsValid, ());
204 LLDB_REGISTER_METHOD_CONST(bool, SBTypeFilter, operator bool, ());
205 LLDB_REGISTER_METHOD(uint32_t, SBTypeFilter, GetOptions, ());
206 LLDB_REGISTER_METHOD(void, SBTypeFilter, SetOptions, (uint32_t));
207 LLDB_REGISTER_METHOD(bool, SBTypeFilter, GetDescription,
208 (lldb::SBStream &, lldb::DescriptionLevel));
209 LLDB_REGISTER_METHOD(void, SBTypeFilter, Clear, ());
210 LLDB_REGISTER_METHOD(uint32_t, SBTypeFilter, GetNumberOfExpressionPaths,
212 LLDB_REGISTER_METHOD(const char *, SBTypeFilter, GetExpressionPathAtIndex,
214 LLDB_REGISTER_METHOD(bool, SBTypeFilter, ReplaceExpressionPathAtIndex,
215 (uint32_t, const char *));
216 LLDB_REGISTER_METHOD(void, SBTypeFilter, AppendExpressionPath,
218 LLDB_REGISTER_METHOD(lldb::SBTypeFilter &,
219 SBTypeFilter, operator=,(const lldb::SBTypeFilter &));
220 LLDB_REGISTER_METHOD(bool, SBTypeFilter, operator==,(lldb::SBTypeFilter &));
221 LLDB_REGISTER_METHOD(bool, SBTypeFilter, IsEqualTo, (lldb::SBTypeFilter &));
222 LLDB_REGISTER_METHOD(bool, SBTypeFilter, operator!=,(lldb::SBTypeFilter &));