1 //===-- SBTypeFilter.cpp ------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/lldb-python.h"
12 #include "lldb/API/SBTypeFilter.h"
14 #include "lldb/API/SBStream.h"
16 #include "lldb/DataFormatters/DataVisualization.h"
19 using namespace lldb_private;
21 SBTypeFilter::SBTypeFilter() :
26 SBTypeFilter::SBTypeFilter (uint32_t options)
27 : m_opaque_sp(TypeFilterImplSP(new TypeFilterImpl(options)))
31 SBTypeFilter::SBTypeFilter (const lldb::SBTypeFilter &rhs) :
32 m_opaque_sp(rhs.m_opaque_sp)
36 SBTypeFilter::~SBTypeFilter ()
41 SBTypeFilter::IsValid() const
43 return m_opaque_sp.get() != NULL;
47 SBTypeFilter::GetOptions()
50 return m_opaque_sp->GetOptions();
55 SBTypeFilter::SetOptions (uint32_t value)
57 if (CopyOnWrite_Impl())
58 m_opaque_sp->SetOptions(value);
62 SBTypeFilter::GetDescription (lldb::SBStream &description,
63 lldb::DescriptionLevel description_level)
68 description.Printf("%s\n",
69 m_opaque_sp->GetDescription().c_str());
77 if (CopyOnWrite_Impl())
82 SBTypeFilter::GetNumberOfExpressionPaths()
85 return m_opaque_sp->GetCount();
90 SBTypeFilter::GetExpressionPathAtIndex (uint32_t i)
94 const char* item = m_opaque_sp->GetExpressionPathAtIndex(i);
95 if (item && *item == '.')
103 SBTypeFilter::ReplaceExpressionPathAtIndex (uint32_t i, const char* item)
105 if (CopyOnWrite_Impl())
106 return m_opaque_sp->SetExpressionPathAtIndex(i, item);
112 SBTypeFilter::AppendExpressionPath (const char* item)
114 if (CopyOnWrite_Impl())
115 m_opaque_sp->AddExpressionPath(item);
119 SBTypeFilter::operator = (const lldb::SBTypeFilter &rhs)
123 m_opaque_sp = rhs.m_opaque_sp;
129 SBTypeFilter::operator == (lldb::SBTypeFilter &rhs)
131 if (IsValid() == false)
132 return !rhs.IsValid();
134 return m_opaque_sp == rhs.m_opaque_sp;
138 SBTypeFilter::IsEqualTo (lldb::SBTypeFilter &rhs)
140 if (IsValid() == false)
141 return !rhs.IsValid();
143 if (GetNumberOfExpressionPaths() != rhs.GetNumberOfExpressionPaths())
147 j < GetNumberOfExpressionPaths();
149 if ( strcmp(GetExpressionPathAtIndex(j),rhs.GetExpressionPathAtIndex(j)) != 0)
152 return GetOptions() == rhs.GetOptions();
156 SBTypeFilter::operator != (lldb::SBTypeFilter &rhs)
158 if (IsValid() == false)
159 return !rhs.IsValid();
161 return m_opaque_sp != rhs.m_opaque_sp;
164 lldb::TypeFilterImplSP
165 SBTypeFilter::GetSP ()
171 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)
182 SBTypeFilter::CopyOnWrite_Impl()
186 if (m_opaque_sp.unique())
189 TypeFilterImplSP new_sp(new TypeFilterImpl(GetOptions()));
192 j < GetNumberOfExpressionPaths();
194 new_sp->AddExpressionPath(GetExpressionPathAtIndex(j));