19128ee2fSEnrico Granata //===-- SBData.cpp ----------------------------------------------*- C++ -*-===//
29128ee2fSEnrico Granata //
39128ee2fSEnrico Granata //                     The LLVM Compiler Infrastructure
49128ee2fSEnrico Granata //
59128ee2fSEnrico Granata // This file is distributed under the University of Illinois Open Source
69128ee2fSEnrico Granata // License. See LICENSE.TXT for details.
79128ee2fSEnrico Granata //
89128ee2fSEnrico Granata //===----------------------------------------------------------------------===//
99128ee2fSEnrico Granata 
109128ee2fSEnrico Granata #include "lldb/API/SBData.h"
119128ee2fSEnrico Granata #include "lldb/API/SBError.h"
129128ee2fSEnrico Granata #include "lldb/API/SBStream.h"
139128ee2fSEnrico Granata 
140f28986aSGreg Clayton #include "lldb/Core/DataBufferHeap.h"
159128ee2fSEnrico Granata #include "lldb/Core/DataExtractor.h"
169128ee2fSEnrico Granata #include "lldb/Core/Log.h"
17da7bc7d0SGreg Clayton #include "lldb/Core/Stream.h"
18da7bc7d0SGreg Clayton 
199128ee2fSEnrico Granata 
209128ee2fSEnrico Granata using namespace lldb;
219128ee2fSEnrico Granata using namespace lldb_private;
229128ee2fSEnrico Granata 
230f28986aSGreg Clayton SBData::SBData () :
240f28986aSGreg Clayton     m_opaque_sp(new DataExtractor())
259128ee2fSEnrico Granata {
269128ee2fSEnrico Granata }
279128ee2fSEnrico Granata 
289128ee2fSEnrico Granata SBData::SBData (const lldb::DataExtractorSP& data_sp) :
299128ee2fSEnrico Granata     m_opaque_sp (data_sp)
309128ee2fSEnrico Granata {
319128ee2fSEnrico Granata }
329128ee2fSEnrico Granata 
339128ee2fSEnrico Granata SBData::SBData(const SBData &rhs) :
349128ee2fSEnrico Granata     m_opaque_sp (rhs.m_opaque_sp)
359128ee2fSEnrico Granata {
369128ee2fSEnrico Granata }
379128ee2fSEnrico Granata 
389128ee2fSEnrico Granata const SBData &
399128ee2fSEnrico Granata SBData::operator = (const SBData &rhs)
409128ee2fSEnrico Granata {
419128ee2fSEnrico Granata     if (this != &rhs)
429128ee2fSEnrico Granata         m_opaque_sp = rhs.m_opaque_sp;
439128ee2fSEnrico Granata     return *this;
449128ee2fSEnrico Granata }
459128ee2fSEnrico Granata 
469128ee2fSEnrico Granata SBData::~SBData ()
479128ee2fSEnrico Granata {
489128ee2fSEnrico Granata }
499128ee2fSEnrico Granata 
509128ee2fSEnrico Granata void
519128ee2fSEnrico Granata SBData::SetOpaque (const lldb::DataExtractorSP &data_sp)
529128ee2fSEnrico Granata {
539128ee2fSEnrico Granata     m_opaque_sp = data_sp;
549128ee2fSEnrico Granata }
559128ee2fSEnrico Granata 
569128ee2fSEnrico Granata lldb_private::DataExtractor *
579128ee2fSEnrico Granata SBData::get() const
589128ee2fSEnrico Granata {
599128ee2fSEnrico Granata     return m_opaque_sp.get();
609128ee2fSEnrico Granata }
619128ee2fSEnrico Granata 
629128ee2fSEnrico Granata lldb_private::DataExtractor *
639128ee2fSEnrico Granata SBData::operator->() const
649128ee2fSEnrico Granata {
659128ee2fSEnrico Granata     return m_opaque_sp.operator->();
669128ee2fSEnrico Granata }
679128ee2fSEnrico Granata 
689128ee2fSEnrico Granata lldb::DataExtractorSP &
699128ee2fSEnrico Granata SBData::operator*()
709128ee2fSEnrico Granata {
719128ee2fSEnrico Granata     return m_opaque_sp;
729128ee2fSEnrico Granata }
739128ee2fSEnrico Granata 
749128ee2fSEnrico Granata const lldb::DataExtractorSP &
759128ee2fSEnrico Granata SBData::operator*() const
769128ee2fSEnrico Granata {
779128ee2fSEnrico Granata     return m_opaque_sp;
789128ee2fSEnrico Granata }
799128ee2fSEnrico Granata 
809128ee2fSEnrico Granata bool
819128ee2fSEnrico Granata SBData::IsValid()
829128ee2fSEnrico Granata {
839128ee2fSEnrico Granata     return m_opaque_sp.get() != NULL;
849128ee2fSEnrico Granata }
859128ee2fSEnrico Granata 
869128ee2fSEnrico Granata uint8_t
879128ee2fSEnrico Granata SBData::GetAddressByteSize ()
889128ee2fSEnrico Granata {
895160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
909128ee2fSEnrico Granata     uint8_t value = 0;
919128ee2fSEnrico Granata     if (m_opaque_sp.get())
929128ee2fSEnrico Granata         value = m_opaque_sp->GetAddressByteSize();
939128ee2fSEnrico Granata     if (log)
949128ee2fSEnrico Granata         log->Printf ("SBData::GetAddressByteSize () => "
959128ee2fSEnrico Granata                      "(%i)", value);
969128ee2fSEnrico Granata     return value;
979128ee2fSEnrico Granata }
989128ee2fSEnrico Granata 
999128ee2fSEnrico Granata void
1000f28986aSGreg Clayton SBData::SetAddressByteSize (uint8_t addr_byte_size)
1010f28986aSGreg Clayton {
1025160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1030f28986aSGreg Clayton     if (m_opaque_sp.get())
1040f28986aSGreg Clayton         m_opaque_sp->SetAddressByteSize(addr_byte_size);
1050f28986aSGreg Clayton     if (log)
1060f28986aSGreg Clayton         log->Printf ("SBData::SetAddressByteSize (%i)", addr_byte_size);
1070f28986aSGreg Clayton }
1080f28986aSGreg Clayton 
1090f28986aSGreg Clayton void
1109128ee2fSEnrico Granata SBData::Clear ()
1119128ee2fSEnrico Granata {
1129128ee2fSEnrico Granata     if (m_opaque_sp.get())
1139128ee2fSEnrico Granata         m_opaque_sp->Clear();
1149128ee2fSEnrico Granata }
1159128ee2fSEnrico Granata 
1169128ee2fSEnrico Granata size_t
1179128ee2fSEnrico Granata SBData::GetByteSize ()
1189128ee2fSEnrico Granata {
1195160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1209128ee2fSEnrico Granata     size_t value = 0;
1219128ee2fSEnrico Granata     if (m_opaque_sp.get())
1229128ee2fSEnrico Granata         value = m_opaque_sp->GetByteSize();
1239128ee2fSEnrico Granata     if (log)
1249128ee2fSEnrico Granata         log->Printf ("SBData::GetByteSize () => "
1256fea17e8SGreg Clayton                      "( %" PRIu64 " )", (uint64_t)value);
1269128ee2fSEnrico Granata     return value;
1279128ee2fSEnrico Granata }
1289128ee2fSEnrico Granata 
1299128ee2fSEnrico Granata lldb::ByteOrder
1309128ee2fSEnrico Granata SBData::GetByteOrder ()
1319128ee2fSEnrico Granata {
1325160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1339128ee2fSEnrico Granata     lldb::ByteOrder value = eByteOrderInvalid;
1349128ee2fSEnrico Granata     if (m_opaque_sp.get())
1359128ee2fSEnrico Granata         value = m_opaque_sp->GetByteOrder();
1369128ee2fSEnrico Granata     if (log)
1379128ee2fSEnrico Granata         log->Printf ("SBData::GetByteOrder () => "
1389128ee2fSEnrico Granata                      "(%i)", value);
1399128ee2fSEnrico Granata     return value;
1409128ee2fSEnrico Granata }
1419128ee2fSEnrico Granata 
1420f28986aSGreg Clayton void
1430f28986aSGreg Clayton SBData::SetByteOrder (lldb::ByteOrder endian)
1440f28986aSGreg Clayton {
1455160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1460f28986aSGreg Clayton     if (m_opaque_sp.get())
1470f28986aSGreg Clayton         m_opaque_sp->SetByteOrder(endian);
1480f28986aSGreg Clayton     if (log)
1490f28986aSGreg Clayton         log->Printf ("SBData::GetByteOrder (%i)", endian);
1500f28986aSGreg Clayton }
1510f28986aSGreg Clayton 
1520f28986aSGreg Clayton 
1539128ee2fSEnrico Granata float
154c7bece56SGreg Clayton SBData::GetFloat (lldb::SBError& error, lldb::offset_t offset)
1559128ee2fSEnrico Granata {
1565160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1579128ee2fSEnrico Granata     float value = 0;
1589128ee2fSEnrico Granata     if (!m_opaque_sp.get())
1599128ee2fSEnrico Granata     {
1609128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
1619128ee2fSEnrico Granata     }
1629128ee2fSEnrico Granata     else
1639128ee2fSEnrico Granata     {
1649128ee2fSEnrico Granata         uint32_t old_offset = offset;
1659128ee2fSEnrico Granata         value = m_opaque_sp->GetFloat(&offset);
1669128ee2fSEnrico Granata         if (offset == old_offset)
1679128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
1689128ee2fSEnrico Granata     }
1699128ee2fSEnrico Granata     if (log)
170*324a1036SSaleem Abdulrasool         log->Printf ("SBData::GetFloat (error=%p,offset=%" PRIu64 ") => (%f)",
171*324a1036SSaleem Abdulrasool                      static_cast<void*>(error.get()), offset, value);
1729128ee2fSEnrico Granata     return value;
1739128ee2fSEnrico Granata }
1749128ee2fSEnrico Granata 
1759128ee2fSEnrico Granata double
176c7bece56SGreg Clayton SBData::GetDouble (lldb::SBError& error, lldb::offset_t offset)
1779128ee2fSEnrico Granata {
1785160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1799128ee2fSEnrico Granata     double value = 0;
1809128ee2fSEnrico Granata     if (!m_opaque_sp.get())
1819128ee2fSEnrico Granata     {
1829128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
1839128ee2fSEnrico Granata     }
1849128ee2fSEnrico Granata     else
1859128ee2fSEnrico Granata     {
1869128ee2fSEnrico Granata         uint32_t old_offset = offset;
1879128ee2fSEnrico Granata         value = m_opaque_sp->GetDouble(&offset);
1889128ee2fSEnrico Granata         if (offset == old_offset)
1899128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
1909128ee2fSEnrico Granata     }
1919128ee2fSEnrico Granata     if (log)
192c7bece56SGreg Clayton         log->Printf ("SBData::GetDouble (error=%p,offset=%" PRIu64 ") => "
193*324a1036SSaleem Abdulrasool                      "(%f)", static_cast<void*>(error.get()), offset, value);
1949128ee2fSEnrico Granata     return value;
1959128ee2fSEnrico Granata }
1969128ee2fSEnrico Granata 
1979128ee2fSEnrico Granata long double
198c7bece56SGreg Clayton SBData::GetLongDouble (lldb::SBError& error, lldb::offset_t offset)
1999128ee2fSEnrico Granata {
2005160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2019128ee2fSEnrico Granata     long double value = 0;
2029128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2039128ee2fSEnrico Granata     {
2049128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2059128ee2fSEnrico Granata     }
2069128ee2fSEnrico Granata     else
2079128ee2fSEnrico Granata     {
2089128ee2fSEnrico Granata         uint32_t old_offset = offset;
2099128ee2fSEnrico Granata         value = m_opaque_sp->GetLongDouble(&offset);
2109128ee2fSEnrico Granata         if (offset == old_offset)
2119128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2129128ee2fSEnrico Granata     }
2139128ee2fSEnrico Granata     if (log)
214c7bece56SGreg Clayton         log->Printf ("SBData::GetLongDouble (error=%p,offset=%" PRIu64 ") => "
215*324a1036SSaleem Abdulrasool                      "(%Lf)", static_cast<void*>(error.get()), offset, value);
2169128ee2fSEnrico Granata     return value;
2179128ee2fSEnrico Granata }
2189128ee2fSEnrico Granata 
2199128ee2fSEnrico Granata lldb::addr_t
220c7bece56SGreg Clayton SBData::GetAddress (lldb::SBError& error, lldb::offset_t offset)
2219128ee2fSEnrico Granata {
2225160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2239128ee2fSEnrico Granata     lldb::addr_t value = 0;
2249128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2259128ee2fSEnrico Granata     {
2269128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2279128ee2fSEnrico Granata     }
2289128ee2fSEnrico Granata     else
2299128ee2fSEnrico Granata     {
2309128ee2fSEnrico Granata         uint32_t old_offset = offset;
2319128ee2fSEnrico Granata         value = m_opaque_sp->GetAddress(&offset);
2329128ee2fSEnrico Granata         if (offset == old_offset)
2339128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2349128ee2fSEnrico Granata     }
2359128ee2fSEnrico Granata     if (log)
236c7bece56SGreg Clayton         log->Printf ("SBData::GetAddress (error=%p,offset=%" PRIu64 ") => "
237*324a1036SSaleem Abdulrasool                      "(%p)", static_cast<void*>(error.get()), offset,
238*324a1036SSaleem Abdulrasool                      reinterpret_cast<void*>(value));
2399128ee2fSEnrico Granata     return value;
2409128ee2fSEnrico Granata }
2419128ee2fSEnrico Granata 
2429128ee2fSEnrico Granata uint8_t
243c7bece56SGreg Clayton SBData::GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset)
2449128ee2fSEnrico Granata {
2455160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2469128ee2fSEnrico Granata     uint8_t value = 0;
2479128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2489128ee2fSEnrico Granata     {
2499128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2509128ee2fSEnrico Granata     }
2519128ee2fSEnrico Granata     else
2529128ee2fSEnrico Granata     {
2539128ee2fSEnrico Granata         uint32_t old_offset = offset;
2549128ee2fSEnrico Granata         value = m_opaque_sp->GetU8(&offset);
2559128ee2fSEnrico Granata         if (offset == old_offset)
2569128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2579128ee2fSEnrico Granata     }
2589128ee2fSEnrico Granata     if (log)
259c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt8 (error=%p,offset=%" PRIu64 ") => "
260*324a1036SSaleem Abdulrasool                      "(%c)", static_cast<void*>(error.get()), offset, value);
2619128ee2fSEnrico Granata     return value;
2629128ee2fSEnrico Granata }
2639128ee2fSEnrico Granata 
2649128ee2fSEnrico Granata uint16_t
265c7bece56SGreg Clayton SBData::GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset)
2669128ee2fSEnrico Granata {
2675160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2689128ee2fSEnrico Granata     uint16_t value = 0;
2699128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2709128ee2fSEnrico Granata     {
2719128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2729128ee2fSEnrico Granata     }
2739128ee2fSEnrico Granata     else
2749128ee2fSEnrico Granata     {
2759128ee2fSEnrico Granata         uint32_t old_offset = offset;
2769128ee2fSEnrico Granata         value = m_opaque_sp->GetU16(&offset);
2779128ee2fSEnrico Granata         if (offset == old_offset)
2789128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2799128ee2fSEnrico Granata     }
2809128ee2fSEnrico Granata     if (log)
281c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt16 (error=%p,offset=%" PRIu64 ") => "
282*324a1036SSaleem Abdulrasool                      "(%hd)", static_cast<void*>(error.get()), offset, value);
2839128ee2fSEnrico Granata     return value;
2849128ee2fSEnrico Granata }
2859128ee2fSEnrico Granata 
2869128ee2fSEnrico Granata uint32_t
287c7bece56SGreg Clayton SBData::GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset)
2889128ee2fSEnrico Granata {
2895160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2909128ee2fSEnrico Granata     uint32_t value = 0;
2919128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2929128ee2fSEnrico Granata     {
2939128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2949128ee2fSEnrico Granata     }
2959128ee2fSEnrico Granata     else
2969128ee2fSEnrico Granata     {
2979128ee2fSEnrico Granata         uint32_t old_offset = offset;
2989128ee2fSEnrico Granata         value = m_opaque_sp->GetU32(&offset);
2999128ee2fSEnrico Granata         if (offset == old_offset)
3009128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3019128ee2fSEnrico Granata     }
3029128ee2fSEnrico Granata     if (log)
303c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt32 (error=%p,offset=%" PRIu64 ") => "
304*324a1036SSaleem Abdulrasool                      "(%d)", static_cast<void*>(error.get()), offset, value);
3059128ee2fSEnrico Granata     return value;
3069128ee2fSEnrico Granata }
3079128ee2fSEnrico Granata 
3089128ee2fSEnrico Granata uint64_t
309c7bece56SGreg Clayton SBData::GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset)
3109128ee2fSEnrico Granata {
3115160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3129128ee2fSEnrico Granata     uint64_t value = 0;
3139128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3149128ee2fSEnrico Granata     {
3159128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3169128ee2fSEnrico Granata     }
3179128ee2fSEnrico Granata     else
3189128ee2fSEnrico Granata     {
3199128ee2fSEnrico Granata         uint32_t old_offset = offset;
3209128ee2fSEnrico Granata         value = m_opaque_sp->GetU64(&offset);
3219128ee2fSEnrico Granata         if (offset == old_offset)
3229128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3239128ee2fSEnrico Granata     }
3249128ee2fSEnrico Granata     if (log)
325c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt64 (error=%p,offset=%" PRIu64 ") => "
326*324a1036SSaleem Abdulrasool                      "(%" PRId64 ")", static_cast<void*>(error.get()), offset,
327*324a1036SSaleem Abdulrasool                      value);
3289128ee2fSEnrico Granata     return value;
3299128ee2fSEnrico Granata }
3309128ee2fSEnrico Granata 
3319128ee2fSEnrico Granata int8_t
332c7bece56SGreg Clayton SBData::GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset)
3339128ee2fSEnrico Granata {
3345160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3359128ee2fSEnrico Granata     int8_t value = 0;
3369128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3379128ee2fSEnrico Granata     {
3389128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3399128ee2fSEnrico Granata     }
3409128ee2fSEnrico Granata     else
3419128ee2fSEnrico Granata     {
3429128ee2fSEnrico Granata         uint32_t old_offset = offset;
3439128ee2fSEnrico Granata         value = (int8_t)m_opaque_sp->GetMaxS64(&offset, 1);
3449128ee2fSEnrico Granata         if (offset == old_offset)
3459128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3469128ee2fSEnrico Granata     }
3479128ee2fSEnrico Granata     if (log)
348c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt8 (error=%p,offset=%" PRIu64 ") => "
349*324a1036SSaleem Abdulrasool                      "(%c)", static_cast<void*>(error.get()), offset, value);
3509128ee2fSEnrico Granata     return value;
3519128ee2fSEnrico Granata }
3529128ee2fSEnrico Granata 
3539128ee2fSEnrico Granata int16_t
354c7bece56SGreg Clayton SBData::GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset)
3559128ee2fSEnrico Granata {
3565160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3579128ee2fSEnrico Granata     int16_t value = 0;
3589128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3599128ee2fSEnrico Granata     {
3609128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3619128ee2fSEnrico Granata     }
3629128ee2fSEnrico Granata     else
3639128ee2fSEnrico Granata     {
3649128ee2fSEnrico Granata         uint32_t old_offset = offset;
3659128ee2fSEnrico Granata         value = (int16_t)m_opaque_sp->GetMaxS64(&offset, 2);
3669128ee2fSEnrico Granata         if (offset == old_offset)
3679128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3689128ee2fSEnrico Granata     }
3699128ee2fSEnrico Granata     if (log)
370c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt16 (error=%p,offset=%" PRIu64 ") => "
371*324a1036SSaleem Abdulrasool                      "(%hd)", static_cast<void*>(error.get()), offset, value);
3729128ee2fSEnrico Granata     return value;
3739128ee2fSEnrico Granata }
3749128ee2fSEnrico Granata 
3759128ee2fSEnrico Granata int32_t
376c7bece56SGreg Clayton SBData::GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset)
3779128ee2fSEnrico Granata {
3785160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3799128ee2fSEnrico Granata     int32_t value = 0;
3809128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3819128ee2fSEnrico Granata     {
3829128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3839128ee2fSEnrico Granata     }
3849128ee2fSEnrico Granata     else
3859128ee2fSEnrico Granata     {
3869128ee2fSEnrico Granata         uint32_t old_offset = offset;
3879128ee2fSEnrico Granata         value = (int32_t)m_opaque_sp->GetMaxS64(&offset, 4);
3889128ee2fSEnrico Granata         if (offset == old_offset)
3899128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3909128ee2fSEnrico Granata     }
3919128ee2fSEnrico Granata     if (log)
392c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt32 (error=%p,offset=%" PRIu64 ") => "
393*324a1036SSaleem Abdulrasool                      "(%d)", static_cast<void*>(error.get()), offset, value);
3949128ee2fSEnrico Granata     return value;
3959128ee2fSEnrico Granata }
3969128ee2fSEnrico Granata 
3979128ee2fSEnrico Granata int64_t
398c7bece56SGreg Clayton SBData::GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset)
3999128ee2fSEnrico Granata {
4005160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4019128ee2fSEnrico Granata     int64_t value = 0;
4029128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4039128ee2fSEnrico Granata     {
4049128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4059128ee2fSEnrico Granata     }
4069128ee2fSEnrico Granata     else
4079128ee2fSEnrico Granata     {
4089128ee2fSEnrico Granata         uint32_t old_offset = offset;
4099128ee2fSEnrico Granata         value = (int64_t)m_opaque_sp->GetMaxS64(&offset, 8);
4109128ee2fSEnrico Granata         if (offset == old_offset)
4119128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4129128ee2fSEnrico Granata     }
4139128ee2fSEnrico Granata     if (log)
414c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt64 (error=%p,offset=%" PRIu64 ") => "
415*324a1036SSaleem Abdulrasool                      "(%" PRId64 ")", static_cast<void*>(error.get()), offset,
416*324a1036SSaleem Abdulrasool                      value);
4179128ee2fSEnrico Granata     return value;
4189128ee2fSEnrico Granata }
4199128ee2fSEnrico Granata 
4209128ee2fSEnrico Granata const char*
421c7bece56SGreg Clayton SBData::GetString (lldb::SBError& error, lldb::offset_t offset)
4229128ee2fSEnrico Granata {
4235160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4249128ee2fSEnrico Granata     const char* value = 0;
4259128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4269128ee2fSEnrico Granata     {
4279128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4289128ee2fSEnrico Granata     }
4299128ee2fSEnrico Granata     else
4309128ee2fSEnrico Granata     {
4319128ee2fSEnrico Granata         uint32_t old_offset = offset;
4329128ee2fSEnrico Granata         value = m_opaque_sp->GetCStr(&offset);
4339128ee2fSEnrico Granata         if (offset == old_offset || (value == NULL))
4349128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4359128ee2fSEnrico Granata     }
4369128ee2fSEnrico Granata     if (log)
437*324a1036SSaleem Abdulrasool         log->Printf ("SBData::GetString (error=%p,offset=%" PRIu64 ") => (%p)",
438*324a1036SSaleem Abdulrasool                      static_cast<void*>(error.get()), offset,
439*324a1036SSaleem Abdulrasool                      static_cast<const void*>(value));
4409128ee2fSEnrico Granata     return value;
4419128ee2fSEnrico Granata }
4429128ee2fSEnrico Granata 
4439128ee2fSEnrico Granata bool
444d9dc52dcSGreg Clayton SBData::GetDescription (lldb::SBStream &description, lldb::addr_t base_addr)
4459128ee2fSEnrico Granata {
446da7bc7d0SGreg Clayton     Stream &strm = description.ref();
447da7bc7d0SGreg Clayton 
4489128ee2fSEnrico Granata     if (m_opaque_sp)
4499128ee2fSEnrico Granata     {
450da7bc7d0SGreg Clayton         m_opaque_sp->Dump (&strm,
4519128ee2fSEnrico Granata                            0,
4529128ee2fSEnrico Granata                            lldb::eFormatBytesWithASCII,
4539128ee2fSEnrico Granata                            1,
4549128ee2fSEnrico Granata                            m_opaque_sp->GetByteSize(),
4559128ee2fSEnrico Granata                            16,
456d9dc52dcSGreg Clayton                            base_addr,
4579128ee2fSEnrico Granata                            0,
4589128ee2fSEnrico Granata                            0);
4599128ee2fSEnrico Granata     }
4609128ee2fSEnrico Granata     else
461da7bc7d0SGreg Clayton         strm.PutCString ("No value");
4629128ee2fSEnrico Granata 
4639128ee2fSEnrico Granata     return true;
4649128ee2fSEnrico Granata }
4659128ee2fSEnrico Granata 
4669128ee2fSEnrico Granata size_t
4679128ee2fSEnrico Granata SBData::ReadRawData (lldb::SBError& error,
468c7bece56SGreg Clayton                      lldb::offset_t offset,
4699128ee2fSEnrico Granata                      void *buf,
4709128ee2fSEnrico Granata                      size_t size)
4719128ee2fSEnrico Granata {
4725160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4739128ee2fSEnrico Granata     void* ok = NULL;
4749128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4759128ee2fSEnrico Granata     {
4769128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4779128ee2fSEnrico Granata     }
4789128ee2fSEnrico Granata     else
4799128ee2fSEnrico Granata     {
4809128ee2fSEnrico Granata         uint32_t old_offset = offset;
4819128ee2fSEnrico Granata         ok = m_opaque_sp->GetU8(&offset, buf, size);
4829128ee2fSEnrico Granata         if ((offset == old_offset) || (ok == NULL))
4839128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4849128ee2fSEnrico Granata     }
4859128ee2fSEnrico Granata     if (log)
4866fea17e8SGreg Clayton         log->Printf("SBData::ReadRawData (error=%p,offset=%" PRIu64 ",buf=%p,size=%" PRIu64 ") => "
487*324a1036SSaleem Abdulrasool                     "(%p)", static_cast<void*>(error.get()), offset,
488*324a1036SSaleem Abdulrasool                     static_cast<void*>(buf), static_cast<uint64_t>(size),
489*324a1036SSaleem Abdulrasool                     static_cast<void*>(ok));
4909128ee2fSEnrico Granata     return ok ? size : 0;
4919128ee2fSEnrico Granata }
4929128ee2fSEnrico Granata 
4939128ee2fSEnrico Granata void
4949128ee2fSEnrico Granata SBData::SetData (lldb::SBError& error,
4959128ee2fSEnrico Granata                  const void *buf,
4969128ee2fSEnrico Granata                  size_t size,
4979128ee2fSEnrico Granata                  lldb::ByteOrder endian,
4989128ee2fSEnrico Granata                  uint8_t addr_size)
4999128ee2fSEnrico Granata {
5005160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
5019128ee2fSEnrico Granata     if (!m_opaque_sp.get())
5029128ee2fSEnrico Granata         m_opaque_sp.reset(new DataExtractor(buf, size, endian, addr_size));
5039128ee2fSEnrico Granata     else
5049128ee2fSEnrico Granata         m_opaque_sp->SetData(buf, size, endian);
5059128ee2fSEnrico Granata     if (log)
5066fea17e8SGreg Clayton         log->Printf("SBData::SetData (error=%p,buf=%p,size=%" PRIu64 ",endian=%d,addr_size=%c) => "
507*324a1036SSaleem Abdulrasool                     "(%p)", static_cast<void*>(error.get()),
508*324a1036SSaleem Abdulrasool                     static_cast<const void*>(buf), static_cast<uint64_t>(size),
509*324a1036SSaleem Abdulrasool                     endian, addr_size, static_cast<void*>(m_opaque_sp.get()));
5109128ee2fSEnrico Granata }
5119128ee2fSEnrico Granata 
5129128ee2fSEnrico Granata bool
5139128ee2fSEnrico Granata SBData::Append (const SBData& rhs)
5149128ee2fSEnrico Granata {
5155160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
5169128ee2fSEnrico Granata     bool value = false;
5179128ee2fSEnrico Granata     if (m_opaque_sp.get() && rhs.m_opaque_sp.get())
5189128ee2fSEnrico Granata         value = m_opaque_sp.get()->Append(*rhs.m_opaque_sp);
5199128ee2fSEnrico Granata     if (log)
520*324a1036SSaleem Abdulrasool         log->Printf ("SBData::Append (rhs=%p) => (%s)",
521*324a1036SSaleem Abdulrasool                      static_cast<void*>(rhs.get()), value ? "true" : "false");
5229128ee2fSEnrico Granata     return value;
5239128ee2fSEnrico Granata }
5240f28986aSGreg Clayton 
5250f28986aSGreg Clayton lldb::SBData
5260f28986aSGreg Clayton SBData::CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data)
5270f28986aSGreg Clayton {
5280f28986aSGreg Clayton     if (!data || !data[0])
5290f28986aSGreg Clayton         return SBData();
5300f28986aSGreg Clayton 
5310f28986aSGreg Clayton     uint32_t data_len = strlen(data);
5320f28986aSGreg Clayton 
5330f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
5340f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5350f28986aSGreg Clayton 
5360f28986aSGreg Clayton     SBData ret(data_sp);
5370f28986aSGreg Clayton 
5380f28986aSGreg Clayton     return ret;
5390f28986aSGreg Clayton }
5400f28986aSGreg Clayton 
5410f28986aSGreg Clayton lldb::SBData
5420f28986aSGreg Clayton SBData::CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len)
5430f28986aSGreg Clayton {
5440f28986aSGreg Clayton     if (!array || array_len == 0)
5450f28986aSGreg Clayton         return SBData();
5460f28986aSGreg Clayton 
5470f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint64_t);
5480f28986aSGreg Clayton 
5490f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5500f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5510f28986aSGreg Clayton 
5520f28986aSGreg Clayton     SBData ret(data_sp);
5530f28986aSGreg Clayton 
5540f28986aSGreg Clayton     return ret;
5550f28986aSGreg Clayton }
5560f28986aSGreg Clayton 
5570f28986aSGreg Clayton lldb::SBData
5580f28986aSGreg Clayton SBData::CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len)
5590f28986aSGreg Clayton {
5600f28986aSGreg Clayton     if (!array || array_len == 0)
5610f28986aSGreg Clayton         return SBData();
5620f28986aSGreg Clayton 
5630f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint32_t);
5640f28986aSGreg Clayton 
5650f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5660f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5670f28986aSGreg Clayton 
5680f28986aSGreg Clayton     SBData ret(data_sp);
5690f28986aSGreg Clayton 
5700f28986aSGreg Clayton     return ret;
5710f28986aSGreg Clayton }
5720f28986aSGreg Clayton 
5730f28986aSGreg Clayton lldb::SBData
5740f28986aSGreg Clayton SBData::CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len)
5750f28986aSGreg Clayton {
5760f28986aSGreg Clayton     if (!array || array_len == 0)
5770f28986aSGreg Clayton         return SBData();
5780f28986aSGreg Clayton 
5790f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int64_t);
5800f28986aSGreg Clayton 
5810f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5820f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5830f28986aSGreg Clayton 
5840f28986aSGreg Clayton     SBData ret(data_sp);
5850f28986aSGreg Clayton 
5860f28986aSGreg Clayton     return ret;
5870f28986aSGreg Clayton }
5880f28986aSGreg Clayton 
5890f28986aSGreg Clayton lldb::SBData
5900f28986aSGreg Clayton SBData::CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len)
5910f28986aSGreg Clayton {
5920f28986aSGreg Clayton     if (!array || array_len == 0)
5930f28986aSGreg Clayton         return SBData();
5940f28986aSGreg Clayton 
5950f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int32_t);
5960f28986aSGreg Clayton 
5970f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5980f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5990f28986aSGreg Clayton 
6000f28986aSGreg Clayton     SBData ret(data_sp);
6010f28986aSGreg Clayton 
6020f28986aSGreg Clayton     return ret;
6030f28986aSGreg Clayton }
6040f28986aSGreg Clayton 
6050f28986aSGreg Clayton lldb::SBData
6060f28986aSGreg Clayton SBData::CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len)
6070f28986aSGreg Clayton {
6080f28986aSGreg Clayton     if (!array || array_len == 0)
6090f28986aSGreg Clayton         return SBData();
6100f28986aSGreg Clayton 
6110f28986aSGreg Clayton     size_t data_len = array_len * sizeof(double);
6120f28986aSGreg Clayton 
6130f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6140f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
6150f28986aSGreg Clayton 
6160f28986aSGreg Clayton     SBData ret(data_sp);
6170f28986aSGreg Clayton 
6180f28986aSGreg Clayton     return ret;
6190f28986aSGreg Clayton }
6200f28986aSGreg Clayton 
6210f28986aSGreg Clayton bool
6220f28986aSGreg Clayton SBData::SetDataFromCString (const char* data)
6230f28986aSGreg Clayton {
6245160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6250f28986aSGreg Clayton 
6260f28986aSGreg Clayton     if (!data)
6270f28986aSGreg Clayton     {
6280f28986aSGreg Clayton         if (log)
629*324a1036SSaleem Abdulrasool             log->Printf ("SBData::SetDataFromCString (data=%p) => false",
630*324a1036SSaleem Abdulrasool                          static_cast<const void*>(data));
6310f28986aSGreg Clayton         return false;
6320f28986aSGreg Clayton     }
6330f28986aSGreg Clayton 
6340f28986aSGreg Clayton     size_t data_len = strlen(data);
6350f28986aSGreg Clayton 
6360f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
6370f28986aSGreg Clayton 
6380f28986aSGreg Clayton     if (!m_opaque_sp.get())
6390f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
6400f28986aSGreg Clayton     else
6410f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
6420f28986aSGreg Clayton 
6430f28986aSGreg Clayton     if (log)
644*324a1036SSaleem Abdulrasool         log->Printf ("SBData::SetDataFromCString (data=%p) => true",
645*324a1036SSaleem Abdulrasool                      static_cast<const void*>(data));
6460f28986aSGreg Clayton 
6470f28986aSGreg Clayton     return true;
6480f28986aSGreg Clayton }
6490f28986aSGreg Clayton 
6500f28986aSGreg Clayton bool
6510f28986aSGreg Clayton SBData::SetDataFromUInt64Array (uint64_t* array, size_t array_len)
6520f28986aSGreg Clayton {
6535160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6540f28986aSGreg Clayton 
6550f28986aSGreg Clayton     if (!array || array_len == 0)
6560f28986aSGreg Clayton     {
6570f28986aSGreg Clayton         if (log)
6586fea17e8SGreg Clayton             log->Printf("SBData::SetDataFromUInt64Array (array=%p, array_len = %" PRIu64 ") => "
659*324a1036SSaleem Abdulrasool                         "false", static_cast<void*>(array),
660*324a1036SSaleem Abdulrasool                         static_cast<uint64_t>(array_len));
6610f28986aSGreg Clayton         return false;
6620f28986aSGreg Clayton     }
6630f28986aSGreg Clayton 
6640f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint64_t);
6650f28986aSGreg Clayton 
6660f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6670f28986aSGreg Clayton 
6680f28986aSGreg Clayton     if (!m_opaque_sp.get())
6690f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
6700f28986aSGreg Clayton     else
6710f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
6720f28986aSGreg Clayton 
6730f28986aSGreg Clayton     if (log)
6746fea17e8SGreg Clayton         log->Printf("SBData::SetDataFromUInt64Array (array=%p, array_len = %" PRIu64 ") => "
675*324a1036SSaleem Abdulrasool                     "true", static_cast<void*>(array),
676*324a1036SSaleem Abdulrasool                     static_cast<uint64_t>(array_len));
6770f28986aSGreg Clayton 
6780f28986aSGreg Clayton     return true;
6790f28986aSGreg Clayton }
6800f28986aSGreg Clayton 
6810f28986aSGreg Clayton bool
6820f28986aSGreg Clayton SBData::SetDataFromUInt32Array (uint32_t* array, size_t array_len)
6830f28986aSGreg Clayton {
6845160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6850f28986aSGreg Clayton 
6860f28986aSGreg Clayton     if (!array || array_len == 0)
6870f28986aSGreg Clayton     {
6880f28986aSGreg Clayton         if (log)
6896fea17e8SGreg Clayton             log->Printf("SBData::SetDataFromUInt32Array (array=%p, array_len = %" PRIu64 ") => "
690*324a1036SSaleem Abdulrasool                         "false", static_cast<void*>(array),
691*324a1036SSaleem Abdulrasool                         static_cast<uint64_t>(array_len));
6920f28986aSGreg Clayton         return false;
6930f28986aSGreg Clayton     }
6940f28986aSGreg Clayton 
6950f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint32_t);
6960f28986aSGreg Clayton 
6970f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6980f28986aSGreg Clayton 
6990f28986aSGreg Clayton     if (!m_opaque_sp.get())
7000f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7010f28986aSGreg Clayton     else
7020f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7030f28986aSGreg Clayton 
7040f28986aSGreg Clayton     if (log)
7056fea17e8SGreg Clayton         log->Printf("SBData::SetDataFromUInt32Array (array=%p, array_len = %" PRIu64 ") => "
706*324a1036SSaleem Abdulrasool                     "true", static_cast<void*>(array),
707*324a1036SSaleem Abdulrasool                     static_cast<uint64_t>(array_len));
7080f28986aSGreg Clayton 
7090f28986aSGreg Clayton     return true;
7100f28986aSGreg Clayton }
7110f28986aSGreg Clayton 
7120f28986aSGreg Clayton bool
7130f28986aSGreg Clayton SBData::SetDataFromSInt64Array (int64_t* array, size_t array_len)
7140f28986aSGreg Clayton {
7155160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
7160f28986aSGreg Clayton 
7170f28986aSGreg Clayton     if (!array || array_len == 0)
7180f28986aSGreg Clayton     {
7190f28986aSGreg Clayton         if (log)
7206fea17e8SGreg Clayton             log->Printf("SBData::SetDataFromSInt64Array (array=%p, array_len = %" PRIu64 ") => "
721*324a1036SSaleem Abdulrasool                         "false", static_cast<void*>(array),
722*324a1036SSaleem Abdulrasool                         static_cast<uint64_t>(array_len));
7230f28986aSGreg Clayton         return false;
7240f28986aSGreg Clayton     }
7250f28986aSGreg Clayton 
7260f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int64_t);
7270f28986aSGreg Clayton 
7280f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7290f28986aSGreg Clayton 
7300f28986aSGreg Clayton     if (!m_opaque_sp.get())
7310f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7320f28986aSGreg Clayton     else
7330f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7340f28986aSGreg Clayton 
7350f28986aSGreg Clayton     if (log)
7366fea17e8SGreg Clayton         log->Printf("SBData::SetDataFromSInt64Array (array=%p, array_len = %" PRIu64 ") => "
737*324a1036SSaleem Abdulrasool                      "true", static_cast<void*>(array),
738*324a1036SSaleem Abdulrasool                      static_cast<uint64_t>(array_len));
7390f28986aSGreg Clayton 
7400f28986aSGreg Clayton     return true;
7410f28986aSGreg Clayton }
7420f28986aSGreg Clayton 
7430f28986aSGreg Clayton bool
7440f28986aSGreg Clayton SBData::SetDataFromSInt32Array (int32_t* array, size_t array_len)
7450f28986aSGreg Clayton {
7465160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
7470f28986aSGreg Clayton 
7480f28986aSGreg Clayton     if (!array || array_len == 0)
7490f28986aSGreg Clayton     {
7500f28986aSGreg Clayton         if (log)
7516fea17e8SGreg Clayton             log->Printf("SBData::SetDataFromSInt32Array (array=%p, array_len = %" PRIu64 ") => "
752*324a1036SSaleem Abdulrasool                         "false", static_cast<void*>(array),
753*324a1036SSaleem Abdulrasool                         static_cast<uint64_t>(array_len));
7540f28986aSGreg Clayton         return false;
7550f28986aSGreg Clayton     }
7560f28986aSGreg Clayton 
7570f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int32_t);
7580f28986aSGreg Clayton 
7590f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7600f28986aSGreg Clayton 
7610f28986aSGreg Clayton     if (!m_opaque_sp.get())
7620f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7630f28986aSGreg Clayton     else
7640f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7650f28986aSGreg Clayton 
7660f28986aSGreg Clayton     if (log)
7676fea17e8SGreg Clayton         log->Printf("SBData::SetDataFromSInt32Array (array=%p, array_len = %" PRIu64 ") => "
768*324a1036SSaleem Abdulrasool                     "true", static_cast<void*>(array),
769*324a1036SSaleem Abdulrasool                     static_cast<uint64_t>(array_len));
7700f28986aSGreg Clayton 
7710f28986aSGreg Clayton     return true;
7720f28986aSGreg Clayton }
7730f28986aSGreg Clayton 
7740f28986aSGreg Clayton bool
7750f28986aSGreg Clayton SBData::SetDataFromDoubleArray (double* array, size_t array_len)
7760f28986aSGreg Clayton {
7775160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
7780f28986aSGreg Clayton 
7790f28986aSGreg Clayton     if (!array || array_len == 0)
7800f28986aSGreg Clayton     {
7810f28986aSGreg Clayton         if (log)
7826fea17e8SGreg Clayton             log->Printf("SBData::SetDataFromDoubleArray (array=%p, array_len = %" PRIu64 ") => "
783*324a1036SSaleem Abdulrasool                         "false", static_cast<void*>(array),
784*324a1036SSaleem Abdulrasool                         static_cast<uint64_t>(array_len));
7850f28986aSGreg Clayton         return false;
7860f28986aSGreg Clayton     }
7870f28986aSGreg Clayton 
7880f28986aSGreg Clayton     size_t data_len = array_len * sizeof(double);
7890f28986aSGreg Clayton 
7900f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7910f28986aSGreg Clayton 
7920f28986aSGreg Clayton     if (!m_opaque_sp.get())
7930f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7940f28986aSGreg Clayton     else
7950f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7960f28986aSGreg Clayton 
7970f28986aSGreg Clayton     if (log)
7986fea17e8SGreg Clayton         log->Printf("SBData::SetDataFromDoubleArray (array=%p, array_len = %" PRIu64 ") => "
799*324a1036SSaleem Abdulrasool                     "true", static_cast<void*>(array),
800*324a1036SSaleem Abdulrasool                     static_cast<uint64_t>(array_len));
8010f28986aSGreg Clayton 
8020f28986aSGreg Clayton     return true;
8030f28986aSGreg Clayton }
804