1 //===-- SBValueList.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 //===----------------------------------------------------------------------===//
11 #include "lldb/API/SBValueList.h"
12 #include "lldb/API/SBValue.h"
13 #include "lldb/API/SBStream.h"
14 #include "lldb/Core/Log.h"
15 #include "lldb/Core/ValueObjectList.h"
20 using namespace lldb_private;
30 ValueListImpl (const ValueListImpl& rhs) :
31 m_values(rhs.m_values)
36 operator = (const ValueListImpl& rhs)
40 m_values = rhs.m_values;
47 return m_values.size();
51 Append (const lldb::SBValue& sb_value)
53 m_values.push_back(sb_value);
57 Append (const ValueListImpl& list)
59 for (auto val : list.m_values)
64 GetValueAtIndex (uint32_t index)
66 if (index >= GetSize())
67 return lldb::SBValue();
68 return m_values[index];
72 FindValueByUID (lldb::user_id_t uid)
74 for (auto val : m_values)
76 if (val.IsValid() && val.GetID() == uid)
79 return lldb::SBValue();
83 GetFirstValueByName (const char* name) const
87 for (auto val : m_values)
89 if (val.IsValid() && val.GetName() &&
90 strcmp(name,val.GetName()) == 0)
94 return lldb::SBValue();
98 std::vector<lldb::SBValue> m_values;
101 SBValueList::SBValueList () :
106 SBValueList::SBValueList (const SBValueList &rhs) :
109 Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
112 m_opaque_ap.reset (new ValueListImpl (*rhs));
116 log->Printf ("SBValueList::SBValueList (rhs.ap=%p) => this.ap = %p",
117 static_cast<void*>(rhs.IsValid() ? rhs.m_opaque_ap.get() : NULL),
118 static_cast<void*>(m_opaque_ap.get()));
122 SBValueList::SBValueList (const ValueListImpl *lldb_object_ptr) :
125 Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
128 m_opaque_ap.reset (new ValueListImpl (*lldb_object_ptr));
132 log->Printf ("SBValueList::SBValueList (lldb_object_ptr=%p) => this.ap = %p",
133 static_cast<const void*>(lldb_object_ptr),
134 static_cast<void*>(m_opaque_ap.get()));
138 SBValueList::~SBValueList ()
143 SBValueList::IsValid () const
145 return (m_opaque_ap.get() != NULL);
155 SBValueList::operator = (const SBValueList &rhs)
160 m_opaque_ap.reset (new ValueListImpl (*rhs));
162 m_opaque_ap.reset ();
168 SBValueList::operator->()
170 return m_opaque_ap.get();
174 SBValueList::operator*()
179 const ValueListImpl *
180 SBValueList::operator->() const
182 return m_opaque_ap.get();
185 const ValueListImpl &
186 SBValueList::operator*() const
192 SBValueList::Append (const SBValue &val_obj)
195 m_opaque_ap->Append (val_obj);
199 SBValueList::Append (lldb::ValueObjectSP& val_obj_sp)
204 m_opaque_ap->Append (SBValue(val_obj_sp));
209 SBValueList::Append (const lldb::SBValueList& value_list)
211 if (value_list.IsValid())
214 m_opaque_ap->Append (*value_list);
220 SBValueList::GetValueAtIndex (uint32_t idx) const
222 Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
225 // log->Printf ("SBValueList::GetValueAtIndex (uint32_t idx) idx = %d", idx);
228 if (m_opaque_ap.get())
229 sb_value = m_opaque_ap->GetValueAtIndex (idx);
234 sb_value.GetDescription (sstr);
235 log->Printf ("SBValueList::GetValueAtIndex (this.ap=%p, idx=%d) => SBValue (this.sp = %p, '%s')",
236 static_cast<void*>(m_opaque_ap.get()), idx,
237 static_cast<void*>(sb_value.GetSP().get()), sstr.GetData());
244 SBValueList::GetSize () const
246 Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
249 // log->Printf ("SBValueList::GetSize ()");
252 if (m_opaque_ap.get())
253 size = m_opaque_ap->GetSize();
256 log->Printf ("SBValueList::GetSize (this.ap=%p) => %d",
257 static_cast<void*>(m_opaque_ap.get()), size);
263 SBValueList::CreateIfNeeded ()
265 if (m_opaque_ap.get() == NULL)
266 m_opaque_ap.reset (new ValueListImpl());
271 SBValueList::FindValueObjectByUID (lldb::user_id_t uid)
274 if (m_opaque_ap.get())
275 sb_value = m_opaque_ap->FindValueByUID(uid);
280 SBValueList::GetFirstValueByName (const char* name) const
283 if (m_opaque_ap.get())
284 sb_value = m_opaque_ap->GetFirstValueByName(name);
289 SBValueList::opaque_ptr ()
291 return m_opaque_ap.get();
298 return *m_opaque_ap.get();