]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/source/API/SBTypeFilter.cpp
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / source / API / SBTypeFilter.cpp
1 //===-- SBTypeFilter.cpp ------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #include "lldb/lldb-python.h"
11
12 #include "lldb/API/SBTypeFilter.h"
13
14 #include "lldb/API/SBStream.h"
15
16 #include "lldb/DataFormatters/DataVisualization.h"
17
18 using namespace lldb;
19 using namespace lldb_private;
20
21 SBTypeFilter::SBTypeFilter() :
22 m_opaque_sp()
23 {
24 }
25
26 SBTypeFilter::SBTypeFilter (uint32_t options)
27 : m_opaque_sp(TypeFilterImplSP(new TypeFilterImpl(options)))
28 {
29 }
30
31 SBTypeFilter::SBTypeFilter (const lldb::SBTypeFilter &rhs) :
32 m_opaque_sp(rhs.m_opaque_sp)
33 {
34 }
35
36 SBTypeFilter::~SBTypeFilter ()
37 {
38 }
39
40 bool
41 SBTypeFilter::IsValid() const
42 {
43     return m_opaque_sp.get() != NULL;
44 }
45
46 uint32_t
47 SBTypeFilter::GetOptions()
48 {
49     if (IsValid())
50         return m_opaque_sp->GetOptions();
51     return 0;
52 }
53
54 void
55 SBTypeFilter::SetOptions (uint32_t value)
56 {
57     if (CopyOnWrite_Impl())
58         m_opaque_sp->SetOptions(value);
59 }
60
61 bool
62 SBTypeFilter::GetDescription (lldb::SBStream &description, 
63                               lldb::DescriptionLevel description_level)
64 {
65     if (!IsValid())
66         return false;
67     else {
68         description.Printf("%s\n",
69                            m_opaque_sp->GetDescription().c_str());
70         return true;
71     }
72 }
73
74 void
75 SBTypeFilter::Clear()
76 {
77     if (CopyOnWrite_Impl())
78         m_opaque_sp->Clear();
79 }
80
81 uint32_t
82 SBTypeFilter::GetNumberOfExpressionPaths()
83 {
84     if (IsValid())
85         return m_opaque_sp->GetCount();
86     return 0;
87 }
88
89 const char*
90 SBTypeFilter::GetExpressionPathAtIndex (uint32_t i)
91 {
92     if (IsValid())
93     {
94         const char* item = m_opaque_sp->GetExpressionPathAtIndex(i);
95         if (item && *item == '.')
96             item++;
97         return item;
98     }
99     return NULL;
100 }
101
102 bool
103 SBTypeFilter::ReplaceExpressionPathAtIndex (uint32_t i, const char* item)
104 {
105     if (CopyOnWrite_Impl())
106         return m_opaque_sp->SetExpressionPathAtIndex(i, item);
107     else
108         return false;
109 }
110
111 void
112 SBTypeFilter::AppendExpressionPath (const char* item)
113 {
114     if (CopyOnWrite_Impl())
115         m_opaque_sp->AddExpressionPath(item);
116 }
117
118 lldb::SBTypeFilter &
119 SBTypeFilter::operator = (const lldb::SBTypeFilter &rhs)
120 {
121     if (this != &rhs)
122     {
123         m_opaque_sp = rhs.m_opaque_sp;
124     }
125     return *this;
126 }
127
128 bool
129 SBTypeFilter::operator == (lldb::SBTypeFilter &rhs)
130 {
131     if (IsValid() == false)
132         return !rhs.IsValid();
133     
134     return m_opaque_sp == rhs.m_opaque_sp;
135 }
136
137 bool
138 SBTypeFilter::IsEqualTo (lldb::SBTypeFilter &rhs)
139 {
140     if (IsValid() == false)
141         return !rhs.IsValid();
142     
143     if (GetNumberOfExpressionPaths() != rhs.GetNumberOfExpressionPaths())
144         return false;
145     
146     for (uint32_t j = 0;
147          j < GetNumberOfExpressionPaths();
148          j++)
149         if ( strcmp(GetExpressionPathAtIndex(j),rhs.GetExpressionPathAtIndex(j)) != 0)
150             return false;
151     
152     return GetOptions() == rhs.GetOptions();
153 }
154
155 bool
156 SBTypeFilter::operator != (lldb::SBTypeFilter &rhs)
157 {
158     if (IsValid() == false)
159         return !rhs.IsValid();
160     
161     return m_opaque_sp != rhs.m_opaque_sp;
162 }
163
164 lldb::TypeFilterImplSP
165 SBTypeFilter::GetSP ()
166 {
167     return m_opaque_sp;
168 }
169
170 void
171 SBTypeFilter::SetSP (const lldb::TypeFilterImplSP &typefilter_impl_sp)
172 {
173     m_opaque_sp = typefilter_impl_sp;
174 }
175
176 SBTypeFilter::SBTypeFilter (const lldb::TypeFilterImplSP &typefilter_impl_sp) :
177 m_opaque_sp(typefilter_impl_sp)
178 {
179 }
180
181 bool
182 SBTypeFilter::CopyOnWrite_Impl()
183 {
184     if (!IsValid())
185         return false;
186     if (m_opaque_sp.unique())
187         return true;
188
189     TypeFilterImplSP new_sp(new TypeFilterImpl(GetOptions()));
190     
191     for (uint32_t j = 0;
192          j < GetNumberOfExpressionPaths();
193          j++)
194         new_sp->AddExpressionPath(GetExpressionPathAtIndex(j));
195     
196     SetSP(new_sp);
197     
198     return true;
199 }