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 
10*af90cf52SSean Callanan #include <inttypes.h> // PRIu64
11*af90cf52SSean Callanan 
129128ee2fSEnrico Granata #include "lldb/API/SBData.h"
139128ee2fSEnrico Granata #include "lldb/API/SBError.h"
149128ee2fSEnrico Granata #include "lldb/API/SBStream.h"
159128ee2fSEnrico Granata 
160f28986aSGreg Clayton #include "lldb/Core/DataBufferHeap.h"
179128ee2fSEnrico Granata #include "lldb/Core/DataExtractor.h"
189128ee2fSEnrico Granata #include "lldb/Core/Log.h"
19da7bc7d0SGreg Clayton #include "lldb/Core/Stream.h"
20da7bc7d0SGreg Clayton 
219128ee2fSEnrico Granata 
229128ee2fSEnrico Granata using namespace lldb;
239128ee2fSEnrico Granata using namespace lldb_private;
249128ee2fSEnrico Granata 
250f28986aSGreg Clayton SBData::SBData () :
260f28986aSGreg Clayton     m_opaque_sp(new DataExtractor())
279128ee2fSEnrico Granata {
289128ee2fSEnrico Granata }
299128ee2fSEnrico Granata 
309128ee2fSEnrico Granata SBData::SBData (const lldb::DataExtractorSP& data_sp) :
319128ee2fSEnrico Granata     m_opaque_sp (data_sp)
329128ee2fSEnrico Granata {
339128ee2fSEnrico Granata }
349128ee2fSEnrico Granata 
359128ee2fSEnrico Granata SBData::SBData(const SBData &rhs) :
369128ee2fSEnrico Granata     m_opaque_sp (rhs.m_opaque_sp)
379128ee2fSEnrico Granata {
389128ee2fSEnrico Granata }
399128ee2fSEnrico Granata 
409128ee2fSEnrico Granata const SBData &
419128ee2fSEnrico Granata SBData::operator = (const SBData &rhs)
429128ee2fSEnrico Granata {
439128ee2fSEnrico Granata     if (this != &rhs)
449128ee2fSEnrico Granata         m_opaque_sp = rhs.m_opaque_sp;
459128ee2fSEnrico Granata     return *this;
469128ee2fSEnrico Granata }
479128ee2fSEnrico Granata 
489128ee2fSEnrico Granata SBData::~SBData ()
499128ee2fSEnrico Granata {
509128ee2fSEnrico Granata }
519128ee2fSEnrico Granata 
529128ee2fSEnrico Granata void
539128ee2fSEnrico Granata SBData::SetOpaque (const lldb::DataExtractorSP &data_sp)
549128ee2fSEnrico Granata {
559128ee2fSEnrico Granata     m_opaque_sp = data_sp;
569128ee2fSEnrico Granata }
579128ee2fSEnrico Granata 
589128ee2fSEnrico Granata lldb_private::DataExtractor *
599128ee2fSEnrico Granata SBData::get() const
609128ee2fSEnrico Granata {
619128ee2fSEnrico Granata     return m_opaque_sp.get();
629128ee2fSEnrico Granata }
639128ee2fSEnrico Granata 
649128ee2fSEnrico Granata lldb_private::DataExtractor *
659128ee2fSEnrico Granata SBData::operator->() const
669128ee2fSEnrico Granata {
679128ee2fSEnrico Granata     return m_opaque_sp.operator->();
689128ee2fSEnrico Granata }
699128ee2fSEnrico Granata 
709128ee2fSEnrico Granata lldb::DataExtractorSP &
719128ee2fSEnrico Granata SBData::operator*()
729128ee2fSEnrico Granata {
739128ee2fSEnrico Granata     return m_opaque_sp;
749128ee2fSEnrico Granata }
759128ee2fSEnrico Granata 
769128ee2fSEnrico Granata const lldb::DataExtractorSP &
779128ee2fSEnrico Granata SBData::operator*() const
789128ee2fSEnrico Granata {
799128ee2fSEnrico Granata     return m_opaque_sp;
809128ee2fSEnrico Granata }
819128ee2fSEnrico Granata 
829128ee2fSEnrico Granata bool
839128ee2fSEnrico Granata SBData::IsValid()
849128ee2fSEnrico Granata {
859128ee2fSEnrico Granata     return m_opaque_sp.get() != NULL;
869128ee2fSEnrico Granata }
879128ee2fSEnrico Granata 
889128ee2fSEnrico Granata uint8_t
899128ee2fSEnrico Granata SBData::GetAddressByteSize ()
909128ee2fSEnrico Granata {
915160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
929128ee2fSEnrico Granata     uint8_t value = 0;
939128ee2fSEnrico Granata     if (m_opaque_sp.get())
949128ee2fSEnrico Granata         value = m_opaque_sp->GetAddressByteSize();
959128ee2fSEnrico Granata     if (log)
969128ee2fSEnrico Granata         log->Printf ("SBData::GetAddressByteSize () => "
979128ee2fSEnrico Granata                      "(%i)", value);
989128ee2fSEnrico Granata     return value;
999128ee2fSEnrico Granata }
1009128ee2fSEnrico Granata 
1019128ee2fSEnrico Granata void
1020f28986aSGreg Clayton SBData::SetAddressByteSize (uint8_t addr_byte_size)
1030f28986aSGreg Clayton {
1045160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1050f28986aSGreg Clayton     if (m_opaque_sp.get())
1060f28986aSGreg Clayton         m_opaque_sp->SetAddressByteSize(addr_byte_size);
1070f28986aSGreg Clayton     if (log)
1080f28986aSGreg Clayton         log->Printf ("SBData::SetAddressByteSize (%i)", addr_byte_size);
1090f28986aSGreg Clayton }
1100f28986aSGreg Clayton 
1110f28986aSGreg Clayton void
1129128ee2fSEnrico Granata SBData::Clear ()
1139128ee2fSEnrico Granata {
1149128ee2fSEnrico Granata     if (m_opaque_sp.get())
1159128ee2fSEnrico Granata         m_opaque_sp->Clear();
1169128ee2fSEnrico Granata }
1179128ee2fSEnrico Granata 
1189128ee2fSEnrico Granata size_t
1199128ee2fSEnrico Granata SBData::GetByteSize ()
1209128ee2fSEnrico Granata {
1215160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1229128ee2fSEnrico Granata     size_t value = 0;
1239128ee2fSEnrico Granata     if (m_opaque_sp.get())
1249128ee2fSEnrico Granata         value = m_opaque_sp->GetByteSize();
1259128ee2fSEnrico Granata     if (log)
1269128ee2fSEnrico Granata         log->Printf ("SBData::GetByteSize () => "
1276fea17e8SGreg Clayton                      "( %" PRIu64 " )", (uint64_t)value);
1289128ee2fSEnrico Granata     return value;
1299128ee2fSEnrico Granata }
1309128ee2fSEnrico Granata 
1319128ee2fSEnrico Granata lldb::ByteOrder
1329128ee2fSEnrico Granata SBData::GetByteOrder ()
1339128ee2fSEnrico Granata {
1345160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1359128ee2fSEnrico Granata     lldb::ByteOrder value = eByteOrderInvalid;
1369128ee2fSEnrico Granata     if (m_opaque_sp.get())
1379128ee2fSEnrico Granata         value = m_opaque_sp->GetByteOrder();
1389128ee2fSEnrico Granata     if (log)
1399128ee2fSEnrico Granata         log->Printf ("SBData::GetByteOrder () => "
1409128ee2fSEnrico Granata                      "(%i)", value);
1419128ee2fSEnrico Granata     return value;
1429128ee2fSEnrico Granata }
1439128ee2fSEnrico Granata 
1440f28986aSGreg Clayton void
1450f28986aSGreg Clayton SBData::SetByteOrder (lldb::ByteOrder endian)
1460f28986aSGreg Clayton {
1475160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1480f28986aSGreg Clayton     if (m_opaque_sp.get())
1490f28986aSGreg Clayton         m_opaque_sp->SetByteOrder(endian);
1500f28986aSGreg Clayton     if (log)
1510f28986aSGreg Clayton         log->Printf ("SBData::GetByteOrder (%i)", endian);
1520f28986aSGreg Clayton }
1530f28986aSGreg Clayton 
1540f28986aSGreg Clayton 
1559128ee2fSEnrico Granata float
156c7bece56SGreg Clayton SBData::GetFloat (lldb::SBError& error, lldb::offset_t offset)
1579128ee2fSEnrico Granata {
1585160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1599128ee2fSEnrico Granata     float value = 0;
1609128ee2fSEnrico Granata     if (!m_opaque_sp.get())
1619128ee2fSEnrico Granata     {
1629128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
1639128ee2fSEnrico Granata     }
1649128ee2fSEnrico Granata     else
1659128ee2fSEnrico Granata     {
1669128ee2fSEnrico Granata         uint32_t old_offset = offset;
1679128ee2fSEnrico Granata         value = m_opaque_sp->GetFloat(&offset);
1689128ee2fSEnrico Granata         if (offset == old_offset)
1699128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
1709128ee2fSEnrico Granata     }
1719128ee2fSEnrico Granata     if (log)
172324a1036SSaleem Abdulrasool         log->Printf ("SBData::GetFloat (error=%p,offset=%" PRIu64 ") => (%f)",
173324a1036SSaleem Abdulrasool                      static_cast<void*>(error.get()), offset, value);
1749128ee2fSEnrico Granata     return value;
1759128ee2fSEnrico Granata }
1769128ee2fSEnrico Granata 
1779128ee2fSEnrico Granata double
178c7bece56SGreg Clayton SBData::GetDouble (lldb::SBError& error, lldb::offset_t offset)
1799128ee2fSEnrico Granata {
1805160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1819128ee2fSEnrico Granata     double value = 0;
1829128ee2fSEnrico Granata     if (!m_opaque_sp.get())
1839128ee2fSEnrico Granata     {
1849128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
1859128ee2fSEnrico Granata     }
1869128ee2fSEnrico Granata     else
1879128ee2fSEnrico Granata     {
1889128ee2fSEnrico Granata         uint32_t old_offset = offset;
1899128ee2fSEnrico Granata         value = m_opaque_sp->GetDouble(&offset);
1909128ee2fSEnrico Granata         if (offset == old_offset)
1919128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
1929128ee2fSEnrico Granata     }
1939128ee2fSEnrico Granata     if (log)
194c7bece56SGreg Clayton         log->Printf ("SBData::GetDouble (error=%p,offset=%" PRIu64 ") => "
195324a1036SSaleem Abdulrasool                      "(%f)", static_cast<void*>(error.get()), offset, value);
1969128ee2fSEnrico Granata     return value;
1979128ee2fSEnrico Granata }
1989128ee2fSEnrico Granata 
1999128ee2fSEnrico Granata long double
200c7bece56SGreg Clayton SBData::GetLongDouble (lldb::SBError& error, lldb::offset_t offset)
2019128ee2fSEnrico Granata {
2025160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2039128ee2fSEnrico Granata     long double value = 0;
2049128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2059128ee2fSEnrico Granata     {
2069128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2079128ee2fSEnrico Granata     }
2089128ee2fSEnrico Granata     else
2099128ee2fSEnrico Granata     {
2109128ee2fSEnrico Granata         uint32_t old_offset = offset;
2119128ee2fSEnrico Granata         value = m_opaque_sp->GetLongDouble(&offset);
2129128ee2fSEnrico Granata         if (offset == old_offset)
2139128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2149128ee2fSEnrico Granata     }
2159128ee2fSEnrico Granata     if (log)
216c7bece56SGreg Clayton         log->Printf ("SBData::GetLongDouble (error=%p,offset=%" PRIu64 ") => "
217324a1036SSaleem Abdulrasool                      "(%Lf)", static_cast<void*>(error.get()), offset, value);
2189128ee2fSEnrico Granata     return value;
2199128ee2fSEnrico Granata }
2209128ee2fSEnrico Granata 
2219128ee2fSEnrico Granata lldb::addr_t
222c7bece56SGreg Clayton SBData::GetAddress (lldb::SBError& error, lldb::offset_t offset)
2239128ee2fSEnrico Granata {
2245160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2259128ee2fSEnrico Granata     lldb::addr_t value = 0;
2269128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2279128ee2fSEnrico Granata     {
2289128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2299128ee2fSEnrico Granata     }
2309128ee2fSEnrico Granata     else
2319128ee2fSEnrico Granata     {
2329128ee2fSEnrico Granata         uint32_t old_offset = offset;
2339128ee2fSEnrico Granata         value = m_opaque_sp->GetAddress(&offset);
2349128ee2fSEnrico Granata         if (offset == old_offset)
2359128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2369128ee2fSEnrico Granata     }
2379128ee2fSEnrico Granata     if (log)
238c7bece56SGreg Clayton         log->Printf ("SBData::GetAddress (error=%p,offset=%" PRIu64 ") => "
239324a1036SSaleem Abdulrasool                      "(%p)", static_cast<void*>(error.get()), offset,
240324a1036SSaleem Abdulrasool                      reinterpret_cast<void*>(value));
2419128ee2fSEnrico Granata     return value;
2429128ee2fSEnrico Granata }
2439128ee2fSEnrico Granata 
2449128ee2fSEnrico Granata uint8_t
245c7bece56SGreg Clayton SBData::GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset)
2469128ee2fSEnrico Granata {
2475160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2489128ee2fSEnrico Granata     uint8_t value = 0;
2499128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2509128ee2fSEnrico Granata     {
2519128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2529128ee2fSEnrico Granata     }
2539128ee2fSEnrico Granata     else
2549128ee2fSEnrico Granata     {
2559128ee2fSEnrico Granata         uint32_t old_offset = offset;
2569128ee2fSEnrico Granata         value = m_opaque_sp->GetU8(&offset);
2579128ee2fSEnrico Granata         if (offset == old_offset)
2589128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2599128ee2fSEnrico Granata     }
2609128ee2fSEnrico Granata     if (log)
261c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt8 (error=%p,offset=%" PRIu64 ") => "
262324a1036SSaleem Abdulrasool                      "(%c)", static_cast<void*>(error.get()), offset, value);
2639128ee2fSEnrico Granata     return value;
2649128ee2fSEnrico Granata }
2659128ee2fSEnrico Granata 
2669128ee2fSEnrico Granata uint16_t
267c7bece56SGreg Clayton SBData::GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset)
2689128ee2fSEnrico Granata {
2695160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2709128ee2fSEnrico Granata     uint16_t value = 0;
2719128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2729128ee2fSEnrico Granata     {
2739128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2749128ee2fSEnrico Granata     }
2759128ee2fSEnrico Granata     else
2769128ee2fSEnrico Granata     {
2779128ee2fSEnrico Granata         uint32_t old_offset = offset;
2789128ee2fSEnrico Granata         value = m_opaque_sp->GetU16(&offset);
2799128ee2fSEnrico Granata         if (offset == old_offset)
2809128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2819128ee2fSEnrico Granata     }
2829128ee2fSEnrico Granata     if (log)
283c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt16 (error=%p,offset=%" PRIu64 ") => "
284324a1036SSaleem Abdulrasool                      "(%hd)", static_cast<void*>(error.get()), offset, value);
2859128ee2fSEnrico Granata     return value;
2869128ee2fSEnrico Granata }
2879128ee2fSEnrico Granata 
2889128ee2fSEnrico Granata uint32_t
289c7bece56SGreg Clayton SBData::GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset)
2909128ee2fSEnrico Granata {
2915160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2929128ee2fSEnrico Granata     uint32_t value = 0;
2939128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2949128ee2fSEnrico Granata     {
2959128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2969128ee2fSEnrico Granata     }
2979128ee2fSEnrico Granata     else
2989128ee2fSEnrico Granata     {
2999128ee2fSEnrico Granata         uint32_t old_offset = offset;
3009128ee2fSEnrico Granata         value = m_opaque_sp->GetU32(&offset);
3019128ee2fSEnrico Granata         if (offset == old_offset)
3029128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3039128ee2fSEnrico Granata     }
3049128ee2fSEnrico Granata     if (log)
305c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt32 (error=%p,offset=%" PRIu64 ") => "
306324a1036SSaleem Abdulrasool                      "(%d)", static_cast<void*>(error.get()), offset, value);
3079128ee2fSEnrico Granata     return value;
3089128ee2fSEnrico Granata }
3099128ee2fSEnrico Granata 
3109128ee2fSEnrico Granata uint64_t
311c7bece56SGreg Clayton SBData::GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset)
3129128ee2fSEnrico Granata {
3135160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3149128ee2fSEnrico Granata     uint64_t value = 0;
3159128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3169128ee2fSEnrico Granata     {
3179128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3189128ee2fSEnrico Granata     }
3199128ee2fSEnrico Granata     else
3209128ee2fSEnrico Granata     {
3219128ee2fSEnrico Granata         uint32_t old_offset = offset;
3229128ee2fSEnrico Granata         value = m_opaque_sp->GetU64(&offset);
3239128ee2fSEnrico Granata         if (offset == old_offset)
3249128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3259128ee2fSEnrico Granata     }
3269128ee2fSEnrico Granata     if (log)
327c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt64 (error=%p,offset=%" PRIu64 ") => "
328324a1036SSaleem Abdulrasool                      "(%" PRId64 ")", static_cast<void*>(error.get()), offset,
329324a1036SSaleem Abdulrasool                      value);
3309128ee2fSEnrico Granata     return value;
3319128ee2fSEnrico Granata }
3329128ee2fSEnrico Granata 
3339128ee2fSEnrico Granata int8_t
334c7bece56SGreg Clayton SBData::GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset)
3359128ee2fSEnrico Granata {
3365160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3379128ee2fSEnrico Granata     int8_t value = 0;
3389128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3399128ee2fSEnrico Granata     {
3409128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3419128ee2fSEnrico Granata     }
3429128ee2fSEnrico Granata     else
3439128ee2fSEnrico Granata     {
3449128ee2fSEnrico Granata         uint32_t old_offset = offset;
3459128ee2fSEnrico Granata         value = (int8_t)m_opaque_sp->GetMaxS64(&offset, 1);
3469128ee2fSEnrico Granata         if (offset == old_offset)
3479128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3489128ee2fSEnrico Granata     }
3499128ee2fSEnrico Granata     if (log)
350c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt8 (error=%p,offset=%" PRIu64 ") => "
351324a1036SSaleem Abdulrasool                      "(%c)", static_cast<void*>(error.get()), offset, value);
3529128ee2fSEnrico Granata     return value;
3539128ee2fSEnrico Granata }
3549128ee2fSEnrico Granata 
3559128ee2fSEnrico Granata int16_t
356c7bece56SGreg Clayton SBData::GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset)
3579128ee2fSEnrico Granata {
3585160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3599128ee2fSEnrico Granata     int16_t value = 0;
3609128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3619128ee2fSEnrico Granata     {
3629128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3639128ee2fSEnrico Granata     }
3649128ee2fSEnrico Granata     else
3659128ee2fSEnrico Granata     {
3669128ee2fSEnrico Granata         uint32_t old_offset = offset;
3679128ee2fSEnrico Granata         value = (int16_t)m_opaque_sp->GetMaxS64(&offset, 2);
3689128ee2fSEnrico Granata         if (offset == old_offset)
3699128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3709128ee2fSEnrico Granata     }
3719128ee2fSEnrico Granata     if (log)
372c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt16 (error=%p,offset=%" PRIu64 ") => "
373324a1036SSaleem Abdulrasool                      "(%hd)", static_cast<void*>(error.get()), offset, value);
3749128ee2fSEnrico Granata     return value;
3759128ee2fSEnrico Granata }
3769128ee2fSEnrico Granata 
3779128ee2fSEnrico Granata int32_t
378c7bece56SGreg Clayton SBData::GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset)
3799128ee2fSEnrico Granata {
3805160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3819128ee2fSEnrico Granata     int32_t value = 0;
3829128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3839128ee2fSEnrico Granata     {
3849128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3859128ee2fSEnrico Granata     }
3869128ee2fSEnrico Granata     else
3879128ee2fSEnrico Granata     {
3889128ee2fSEnrico Granata         uint32_t old_offset = offset;
3899128ee2fSEnrico Granata         value = (int32_t)m_opaque_sp->GetMaxS64(&offset, 4);
3909128ee2fSEnrico Granata         if (offset == old_offset)
3919128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3929128ee2fSEnrico Granata     }
3939128ee2fSEnrico Granata     if (log)
394c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt32 (error=%p,offset=%" PRIu64 ") => "
395324a1036SSaleem Abdulrasool                      "(%d)", static_cast<void*>(error.get()), offset, value);
3969128ee2fSEnrico Granata     return value;
3979128ee2fSEnrico Granata }
3989128ee2fSEnrico Granata 
3999128ee2fSEnrico Granata int64_t
400c7bece56SGreg Clayton SBData::GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset)
4019128ee2fSEnrico Granata {
4025160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4039128ee2fSEnrico Granata     int64_t value = 0;
4049128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4059128ee2fSEnrico Granata     {
4069128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4079128ee2fSEnrico Granata     }
4089128ee2fSEnrico Granata     else
4099128ee2fSEnrico Granata     {
4109128ee2fSEnrico Granata         uint32_t old_offset = offset;
4119128ee2fSEnrico Granata         value = (int64_t)m_opaque_sp->GetMaxS64(&offset, 8);
4129128ee2fSEnrico Granata         if (offset == old_offset)
4139128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4149128ee2fSEnrico Granata     }
4159128ee2fSEnrico Granata     if (log)
416c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt64 (error=%p,offset=%" PRIu64 ") => "
417324a1036SSaleem Abdulrasool                      "(%" PRId64 ")", static_cast<void*>(error.get()), offset,
418324a1036SSaleem Abdulrasool                      value);
4199128ee2fSEnrico Granata     return value;
4209128ee2fSEnrico Granata }
4219128ee2fSEnrico Granata 
4229128ee2fSEnrico Granata const char*
423c7bece56SGreg Clayton SBData::GetString (lldb::SBError& error, lldb::offset_t offset)
4249128ee2fSEnrico Granata {
4255160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4269128ee2fSEnrico Granata     const char* value = 0;
4279128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4289128ee2fSEnrico Granata     {
4299128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4309128ee2fSEnrico Granata     }
4319128ee2fSEnrico Granata     else
4329128ee2fSEnrico Granata     {
4339128ee2fSEnrico Granata         uint32_t old_offset = offset;
4349128ee2fSEnrico Granata         value = m_opaque_sp->GetCStr(&offset);
4359128ee2fSEnrico Granata         if (offset == old_offset || (value == NULL))
4369128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4379128ee2fSEnrico Granata     }
4389128ee2fSEnrico Granata     if (log)
439324a1036SSaleem Abdulrasool         log->Printf ("SBData::GetString (error=%p,offset=%" PRIu64 ") => (%p)",
440324a1036SSaleem Abdulrasool                      static_cast<void*>(error.get()), offset,
441324a1036SSaleem Abdulrasool                      static_cast<const void*>(value));
4429128ee2fSEnrico Granata     return value;
4439128ee2fSEnrico Granata }
4449128ee2fSEnrico Granata 
4459128ee2fSEnrico Granata bool
446d9dc52dcSGreg Clayton SBData::GetDescription (lldb::SBStream &description, lldb::addr_t base_addr)
4479128ee2fSEnrico Granata {
448da7bc7d0SGreg Clayton     Stream &strm = description.ref();
449da7bc7d0SGreg Clayton 
4509128ee2fSEnrico Granata     if (m_opaque_sp)
4519128ee2fSEnrico Granata     {
452da7bc7d0SGreg Clayton         m_opaque_sp->Dump (&strm,
4539128ee2fSEnrico Granata                            0,
4549128ee2fSEnrico Granata                            lldb::eFormatBytesWithASCII,
4559128ee2fSEnrico Granata                            1,
4569128ee2fSEnrico Granata                            m_opaque_sp->GetByteSize(),
4579128ee2fSEnrico Granata                            16,
458d9dc52dcSGreg Clayton                            base_addr,
4599128ee2fSEnrico Granata                            0,
4609128ee2fSEnrico Granata                            0);
4619128ee2fSEnrico Granata     }
4629128ee2fSEnrico Granata     else
463da7bc7d0SGreg Clayton         strm.PutCString ("No value");
4649128ee2fSEnrico Granata 
4659128ee2fSEnrico Granata     return true;
4669128ee2fSEnrico Granata }
4679128ee2fSEnrico Granata 
4689128ee2fSEnrico Granata size_t
4699128ee2fSEnrico Granata SBData::ReadRawData (lldb::SBError& error,
470c7bece56SGreg Clayton                      lldb::offset_t offset,
4719128ee2fSEnrico Granata                      void *buf,
4729128ee2fSEnrico Granata                      size_t size)
4739128ee2fSEnrico Granata {
4745160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4759128ee2fSEnrico Granata     void* ok = NULL;
4769128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4779128ee2fSEnrico Granata     {
4789128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4799128ee2fSEnrico Granata     }
4809128ee2fSEnrico Granata     else
4819128ee2fSEnrico Granata     {
4829128ee2fSEnrico Granata         uint32_t old_offset = offset;
4839128ee2fSEnrico Granata         ok = m_opaque_sp->GetU8(&offset, buf, size);
4849128ee2fSEnrico Granata         if ((offset == old_offset) || (ok == NULL))
4859128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4869128ee2fSEnrico Granata     }
4879128ee2fSEnrico Granata     if (log)
4886fea17e8SGreg Clayton         log->Printf("SBData::ReadRawData (error=%p,offset=%" PRIu64 ",buf=%p,size=%" PRIu64 ") => "
489324a1036SSaleem Abdulrasool                     "(%p)", static_cast<void*>(error.get()), offset,
490324a1036SSaleem Abdulrasool                     static_cast<void*>(buf), static_cast<uint64_t>(size),
491324a1036SSaleem Abdulrasool                     static_cast<void*>(ok));
4929128ee2fSEnrico Granata     return ok ? size : 0;
4939128ee2fSEnrico Granata }
4949128ee2fSEnrico Granata 
4959128ee2fSEnrico Granata void
4969128ee2fSEnrico Granata SBData::SetData (lldb::SBError& error,
4979128ee2fSEnrico Granata                  const void *buf,
4989128ee2fSEnrico Granata                  size_t size,
4999128ee2fSEnrico Granata                  lldb::ByteOrder endian,
5009128ee2fSEnrico Granata                  uint8_t addr_size)
5019128ee2fSEnrico Granata {
5025160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
5039128ee2fSEnrico Granata     if (!m_opaque_sp.get())
5049128ee2fSEnrico Granata         m_opaque_sp.reset(new DataExtractor(buf, size, endian, addr_size));
5059128ee2fSEnrico Granata     else
5069128ee2fSEnrico Granata         m_opaque_sp->SetData(buf, size, endian);
5079128ee2fSEnrico Granata     if (log)
5086fea17e8SGreg Clayton         log->Printf("SBData::SetData (error=%p,buf=%p,size=%" PRIu64 ",endian=%d,addr_size=%c) => "
509324a1036SSaleem Abdulrasool                     "(%p)", static_cast<void*>(error.get()),
510324a1036SSaleem Abdulrasool                     static_cast<const void*>(buf), static_cast<uint64_t>(size),
511324a1036SSaleem Abdulrasool                     endian, addr_size, static_cast<void*>(m_opaque_sp.get()));
5129128ee2fSEnrico Granata }
5139128ee2fSEnrico Granata 
5149128ee2fSEnrico Granata bool
5159128ee2fSEnrico Granata SBData::Append (const SBData& rhs)
5169128ee2fSEnrico Granata {
5175160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
5189128ee2fSEnrico Granata     bool value = false;
5199128ee2fSEnrico Granata     if (m_opaque_sp.get() && rhs.m_opaque_sp.get())
5209128ee2fSEnrico Granata         value = m_opaque_sp.get()->Append(*rhs.m_opaque_sp);
5219128ee2fSEnrico Granata     if (log)
522324a1036SSaleem Abdulrasool         log->Printf ("SBData::Append (rhs=%p) => (%s)",
523324a1036SSaleem Abdulrasool                      static_cast<void*>(rhs.get()), value ? "true" : "false");
5249128ee2fSEnrico Granata     return value;
5259128ee2fSEnrico Granata }
5260f28986aSGreg Clayton 
5270f28986aSGreg Clayton lldb::SBData
5280f28986aSGreg Clayton SBData::CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data)
5290f28986aSGreg Clayton {
5300f28986aSGreg Clayton     if (!data || !data[0])
5310f28986aSGreg Clayton         return SBData();
5320f28986aSGreg Clayton 
5330f28986aSGreg Clayton     uint32_t data_len = strlen(data);
5340f28986aSGreg Clayton 
5350f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
5360f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5370f28986aSGreg Clayton 
5380f28986aSGreg Clayton     SBData ret(data_sp);
5390f28986aSGreg Clayton 
5400f28986aSGreg Clayton     return ret;
5410f28986aSGreg Clayton }
5420f28986aSGreg Clayton 
5430f28986aSGreg Clayton lldb::SBData
5440f28986aSGreg Clayton SBData::CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len)
5450f28986aSGreg Clayton {
5460f28986aSGreg Clayton     if (!array || array_len == 0)
5470f28986aSGreg Clayton         return SBData();
5480f28986aSGreg Clayton 
5490f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint64_t);
5500f28986aSGreg Clayton 
5510f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5520f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5530f28986aSGreg Clayton 
5540f28986aSGreg Clayton     SBData ret(data_sp);
5550f28986aSGreg Clayton 
5560f28986aSGreg Clayton     return ret;
5570f28986aSGreg Clayton }
5580f28986aSGreg Clayton 
5590f28986aSGreg Clayton lldb::SBData
5600f28986aSGreg Clayton SBData::CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len)
5610f28986aSGreg Clayton {
5620f28986aSGreg Clayton     if (!array || array_len == 0)
5630f28986aSGreg Clayton         return SBData();
5640f28986aSGreg Clayton 
5650f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint32_t);
5660f28986aSGreg Clayton 
5670f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5680f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5690f28986aSGreg Clayton 
5700f28986aSGreg Clayton     SBData ret(data_sp);
5710f28986aSGreg Clayton 
5720f28986aSGreg Clayton     return ret;
5730f28986aSGreg Clayton }
5740f28986aSGreg Clayton 
5750f28986aSGreg Clayton lldb::SBData
5760f28986aSGreg Clayton SBData::CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len)
5770f28986aSGreg Clayton {
5780f28986aSGreg Clayton     if (!array || array_len == 0)
5790f28986aSGreg Clayton         return SBData();
5800f28986aSGreg Clayton 
5810f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int64_t);
5820f28986aSGreg Clayton 
5830f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5840f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5850f28986aSGreg Clayton 
5860f28986aSGreg Clayton     SBData ret(data_sp);
5870f28986aSGreg Clayton 
5880f28986aSGreg Clayton     return ret;
5890f28986aSGreg Clayton }
5900f28986aSGreg Clayton 
5910f28986aSGreg Clayton lldb::SBData
5920f28986aSGreg Clayton SBData::CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len)
5930f28986aSGreg Clayton {
5940f28986aSGreg Clayton     if (!array || array_len == 0)
5950f28986aSGreg Clayton         return SBData();
5960f28986aSGreg Clayton 
5970f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int32_t);
5980f28986aSGreg Clayton 
5990f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6000f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
6010f28986aSGreg Clayton 
6020f28986aSGreg Clayton     SBData ret(data_sp);
6030f28986aSGreg Clayton 
6040f28986aSGreg Clayton     return ret;
6050f28986aSGreg Clayton }
6060f28986aSGreg Clayton 
6070f28986aSGreg Clayton lldb::SBData
6080f28986aSGreg Clayton SBData::CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len)
6090f28986aSGreg Clayton {
6100f28986aSGreg Clayton     if (!array || array_len == 0)
6110f28986aSGreg Clayton         return SBData();
6120f28986aSGreg Clayton 
6130f28986aSGreg Clayton     size_t data_len = array_len * sizeof(double);
6140f28986aSGreg Clayton 
6150f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6160f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
6170f28986aSGreg Clayton 
6180f28986aSGreg Clayton     SBData ret(data_sp);
6190f28986aSGreg Clayton 
6200f28986aSGreg Clayton     return ret;
6210f28986aSGreg Clayton }
6220f28986aSGreg Clayton 
6230f28986aSGreg Clayton bool
6240f28986aSGreg Clayton SBData::SetDataFromCString (const char* data)
6250f28986aSGreg Clayton {
6265160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6270f28986aSGreg Clayton 
6280f28986aSGreg Clayton     if (!data)
6290f28986aSGreg Clayton     {
6300f28986aSGreg Clayton         if (log)
631324a1036SSaleem Abdulrasool             log->Printf ("SBData::SetDataFromCString (data=%p) => false",
632324a1036SSaleem Abdulrasool                          static_cast<const void*>(data));
6330f28986aSGreg Clayton         return false;
6340f28986aSGreg Clayton     }
6350f28986aSGreg Clayton 
6360f28986aSGreg Clayton     size_t data_len = strlen(data);
6370f28986aSGreg Clayton 
6380f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
6390f28986aSGreg Clayton 
6400f28986aSGreg Clayton     if (!m_opaque_sp.get())
6410f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
6420f28986aSGreg Clayton     else
6430f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
6440f28986aSGreg Clayton 
6450f28986aSGreg Clayton     if (log)
646324a1036SSaleem Abdulrasool         log->Printf ("SBData::SetDataFromCString (data=%p) => true",
647324a1036SSaleem Abdulrasool                      static_cast<const void*>(data));
6480f28986aSGreg Clayton 
6490f28986aSGreg Clayton     return true;
6500f28986aSGreg Clayton }
6510f28986aSGreg Clayton 
6520f28986aSGreg Clayton bool
6530f28986aSGreg Clayton SBData::SetDataFromUInt64Array (uint64_t* array, size_t array_len)
6540f28986aSGreg Clayton {
6555160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6560f28986aSGreg Clayton 
6570f28986aSGreg Clayton     if (!array || array_len == 0)
6580f28986aSGreg Clayton     {
6590f28986aSGreg Clayton         if (log)
6606fea17e8SGreg Clayton             log->Printf("SBData::SetDataFromUInt64Array (array=%p, array_len = %" PRIu64 ") => "
661324a1036SSaleem Abdulrasool                         "false", static_cast<void*>(array),
662324a1036SSaleem Abdulrasool                         static_cast<uint64_t>(array_len));
6630f28986aSGreg Clayton         return false;
6640f28986aSGreg Clayton     }
6650f28986aSGreg Clayton 
6660f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint64_t);
6670f28986aSGreg Clayton 
6680f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6690f28986aSGreg Clayton 
6700f28986aSGreg Clayton     if (!m_opaque_sp.get())
6710f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
6720f28986aSGreg Clayton     else
6730f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
6740f28986aSGreg Clayton 
6750f28986aSGreg Clayton     if (log)
6766fea17e8SGreg Clayton         log->Printf("SBData::SetDataFromUInt64Array (array=%p, array_len = %" PRIu64 ") => "
677324a1036SSaleem Abdulrasool                     "true", static_cast<void*>(array),
678324a1036SSaleem Abdulrasool                     static_cast<uint64_t>(array_len));
6790f28986aSGreg Clayton 
6800f28986aSGreg Clayton     return true;
6810f28986aSGreg Clayton }
6820f28986aSGreg Clayton 
6830f28986aSGreg Clayton bool
6840f28986aSGreg Clayton SBData::SetDataFromUInt32Array (uint32_t* array, size_t array_len)
6850f28986aSGreg Clayton {
6865160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6870f28986aSGreg Clayton 
6880f28986aSGreg Clayton     if (!array || array_len == 0)
6890f28986aSGreg Clayton     {
6900f28986aSGreg Clayton         if (log)
6916fea17e8SGreg Clayton             log->Printf("SBData::SetDataFromUInt32Array (array=%p, array_len = %" PRIu64 ") => "
692324a1036SSaleem Abdulrasool                         "false", static_cast<void*>(array),
693324a1036SSaleem Abdulrasool                         static_cast<uint64_t>(array_len));
6940f28986aSGreg Clayton         return false;
6950f28986aSGreg Clayton     }
6960f28986aSGreg Clayton 
6970f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint32_t);
6980f28986aSGreg Clayton 
6990f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7000f28986aSGreg Clayton 
7010f28986aSGreg Clayton     if (!m_opaque_sp.get())
7020f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7030f28986aSGreg Clayton     else
7040f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7050f28986aSGreg Clayton 
7060f28986aSGreg Clayton     if (log)
7076fea17e8SGreg Clayton         log->Printf("SBData::SetDataFromUInt32Array (array=%p, array_len = %" PRIu64 ") => "
708324a1036SSaleem Abdulrasool                     "true", static_cast<void*>(array),
709324a1036SSaleem Abdulrasool                     static_cast<uint64_t>(array_len));
7100f28986aSGreg Clayton 
7110f28986aSGreg Clayton     return true;
7120f28986aSGreg Clayton }
7130f28986aSGreg Clayton 
7140f28986aSGreg Clayton bool
7150f28986aSGreg Clayton SBData::SetDataFromSInt64Array (int64_t* array, size_t array_len)
7160f28986aSGreg Clayton {
7175160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
7180f28986aSGreg Clayton 
7190f28986aSGreg Clayton     if (!array || array_len == 0)
7200f28986aSGreg Clayton     {
7210f28986aSGreg Clayton         if (log)
7226fea17e8SGreg Clayton             log->Printf("SBData::SetDataFromSInt64Array (array=%p, array_len = %" PRIu64 ") => "
723324a1036SSaleem Abdulrasool                         "false", static_cast<void*>(array),
724324a1036SSaleem Abdulrasool                         static_cast<uint64_t>(array_len));
7250f28986aSGreg Clayton         return false;
7260f28986aSGreg Clayton     }
7270f28986aSGreg Clayton 
7280f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int64_t);
7290f28986aSGreg Clayton 
7300f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7310f28986aSGreg Clayton 
7320f28986aSGreg Clayton     if (!m_opaque_sp.get())
7330f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7340f28986aSGreg Clayton     else
7350f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7360f28986aSGreg Clayton 
7370f28986aSGreg Clayton     if (log)
7386fea17e8SGreg Clayton         log->Printf("SBData::SetDataFromSInt64Array (array=%p, array_len = %" PRIu64 ") => "
739324a1036SSaleem Abdulrasool                      "true", static_cast<void*>(array),
740324a1036SSaleem Abdulrasool                      static_cast<uint64_t>(array_len));
7410f28986aSGreg Clayton 
7420f28986aSGreg Clayton     return true;
7430f28986aSGreg Clayton }
7440f28986aSGreg Clayton 
7450f28986aSGreg Clayton bool
7460f28986aSGreg Clayton SBData::SetDataFromSInt32Array (int32_t* array, size_t array_len)
7470f28986aSGreg Clayton {
7485160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
7490f28986aSGreg Clayton 
7500f28986aSGreg Clayton     if (!array || array_len == 0)
7510f28986aSGreg Clayton     {
7520f28986aSGreg Clayton         if (log)
7536fea17e8SGreg Clayton             log->Printf("SBData::SetDataFromSInt32Array (array=%p, array_len = %" PRIu64 ") => "
754324a1036SSaleem Abdulrasool                         "false", static_cast<void*>(array),
755324a1036SSaleem Abdulrasool                         static_cast<uint64_t>(array_len));
7560f28986aSGreg Clayton         return false;
7570f28986aSGreg Clayton     }
7580f28986aSGreg Clayton 
7590f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int32_t);
7600f28986aSGreg Clayton 
7610f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7620f28986aSGreg Clayton 
7630f28986aSGreg Clayton     if (!m_opaque_sp.get())
7640f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7650f28986aSGreg Clayton     else
7660f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7670f28986aSGreg Clayton 
7680f28986aSGreg Clayton     if (log)
7696fea17e8SGreg Clayton         log->Printf("SBData::SetDataFromSInt32Array (array=%p, array_len = %" PRIu64 ") => "
770324a1036SSaleem Abdulrasool                     "true", static_cast<void*>(array),
771324a1036SSaleem Abdulrasool                     static_cast<uint64_t>(array_len));
7720f28986aSGreg Clayton 
7730f28986aSGreg Clayton     return true;
7740f28986aSGreg Clayton }
7750f28986aSGreg Clayton 
7760f28986aSGreg Clayton bool
7770f28986aSGreg Clayton SBData::SetDataFromDoubleArray (double* array, size_t array_len)
7780f28986aSGreg Clayton {
7795160ce5cSGreg Clayton     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
7800f28986aSGreg Clayton 
7810f28986aSGreg Clayton     if (!array || array_len == 0)
7820f28986aSGreg Clayton     {
7830f28986aSGreg Clayton         if (log)
7846fea17e8SGreg Clayton             log->Printf("SBData::SetDataFromDoubleArray (array=%p, array_len = %" PRIu64 ") => "
785324a1036SSaleem Abdulrasool                         "false", static_cast<void*>(array),
786324a1036SSaleem Abdulrasool                         static_cast<uint64_t>(array_len));
7870f28986aSGreg Clayton         return false;
7880f28986aSGreg Clayton     }
7890f28986aSGreg Clayton 
7900f28986aSGreg Clayton     size_t data_len = array_len * sizeof(double);
7910f28986aSGreg Clayton 
7920f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7930f28986aSGreg Clayton 
7940f28986aSGreg Clayton     if (!m_opaque_sp.get())
7950f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7960f28986aSGreg Clayton     else
7970f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7980f28986aSGreg Clayton 
7990f28986aSGreg Clayton     if (log)
8006fea17e8SGreg Clayton         log->Printf("SBData::SetDataFromDoubleArray (array=%p, array_len = %" PRIu64 ") => "
801324a1036SSaleem Abdulrasool                     "true", static_cast<void*>(array),
802324a1036SSaleem Abdulrasool                     static_cast<uint64_t>(array_len));
8030f28986aSGreg Clayton 
8040f28986aSGreg Clayton     return true;
8050f28986aSGreg Clayton }
806