blob: 5b2f075158b841076234990eed43b956cc37d050 [file] [log] [blame]
Enrico Granata91544802011-09-06 19:20:51 +00001//===-- SBData.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/API/SBData.h"
11#include "lldb/API/SBError.h"
12#include "lldb/API/SBStream.h"
13
Greg Claytona6b7e322012-01-07 00:45:50 +000014#include "lldb/Core/DataBufferHeap.h"
Enrico Granata91544802011-09-06 19:20:51 +000015#include "lldb/Core/DataExtractor.h"
16#include "lldb/Core/Log.h"
Greg Clayton96154be2011-11-13 06:57:31 +000017#include "lldb/Core/Stream.h"
18
Enrico Granata91544802011-09-06 19:20:51 +000019
20using namespace lldb;
21using namespace lldb_private;
22
Greg Claytona6b7e322012-01-07 00:45:50 +000023SBData::SBData () :
24 m_opaque_sp(new DataExtractor())
Enrico Granata91544802011-09-06 19:20:51 +000025{
26}
27
28SBData::SBData (const lldb::DataExtractorSP& data_sp) :
29 m_opaque_sp (data_sp)
30{
31}
32
33SBData::SBData(const SBData &rhs) :
34 m_opaque_sp (rhs.m_opaque_sp)
35{
36}
37
38const SBData &
39SBData::operator = (const SBData &rhs)
40{
41 if (this != &rhs)
42 m_opaque_sp = rhs.m_opaque_sp;
43 return *this;
44}
45
46SBData::~SBData ()
47{
48}
49
50void
51SBData::SetOpaque (const lldb::DataExtractorSP &data_sp)
52{
53 m_opaque_sp = data_sp;
54}
55
56lldb_private::DataExtractor *
57SBData::get() const
58{
59 return m_opaque_sp.get();
60}
61
62lldb_private::DataExtractor *
63SBData::operator->() const
64{
65 return m_opaque_sp.operator->();
66}
67
68lldb::DataExtractorSP &
69SBData::operator*()
70{
71 return m_opaque_sp;
72}
73
74const lldb::DataExtractorSP &
75SBData::operator*() const
76{
77 return m_opaque_sp;
78}
79
80bool
81SBData::IsValid()
82{
83 return m_opaque_sp.get() != NULL;
84}
85
86uint8_t
87SBData::GetAddressByteSize ()
88{
Greg Clayton952e9dc2013-03-27 23:08:40 +000089 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +000090 uint8_t value = 0;
91 if (m_opaque_sp.get())
92 value = m_opaque_sp->GetAddressByteSize();
93 if (log)
94 log->Printf ("SBData::GetAddressByteSize () => "
95 "(%i)", value);
96 return value;
97}
98
99void
Greg Claytona6b7e322012-01-07 00:45:50 +0000100SBData::SetAddressByteSize (uint8_t addr_byte_size)
101{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000102 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona6b7e322012-01-07 00:45:50 +0000103 if (m_opaque_sp.get())
104 m_opaque_sp->SetAddressByteSize(addr_byte_size);
105 if (log)
106 log->Printf ("SBData::SetAddressByteSize (%i)", addr_byte_size);
107}
108
109void
Enrico Granata91544802011-09-06 19:20:51 +0000110SBData::Clear ()
111{
112 if (m_opaque_sp.get())
113 m_opaque_sp->Clear();
114}
115
116size_t
117SBData::GetByteSize ()
118{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000119 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000120 size_t value = 0;
121 if (m_opaque_sp.get())
122 value = m_opaque_sp->GetByteSize();
123 if (log)
124 log->Printf ("SBData::GetByteSize () => "
Jason Molenda7e5fa7f2011-09-20 21:44:10 +0000125 "(%lu)", value);
Enrico Granata91544802011-09-06 19:20:51 +0000126 return value;
127}
128
129lldb::ByteOrder
130SBData::GetByteOrder ()
131{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000132 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000133 lldb::ByteOrder value = eByteOrderInvalid;
134 if (m_opaque_sp.get())
135 value = m_opaque_sp->GetByteOrder();
136 if (log)
137 log->Printf ("SBData::GetByteOrder () => "
138 "(%i)", value);
139 return value;
140}
141
Greg Claytona6b7e322012-01-07 00:45:50 +0000142void
143SBData::SetByteOrder (lldb::ByteOrder endian)
144{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000145 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona6b7e322012-01-07 00:45:50 +0000146 if (m_opaque_sp.get())
147 m_opaque_sp->SetByteOrder(endian);
148 if (log)
149 log->Printf ("SBData::GetByteOrder (%i)", endian);
150}
151
152
Enrico Granata91544802011-09-06 19:20:51 +0000153float
Greg Clayton36da2aa2013-01-25 18:06:21 +0000154SBData::GetFloat (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000155{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000156 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000157 float value = 0;
158 if (!m_opaque_sp.get())
159 {
160 error.SetErrorString("no value to read from");
161 }
162 else
163 {
164 uint32_t old_offset = offset;
165 value = m_opaque_sp->GetFloat(&offset);
166 if (offset == old_offset)
167 error.SetErrorString("unable to read data");
168 }
169 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000170 log->Printf ("SBData::GetFloat (error=%p,offset=%" PRIu64 ") => "
Enrico Granata91544802011-09-06 19:20:51 +0000171 "(%f)", error.get(), offset, value);
172 return value;
173}
174
175double
Greg Clayton36da2aa2013-01-25 18:06:21 +0000176SBData::GetDouble (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000177{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000178 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000179 double value = 0;
180 if (!m_opaque_sp.get())
181 {
182 error.SetErrorString("no value to read from");
183 }
184 else
185 {
186 uint32_t old_offset = offset;
187 value = m_opaque_sp->GetDouble(&offset);
188 if (offset == old_offset)
189 error.SetErrorString("unable to read data");
190 }
191 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000192 log->Printf ("SBData::GetDouble (error=%p,offset=%" PRIu64 ") => "
Enrico Granata91544802011-09-06 19:20:51 +0000193 "(%f)", error.get(), offset, value);
194 return value;
195}
196
197long double
Greg Clayton36da2aa2013-01-25 18:06:21 +0000198SBData::GetLongDouble (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000199{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000200 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000201 long double value = 0;
202 if (!m_opaque_sp.get())
203 {
204 error.SetErrorString("no value to read from");
205 }
206 else
207 {
208 uint32_t old_offset = offset;
209 value = m_opaque_sp->GetLongDouble(&offset);
210 if (offset == old_offset)
211 error.SetErrorString("unable to read data");
212 }
213 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000214 log->Printf ("SBData::GetLongDouble (error=%p,offset=%" PRIu64 ") => "
Jason Molenda7e5fa7f2011-09-20 21:44:10 +0000215 "(%Lf)", error.get(), offset, value);
Enrico Granata91544802011-09-06 19:20:51 +0000216 return value;
217}
218
219lldb::addr_t
Greg Clayton36da2aa2013-01-25 18:06:21 +0000220SBData::GetAddress (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000221{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000222 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000223 lldb::addr_t value = 0;
224 if (!m_opaque_sp.get())
225 {
226 error.SetErrorString("no value to read from");
227 }
228 else
229 {
230 uint32_t old_offset = offset;
231 value = m_opaque_sp->GetAddress(&offset);
232 if (offset == old_offset)
233 error.SetErrorString("unable to read data");
234 }
235 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000236 log->Printf ("SBData::GetAddress (error=%p,offset=%" PRIu64 ") => "
Enrico Granata91544802011-09-06 19:20:51 +0000237 "(%p)", error.get(), offset, (void*)value);
238 return value;
239}
240
241uint8_t
Greg Clayton36da2aa2013-01-25 18:06:21 +0000242SBData::GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000243{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000244 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000245 uint8_t value = 0;
246 if (!m_opaque_sp.get())
247 {
248 error.SetErrorString("no value to read from");
249 }
250 else
251 {
252 uint32_t old_offset = offset;
253 value = m_opaque_sp->GetU8(&offset);
254 if (offset == old_offset)
255 error.SetErrorString("unable to read data");
256 }
257 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000258 log->Printf ("SBData::GetUnsignedInt8 (error=%p,offset=%" PRIu64 ") => "
Enrico Granata91544802011-09-06 19:20:51 +0000259 "(%c)", error.get(), offset, value);
260 return value;
261}
262
263uint16_t
Greg Clayton36da2aa2013-01-25 18:06:21 +0000264SBData::GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000265{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000266 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000267 uint16_t value = 0;
268 if (!m_opaque_sp.get())
269 {
270 error.SetErrorString("no value to read from");
271 }
272 else
273 {
274 uint32_t old_offset = offset;
275 value = m_opaque_sp->GetU16(&offset);
276 if (offset == old_offset)
277 error.SetErrorString("unable to read data");
278 }
279 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000280 log->Printf ("SBData::GetUnsignedInt16 (error=%p,offset=%" PRIu64 ") => "
Enrico Granata91544802011-09-06 19:20:51 +0000281 "(%hd)", error.get(), offset, value);
282 return value;
283}
284
285uint32_t
Greg Clayton36da2aa2013-01-25 18:06:21 +0000286SBData::GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000287{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000288 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000289 uint32_t value = 0;
290 if (!m_opaque_sp.get())
291 {
292 error.SetErrorString("no value to read from");
293 }
294 else
295 {
296 uint32_t old_offset = offset;
297 value = m_opaque_sp->GetU32(&offset);
298 if (offset == old_offset)
299 error.SetErrorString("unable to read data");
300 }
301 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000302 log->Printf ("SBData::GetUnsignedInt32 (error=%p,offset=%" PRIu64 ") => "
Enrico Granata91544802011-09-06 19:20:51 +0000303 "(%d)", error.get(), offset, value);
304 return value;
305}
306
307uint64_t
Greg Clayton36da2aa2013-01-25 18:06:21 +0000308SBData::GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000309{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000310 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000311 uint64_t value = 0;
312 if (!m_opaque_sp.get())
313 {
314 error.SetErrorString("no value to read from");
315 }
316 else
317 {
318 uint32_t old_offset = offset;
319 value = m_opaque_sp->GetU64(&offset);
320 if (offset == old_offset)
321 error.SetErrorString("unable to read data");
322 }
323 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000324 log->Printf ("SBData::GetUnsignedInt64 (error=%p,offset=%" PRIu64 ") => "
Daniel Malea5f35a4b2012-11-29 21:49:15 +0000325 "(%" PRId64 ")", error.get(), offset, value);
Enrico Granata91544802011-09-06 19:20:51 +0000326 return value;
327}
328
329int8_t
Greg Clayton36da2aa2013-01-25 18:06:21 +0000330SBData::GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000331{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000332 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000333 int8_t value = 0;
334 if (!m_opaque_sp.get())
335 {
336 error.SetErrorString("no value to read from");
337 }
338 else
339 {
340 uint32_t old_offset = offset;
341 value = (int8_t)m_opaque_sp->GetMaxS64(&offset, 1);
342 if (offset == old_offset)
343 error.SetErrorString("unable to read data");
344 }
345 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000346 log->Printf ("SBData::GetSignedInt8 (error=%p,offset=%" PRIu64 ") => "
Enrico Granata91544802011-09-06 19:20:51 +0000347 "(%c)", error.get(), offset, value);
348 return value;
349}
350
351int16_t
Greg Clayton36da2aa2013-01-25 18:06:21 +0000352SBData::GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000353{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000354 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000355 int16_t value = 0;
356 if (!m_opaque_sp.get())
357 {
358 error.SetErrorString("no value to read from");
359 }
360 else
361 {
362 uint32_t old_offset = offset;
363 value = (int16_t)m_opaque_sp->GetMaxS64(&offset, 2);
364 if (offset == old_offset)
365 error.SetErrorString("unable to read data");
366 }
367 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000368 log->Printf ("SBData::GetSignedInt16 (error=%p,offset=%" PRIu64 ") => "
Enrico Granata91544802011-09-06 19:20:51 +0000369 "(%hd)", error.get(), offset, value);
370 return value;
371}
372
373int32_t
Greg Clayton36da2aa2013-01-25 18:06:21 +0000374SBData::GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000375{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000376 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000377 int32_t value = 0;
378 if (!m_opaque_sp.get())
379 {
380 error.SetErrorString("no value to read from");
381 }
382 else
383 {
384 uint32_t old_offset = offset;
385 value = (int32_t)m_opaque_sp->GetMaxS64(&offset, 4);
386 if (offset == old_offset)
387 error.SetErrorString("unable to read data");
388 }
389 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000390 log->Printf ("SBData::GetSignedInt32 (error=%p,offset=%" PRIu64 ") => "
Enrico Granata91544802011-09-06 19:20:51 +0000391 "(%d)", error.get(), offset, value);
392 return value;
393}
394
395int64_t
Greg Clayton36da2aa2013-01-25 18:06:21 +0000396SBData::GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000397{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000398 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000399 int64_t value = 0;
400 if (!m_opaque_sp.get())
401 {
402 error.SetErrorString("no value to read from");
403 }
404 else
405 {
406 uint32_t old_offset = offset;
407 value = (int64_t)m_opaque_sp->GetMaxS64(&offset, 8);
408 if (offset == old_offset)
409 error.SetErrorString("unable to read data");
410 }
411 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000412 log->Printf ("SBData::GetSignedInt64 (error=%p,offset=%" PRIu64 ") => "
Daniel Malea5f35a4b2012-11-29 21:49:15 +0000413 "(%" PRId64 ")", error.get(), offset, value);
Enrico Granata91544802011-09-06 19:20:51 +0000414 return value;
415}
416
417const char*
Greg Clayton36da2aa2013-01-25 18:06:21 +0000418SBData::GetString (lldb::SBError& error, lldb::offset_t offset)
Enrico Granata91544802011-09-06 19:20:51 +0000419{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000420 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000421 const char* value = 0;
422 if (!m_opaque_sp.get())
423 {
424 error.SetErrorString("no value to read from");
425 }
426 else
427 {
428 uint32_t old_offset = offset;
429 value = m_opaque_sp->GetCStr(&offset);
430 if (offset == old_offset || (value == NULL))
431 error.SetErrorString("unable to read data");
432 }
433 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000434 log->Printf ("SBData::GetString (error=%p,offset=%" PRIu64 ") => "
Enrico Granata91544802011-09-06 19:20:51 +0000435 "(%p)", error.get(), offset, value);
436 return value;
437}
438
439bool
Greg Clayton15ef51e2011-09-24 05:04:40 +0000440SBData::GetDescription (lldb::SBStream &description, lldb::addr_t base_addr)
Enrico Granata91544802011-09-06 19:20:51 +0000441{
Greg Clayton96154be2011-11-13 06:57:31 +0000442 Stream &strm = description.ref();
443
Enrico Granata91544802011-09-06 19:20:51 +0000444 if (m_opaque_sp)
445 {
Greg Clayton96154be2011-11-13 06:57:31 +0000446 m_opaque_sp->Dump (&strm,
447 0,
448 lldb::eFormatBytesWithASCII,
449 1,
450 m_opaque_sp->GetByteSize(),
451 16,
452 base_addr,
453 0,
454 0);
Enrico Granata91544802011-09-06 19:20:51 +0000455 }
456 else
Greg Clayton96154be2011-11-13 06:57:31 +0000457 strm.PutCString ("No value");
Enrico Granata91544802011-09-06 19:20:51 +0000458
459 return true;
460}
461
462size_t
463SBData::ReadRawData (lldb::SBError& error,
Greg Clayton36da2aa2013-01-25 18:06:21 +0000464 lldb::offset_t offset,
Enrico Granata91544802011-09-06 19:20:51 +0000465 void *buf,
466 size_t size)
467{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000468 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000469 void* ok = NULL;
470 if (!m_opaque_sp.get())
471 {
472 error.SetErrorString("no value to read from");
473 }
474 else
475 {
476 uint32_t old_offset = offset;
477 ok = m_opaque_sp->GetU8(&offset, buf, size);
478 if ((offset == old_offset) || (ok == NULL))
479 error.SetErrorString("unable to read data");
480 }
481 if (log)
Greg Clayton36da2aa2013-01-25 18:06:21 +0000482 log->Printf ("SBData::ReadRawData (error=%p,offset=%" PRIu64 ",buf=%p,size=%lu) => "
Enrico Granata91544802011-09-06 19:20:51 +0000483 "(%p)", error.get(), offset, buf, size, ok);
484 return ok ? size : 0;
485}
486
487void
Greg Claytona6b7e322012-01-07 00:45:50 +0000488SBData::SetData (lldb::SBError& error,
489 const void *buf,
490 size_t size,
491 lldb::ByteOrder endian,
492 uint8_t addr_size)
Enrico Granata91544802011-09-06 19:20:51 +0000493{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000494 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000495 if (!m_opaque_sp.get())
496 m_opaque_sp.reset(new DataExtractor(buf, size, endian, addr_size));
497 else
498 m_opaque_sp->SetData(buf, size, endian);
499 if (log)
Jason Molenda7e5fa7f2011-09-20 21:44:10 +0000500 log->Printf ("SBData::SetData (error=%p,buf=%p,size=%lu,endian=%d,addr_size=%c) => "
Enrico Granata91544802011-09-06 19:20:51 +0000501 "(%p)", error.get(), buf, size, endian, addr_size, m_opaque_sp.get());
502}
503
504bool
Greg Claytona6b7e322012-01-07 00:45:50 +0000505SBData::Append (const SBData& rhs)
Enrico Granata91544802011-09-06 19:20:51 +0000506{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000507 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Enrico Granata91544802011-09-06 19:20:51 +0000508 bool value = false;
509 if (m_opaque_sp.get() && rhs.m_opaque_sp.get())
510 value = m_opaque_sp.get()->Append(*rhs.m_opaque_sp);
511 if (log)
512 log->Printf ("SBData::Append (rhs=%p) => "
513 "(%s)", rhs.get(), value ? "true" : "false");
514 return value;
Greg Clayton141f8d92011-10-12 00:53:29 +0000515}
Greg Claytona6b7e322012-01-07 00:45:50 +0000516
517lldb::SBData
518SBData::CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data)
519{
520 if (!data || !data[0])
521 return SBData();
522
523 uint32_t data_len = strlen(data);
524
525 lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
526 lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
527
528 SBData ret(data_sp);
529
530 return ret;
531}
532
533lldb::SBData
534SBData::CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len)
535{
536 if (!array || array_len == 0)
537 return SBData();
538
539 size_t data_len = array_len * sizeof(uint64_t);
540
541 lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
542 lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
543
544 SBData ret(data_sp);
545
546 return ret;
547}
548
549lldb::SBData
550SBData::CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len)
551{
552 if (!array || array_len == 0)
553 return SBData();
554
555 size_t data_len = array_len * sizeof(uint32_t);
556
557 lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
558 lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
559
560 SBData ret(data_sp);
561
562 return ret;
563}
564
565lldb::SBData
566SBData::CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len)
567{
568 if (!array || array_len == 0)
569 return SBData();
570
571 size_t data_len = array_len * sizeof(int64_t);
572
573 lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
574 lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
575
576 SBData ret(data_sp);
577
578 return ret;
579}
580
581lldb::SBData
582SBData::CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len)
583{
584 if (!array || array_len == 0)
585 return SBData();
586
587 size_t data_len = array_len * sizeof(int32_t);
588
589 lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
590 lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
591
592 SBData ret(data_sp);
593
594 return ret;
595}
596
597lldb::SBData
598SBData::CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len)
599{
600 if (!array || array_len == 0)
601 return SBData();
602
603 size_t data_len = array_len * sizeof(double);
604
605 lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
606 lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
607
608 SBData ret(data_sp);
609
610 return ret;
611}
612
613bool
614SBData::SetDataFromCString (const char* data)
615{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000616 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona6b7e322012-01-07 00:45:50 +0000617
618 if (!data)
619 {
620 if (log)
621 log->Printf ("SBData::SetDataFromCString (data=%p) => "
622 "false", data);
623 return false;
624 }
625
626 size_t data_len = strlen(data);
627
628 lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
629
630 if (!m_opaque_sp.get())
631 m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
632 else
633 m_opaque_sp->SetData(buffer_sp);
634
635 if (log)
636 log->Printf ("SBData::SetDataFromCString (data=%p) => "
637 "true", data);
638
639 return true;
640}
641
642bool
643SBData::SetDataFromUInt64Array (uint64_t* array, size_t array_len)
644{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000645 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona6b7e322012-01-07 00:45:50 +0000646
647 if (!array || array_len == 0)
648 {
649 if (log)
650 log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => "
651 "false", array, array_len);
652 return false;
653 }
654
655 size_t data_len = array_len * sizeof(uint64_t);
656
657 lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
658
659 if (!m_opaque_sp.get())
660 m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
661 else
662 m_opaque_sp->SetData(buffer_sp);
663
664 if (log)
665 log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => "
666 "true", array, array_len);
667
668 return true;
669}
670
671bool
672SBData::SetDataFromUInt32Array (uint32_t* array, size_t array_len)
673{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000674 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona6b7e322012-01-07 00:45:50 +0000675
676 if (!array || array_len == 0)
677 {
678 if (log)
679 log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => "
680 "false", array, array_len);
681 return false;
682 }
683
684 size_t data_len = array_len * sizeof(uint32_t);
685
686 lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
687
688 if (!m_opaque_sp.get())
689 m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
690 else
691 m_opaque_sp->SetData(buffer_sp);
692
693 if (log)
694 log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => "
695 "true", array, array_len);
696
697 return true;
698}
699
700bool
701SBData::SetDataFromSInt64Array (int64_t* array, size_t array_len)
702{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000703 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona6b7e322012-01-07 00:45:50 +0000704
705 if (!array || array_len == 0)
706 {
707 if (log)
708 log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => "
709 "false", array, array_len);
710 return false;
711 }
712
713 size_t data_len = array_len * sizeof(int64_t);
714
715 lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
716
717 if (!m_opaque_sp.get())
718 m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
719 else
720 m_opaque_sp->SetData(buffer_sp);
721
722 if (log)
723 log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => "
724 "true", array, array_len);
725
726 return true;
727}
728
729bool
730SBData::SetDataFromSInt32Array (int32_t* array, size_t array_len)
731{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000732 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona6b7e322012-01-07 00:45:50 +0000733
734 if (!array || array_len == 0)
735 {
736 if (log)
737 log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => "
738 "false", array, array_len);
739 return false;
740 }
741
742 size_t data_len = array_len * sizeof(int32_t);
743
744 lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
745
746 if (!m_opaque_sp.get())
747 m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
748 else
749 m_opaque_sp->SetData(buffer_sp);
750
751 if (log)
752 log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => "
753 "true", array, array_len);
754
755 return true;
756}
757
758bool
759SBData::SetDataFromDoubleArray (double* array, size_t array_len)
760{
Greg Clayton952e9dc2013-03-27 23:08:40 +0000761 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Claytona6b7e322012-01-07 00:45:50 +0000762
763 if (!array || array_len == 0)
764 {
765 if (log)
766 log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => "
767 "false", array, array_len);
768 return false;
769 }
770
771 size_t data_len = array_len * sizeof(double);
772
773 lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
774
775 if (!m_opaque_sp.get())
776 m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
777 else
778 m_opaque_sp->SetData(buffer_sp);
779
780 if (log)
781 log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => "
782 "true", array, array_len);
783
784 return true;
785}