blob: bcddedfaf83baf9a73582a432372f07f76624e24 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBValueList.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
11#include "lldb/API/SBValueList.h"
12#include "lldb/API/SBValue.h"
Caroline Tice7826c882010-10-26 03:11:13 +000013#include "lldb/API/SBStream.h"
Caroline Tice7826c882010-10-26 03:11:13 +000014#include "lldb/Core/Log.h"
Chris Lattner24943d22010-06-08 16:52:24 +000015#include "lldb/Core/ValueObjectList.h"
16
17using namespace lldb;
18using namespace lldb_private;
19
20SBValueList::SBValueList () :
Greg Clayton63094e02010-06-23 01:19:29 +000021 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000022{
23}
24
25SBValueList::SBValueList (const SBValueList &rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000026 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000027{
Greg Claytone005f2c2010-11-06 01:53:30 +000028 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000029
Chris Lattner24943d22010-06-08 16:52:24 +000030 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000031 m_opaque_ap.reset (new lldb_private::ValueObjectList (*rhs));
Caroline Tice7826c882010-10-26 03:11:13 +000032
33 if (log)
34 {
Caroline Tice61ba7ec2010-10-26 23:49:36 +000035 log->Printf ("SBValueList::SBValueList (rhs.ap=%p) => this.ap = %p",
Greg Claytonbdcda462010-12-20 20:49:23 +000036 (rhs.IsValid() ? rhs.m_opaque_ap.get() : NULL),
37 m_opaque_ap.get());
Caroline Tice7826c882010-10-26 03:11:13 +000038 }
Chris Lattner24943d22010-06-08 16:52:24 +000039}
40
41SBValueList::SBValueList (const lldb_private::ValueObjectList *lldb_object_ptr) :
Greg Clayton63094e02010-06-23 01:19:29 +000042 m_opaque_ap ()
Chris Lattner24943d22010-06-08 16:52:24 +000043{
Greg Claytone005f2c2010-11-06 01:53:30 +000044 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +000045
Chris Lattner24943d22010-06-08 16:52:24 +000046 if (lldb_object_ptr)
Greg Clayton63094e02010-06-23 01:19:29 +000047 m_opaque_ap.reset (new lldb_private::ValueObjectList (*lldb_object_ptr));
Caroline Tice7826c882010-10-26 03:11:13 +000048
49 if (log)
50 {
Greg Claytonbdcda462010-12-20 20:49:23 +000051 log->Printf ("SBValueList::SBValueList (lldb_object_ptr=%p) => this.ap = %p",
52 lldb_object_ptr,
Caroline Tice61ba7ec2010-10-26 23:49:36 +000053 m_opaque_ap.get());
Caroline Tice7826c882010-10-26 03:11:13 +000054 }
Chris Lattner24943d22010-06-08 16:52:24 +000055}
56
57SBValueList::~SBValueList ()
58{
59}
60
61bool
62SBValueList::IsValid () const
63{
Greg Clayton63094e02010-06-23 01:19:29 +000064 return (m_opaque_ap.get() != NULL);
Chris Lattner24943d22010-06-08 16:52:24 +000065}
66
67const SBValueList &
68SBValueList::operator = (const SBValueList &rhs)
69{
70 if (this != &rhs)
71 {
72 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000073 m_opaque_ap.reset (new lldb_private::ValueObjectList (*rhs));
Chris Lattner24943d22010-06-08 16:52:24 +000074 else
Greg Clayton63094e02010-06-23 01:19:29 +000075 m_opaque_ap.reset ();
Chris Lattner24943d22010-06-08 16:52:24 +000076 }
77 return *this;
78}
79
80lldb_private::ValueObjectList *
81SBValueList::operator->()
82{
Greg Clayton63094e02010-06-23 01:19:29 +000083 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +000084}
85
86lldb_private::ValueObjectList &
87SBValueList::operator*()
88{
Greg Clayton63094e02010-06-23 01:19:29 +000089 return *m_opaque_ap;
Chris Lattner24943d22010-06-08 16:52:24 +000090}
91
92const lldb_private::ValueObjectList *
93SBValueList::operator->() const
94{
Greg Clayton63094e02010-06-23 01:19:29 +000095 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +000096}
97
98const lldb_private::ValueObjectList &
99SBValueList::operator*() const
100{
Greg Clayton63094e02010-06-23 01:19:29 +0000101 return *m_opaque_ap;
Chris Lattner24943d22010-06-08 16:52:24 +0000102}
103
104void
105SBValueList::Append (const SBValue &val_obj)
106{
107 if (val_obj.get())
108 {
109 CreateIfNeeded ();
Greg Clayton63094e02010-06-23 01:19:29 +0000110 m_opaque_ap->Append (*val_obj);
Chris Lattner24943d22010-06-08 16:52:24 +0000111 }
112}
113
114void
115SBValueList::Append (lldb::ValueObjectSP& val_obj_sp)
116{
117 if (val_obj_sp)
118 {
119 CreateIfNeeded ();
Greg Clayton63094e02010-06-23 01:19:29 +0000120 m_opaque_ap->Append (val_obj_sp);
Chris Lattner24943d22010-06-08 16:52:24 +0000121 }
122}
123
124
125SBValue
126SBValueList::GetValueAtIndex (uint32_t idx) const
127{
Greg Claytone005f2c2010-11-06 01:53:30 +0000128 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000129
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000130 //if (log)
131 // log->Printf ("SBValueList::GetValueAtIndex (uint32_t idx) idx = %d", idx);
Caroline Tice7826c882010-10-26 03:11:13 +0000132
Chris Lattner24943d22010-06-08 16:52:24 +0000133 SBValue sb_value;
Greg Clayton63094e02010-06-23 01:19:29 +0000134 if (m_opaque_ap.get())
135 *sb_value = m_opaque_ap->GetValueObjectAtIndex (idx);
Caroline Tice7826c882010-10-26 03:11:13 +0000136
137 if (log)
138 {
139 SBStream sstr;
140 sb_value.GetDescription (sstr);
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000141 log->Printf ("SBValueList::GetValueAtIndex (this.ap=%p, idx=%d) => SBValue (this.sp = %p, '%s')",
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000142 m_opaque_ap.get(), idx, sb_value.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +0000143 }
144
Chris Lattner24943d22010-06-08 16:52:24 +0000145 return sb_value;
146}
147
148uint32_t
149SBValueList::GetSize () const
150{
Greg Claytone005f2c2010-11-06 01:53:30 +0000151 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Tice7826c882010-10-26 03:11:13 +0000152
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000153 //if (log)
154 // log->Printf ("SBValueList::GetSize ()");
Caroline Tice7826c882010-10-26 03:11:13 +0000155
Chris Lattner24943d22010-06-08 16:52:24 +0000156 uint32_t size = 0;
Greg Clayton63094e02010-06-23 01:19:29 +0000157 if (m_opaque_ap.get())
158 size = m_opaque_ap->GetSize();
Caroline Tice7826c882010-10-26 03:11:13 +0000159
160 if (log)
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000161 log->Printf ("SBValueList::GetSize (this.ap=%p) => %d", m_opaque_ap.get(), size);
Caroline Tice7826c882010-10-26 03:11:13 +0000162
Chris Lattner24943d22010-06-08 16:52:24 +0000163 return size;
164}
165
166void
167SBValueList::CreateIfNeeded ()
168{
Greg Clayton63094e02010-06-23 01:19:29 +0000169 if (m_opaque_ap.get() == NULL)
170 m_opaque_ap.reset (new ValueObjectList());
Chris Lattner24943d22010-06-08 16:52:24 +0000171}
172
173
174SBValue
175SBValueList::FindValueObjectByUID (lldb::user_id_t uid)
176{
177 SBValue sb_value;
Greg Claytonbdcda462010-12-20 20:49:23 +0000178 if (m_opaque_ap.get())
Greg Clayton63094e02010-06-23 01:19:29 +0000179 *sb_value = m_opaque_ap->FindValueObjectByUID (uid);
Chris Lattner24943d22010-06-08 16:52:24 +0000180 return sb_value;
181}
182
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000183lldb_private::ValueObjectList *
184SBValueList::get ()
185{
186 return m_opaque_ap.get();
187}
188