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 {
899128ee2fSEnrico Granata     LogSP 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 {
1020f28986aSGreg Clayton     LogSP 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 {
1199128ee2fSEnrico Granata     LogSP 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 () => "
125fd54b368SJason Molenda                      "(%lu)", value);
1269128ee2fSEnrico Granata     return value;
1279128ee2fSEnrico Granata }
1289128ee2fSEnrico Granata 
1299128ee2fSEnrico Granata lldb::ByteOrder
1309128ee2fSEnrico Granata SBData::GetByteOrder ()
1319128ee2fSEnrico Granata {
1329128ee2fSEnrico Granata     LogSP 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 {
1450f28986aSGreg Clayton     LogSP 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
154*c7bece56SGreg Clayton SBData::GetFloat (lldb::SBError& error, lldb::offset_t offset)
1559128ee2fSEnrico Granata {
1569128ee2fSEnrico Granata     LogSP 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*c7bece56SGreg Clayton         log->Printf ("SBData::GetFloat (error=%p,offset=%" PRIu64 ") => "
1719128ee2fSEnrico Granata                      "(%f)", error.get(), offset, value);
1729128ee2fSEnrico Granata     return value;
1739128ee2fSEnrico Granata }
1749128ee2fSEnrico Granata 
1759128ee2fSEnrico Granata double
176*c7bece56SGreg Clayton SBData::GetDouble (lldb::SBError& error, lldb::offset_t offset)
1779128ee2fSEnrico Granata {
1789128ee2fSEnrico Granata     LogSP 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)
192*c7bece56SGreg Clayton         log->Printf ("SBData::GetDouble (error=%p,offset=%" PRIu64 ") => "
1939128ee2fSEnrico Granata                      "(%f)", error.get(), offset, value);
1949128ee2fSEnrico Granata     return value;
1959128ee2fSEnrico Granata }
1969128ee2fSEnrico Granata 
1979128ee2fSEnrico Granata long double
198*c7bece56SGreg Clayton SBData::GetLongDouble (lldb::SBError& error, lldb::offset_t offset)
1999128ee2fSEnrico Granata {
2009128ee2fSEnrico Granata     LogSP 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)
214*c7bece56SGreg Clayton         log->Printf ("SBData::GetLongDouble (error=%p,offset=%" PRIu64 ") => "
215fd54b368SJason Molenda                      "(%Lf)", error.get(), offset, value);
2169128ee2fSEnrico Granata     return value;
2179128ee2fSEnrico Granata }
2189128ee2fSEnrico Granata 
2199128ee2fSEnrico Granata lldb::addr_t
220*c7bece56SGreg Clayton SBData::GetAddress (lldb::SBError& error, lldb::offset_t offset)
2219128ee2fSEnrico Granata {
2229128ee2fSEnrico Granata     LogSP 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)
236*c7bece56SGreg Clayton         log->Printf ("SBData::GetAddress (error=%p,offset=%" PRIu64 ") => "
2379128ee2fSEnrico Granata                      "(%p)", error.get(), offset, (void*)value);
2389128ee2fSEnrico Granata     return value;
2399128ee2fSEnrico Granata }
2409128ee2fSEnrico Granata 
2419128ee2fSEnrico Granata uint8_t
242*c7bece56SGreg Clayton SBData::GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset)
2439128ee2fSEnrico Granata {
2449128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2459128ee2fSEnrico Granata     uint8_t value = 0;
2469128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2479128ee2fSEnrico Granata     {
2489128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2499128ee2fSEnrico Granata     }
2509128ee2fSEnrico Granata     else
2519128ee2fSEnrico Granata     {
2529128ee2fSEnrico Granata         uint32_t old_offset = offset;
2539128ee2fSEnrico Granata         value = m_opaque_sp->GetU8(&offset);
2549128ee2fSEnrico Granata         if (offset == old_offset)
2559128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2569128ee2fSEnrico Granata     }
2579128ee2fSEnrico Granata     if (log)
258*c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt8 (error=%p,offset=%" PRIu64 ") => "
2599128ee2fSEnrico Granata                      "(%c)", error.get(), offset, value);
2609128ee2fSEnrico Granata     return value;
2619128ee2fSEnrico Granata }
2629128ee2fSEnrico Granata 
2639128ee2fSEnrico Granata uint16_t
264*c7bece56SGreg Clayton SBData::GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset)
2659128ee2fSEnrico Granata {
2669128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2679128ee2fSEnrico Granata     uint16_t value = 0;
2689128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2699128ee2fSEnrico Granata     {
2709128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2719128ee2fSEnrico Granata     }
2729128ee2fSEnrico Granata     else
2739128ee2fSEnrico Granata     {
2749128ee2fSEnrico Granata         uint32_t old_offset = offset;
2759128ee2fSEnrico Granata         value = m_opaque_sp->GetU16(&offset);
2769128ee2fSEnrico Granata         if (offset == old_offset)
2779128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2789128ee2fSEnrico Granata     }
2799128ee2fSEnrico Granata     if (log)
280*c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt16 (error=%p,offset=%" PRIu64 ") => "
2819128ee2fSEnrico Granata                      "(%hd)", error.get(), offset, value);
2829128ee2fSEnrico Granata     return value;
2839128ee2fSEnrico Granata }
2849128ee2fSEnrico Granata 
2859128ee2fSEnrico Granata uint32_t
286*c7bece56SGreg Clayton SBData::GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset)
2879128ee2fSEnrico Granata {
2889128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2899128ee2fSEnrico Granata     uint32_t value = 0;
2909128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2919128ee2fSEnrico Granata     {
2929128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2939128ee2fSEnrico Granata     }
2949128ee2fSEnrico Granata     else
2959128ee2fSEnrico Granata     {
2969128ee2fSEnrico Granata         uint32_t old_offset = offset;
2979128ee2fSEnrico Granata         value = m_opaque_sp->GetU32(&offset);
2989128ee2fSEnrico Granata         if (offset == old_offset)
2999128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3009128ee2fSEnrico Granata     }
3019128ee2fSEnrico Granata     if (log)
302*c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt32 (error=%p,offset=%" PRIu64 ") => "
3039128ee2fSEnrico Granata                      "(%d)", error.get(), offset, value);
3049128ee2fSEnrico Granata     return value;
3059128ee2fSEnrico Granata }
3069128ee2fSEnrico Granata 
3079128ee2fSEnrico Granata uint64_t
308*c7bece56SGreg Clayton SBData::GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset)
3099128ee2fSEnrico Granata {
3109128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3119128ee2fSEnrico Granata     uint64_t value = 0;
3129128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3139128ee2fSEnrico Granata     {
3149128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3159128ee2fSEnrico Granata     }
3169128ee2fSEnrico Granata     else
3179128ee2fSEnrico Granata     {
3189128ee2fSEnrico Granata         uint32_t old_offset = offset;
3199128ee2fSEnrico Granata         value = m_opaque_sp->GetU64(&offset);
3209128ee2fSEnrico Granata         if (offset == old_offset)
3219128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3229128ee2fSEnrico Granata     }
3239128ee2fSEnrico Granata     if (log)
324*c7bece56SGreg Clayton         log->Printf ("SBData::GetUnsignedInt64 (error=%p,offset=%" PRIu64 ") => "
325d01b2953SDaniel Malea                      "(%" PRId64 ")", error.get(), offset, value);
3269128ee2fSEnrico Granata     return value;
3279128ee2fSEnrico Granata }
3289128ee2fSEnrico Granata 
3299128ee2fSEnrico Granata int8_t
330*c7bece56SGreg Clayton SBData::GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset)
3319128ee2fSEnrico Granata {
3329128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3339128ee2fSEnrico Granata     int8_t value = 0;
3349128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3359128ee2fSEnrico Granata     {
3369128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3379128ee2fSEnrico Granata     }
3389128ee2fSEnrico Granata     else
3399128ee2fSEnrico Granata     {
3409128ee2fSEnrico Granata         uint32_t old_offset = offset;
3419128ee2fSEnrico Granata         value = (int8_t)m_opaque_sp->GetMaxS64(&offset, 1);
3429128ee2fSEnrico Granata         if (offset == old_offset)
3439128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3449128ee2fSEnrico Granata     }
3459128ee2fSEnrico Granata     if (log)
346*c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt8 (error=%p,offset=%" PRIu64 ") => "
3479128ee2fSEnrico Granata                      "(%c)", error.get(), offset, value);
3489128ee2fSEnrico Granata     return value;
3499128ee2fSEnrico Granata }
3509128ee2fSEnrico Granata 
3519128ee2fSEnrico Granata int16_t
352*c7bece56SGreg Clayton SBData::GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset)
3539128ee2fSEnrico Granata {
3549128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3559128ee2fSEnrico Granata     int16_t value = 0;
3569128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3579128ee2fSEnrico Granata     {
3589128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3599128ee2fSEnrico Granata     }
3609128ee2fSEnrico Granata     else
3619128ee2fSEnrico Granata     {
3629128ee2fSEnrico Granata         uint32_t old_offset = offset;
3639128ee2fSEnrico Granata         value = (int16_t)m_opaque_sp->GetMaxS64(&offset, 2);
3649128ee2fSEnrico Granata         if (offset == old_offset)
3659128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3669128ee2fSEnrico Granata     }
3679128ee2fSEnrico Granata     if (log)
368*c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt16 (error=%p,offset=%" PRIu64 ") => "
3699128ee2fSEnrico Granata                      "(%hd)", error.get(), offset, value);
3709128ee2fSEnrico Granata     return value;
3719128ee2fSEnrico Granata }
3729128ee2fSEnrico Granata 
3739128ee2fSEnrico Granata int32_t
374*c7bece56SGreg Clayton SBData::GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset)
3759128ee2fSEnrico Granata {
3769128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3779128ee2fSEnrico Granata     int32_t value = 0;
3789128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3799128ee2fSEnrico Granata     {
3809128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3819128ee2fSEnrico Granata     }
3829128ee2fSEnrico Granata     else
3839128ee2fSEnrico Granata     {
3849128ee2fSEnrico Granata         uint32_t old_offset = offset;
3859128ee2fSEnrico Granata         value = (int32_t)m_opaque_sp->GetMaxS64(&offset, 4);
3869128ee2fSEnrico Granata         if (offset == old_offset)
3879128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3889128ee2fSEnrico Granata     }
3899128ee2fSEnrico Granata     if (log)
390*c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt32 (error=%p,offset=%" PRIu64 ") => "
3919128ee2fSEnrico Granata                      "(%d)", error.get(), offset, value);
3929128ee2fSEnrico Granata     return value;
3939128ee2fSEnrico Granata }
3949128ee2fSEnrico Granata 
3959128ee2fSEnrico Granata int64_t
396*c7bece56SGreg Clayton SBData::GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset)
3979128ee2fSEnrico Granata {
3989128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3999128ee2fSEnrico Granata     int64_t value = 0;
4009128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4019128ee2fSEnrico Granata     {
4029128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4039128ee2fSEnrico Granata     }
4049128ee2fSEnrico Granata     else
4059128ee2fSEnrico Granata     {
4069128ee2fSEnrico Granata         uint32_t old_offset = offset;
4079128ee2fSEnrico Granata         value = (int64_t)m_opaque_sp->GetMaxS64(&offset, 8);
4089128ee2fSEnrico Granata         if (offset == old_offset)
4099128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4109128ee2fSEnrico Granata     }
4119128ee2fSEnrico Granata     if (log)
412*c7bece56SGreg Clayton         log->Printf ("SBData::GetSignedInt64 (error=%p,offset=%" PRIu64 ") => "
413d01b2953SDaniel Malea                      "(%" PRId64 ")", error.get(), offset, value);
4149128ee2fSEnrico Granata     return value;
4159128ee2fSEnrico Granata }
4169128ee2fSEnrico Granata 
4179128ee2fSEnrico Granata const char*
418*c7bece56SGreg Clayton SBData::GetString (lldb::SBError& error, lldb::offset_t offset)
4199128ee2fSEnrico Granata {
4209128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4219128ee2fSEnrico Granata     const char* value = 0;
4229128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4239128ee2fSEnrico Granata     {
4249128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4259128ee2fSEnrico Granata     }
4269128ee2fSEnrico Granata     else
4279128ee2fSEnrico Granata     {
4289128ee2fSEnrico Granata         uint32_t old_offset = offset;
4299128ee2fSEnrico Granata         value = m_opaque_sp->GetCStr(&offset);
4309128ee2fSEnrico Granata         if (offset == old_offset || (value == NULL))
4319128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4329128ee2fSEnrico Granata     }
4339128ee2fSEnrico Granata     if (log)
434*c7bece56SGreg Clayton         log->Printf ("SBData::GetString (error=%p,offset=%" PRIu64 ") => "
4359128ee2fSEnrico Granata                      "(%p)", error.get(), offset, value);
4369128ee2fSEnrico Granata     return value;
4379128ee2fSEnrico Granata }
4389128ee2fSEnrico Granata 
4399128ee2fSEnrico Granata bool
440d9dc52dcSGreg Clayton SBData::GetDescription (lldb::SBStream &description, lldb::addr_t base_addr)
4419128ee2fSEnrico Granata {
442da7bc7d0SGreg Clayton     Stream &strm = description.ref();
443da7bc7d0SGreg Clayton 
4449128ee2fSEnrico Granata     if (m_opaque_sp)
4459128ee2fSEnrico Granata     {
446da7bc7d0SGreg Clayton         m_opaque_sp->Dump (&strm,
4479128ee2fSEnrico Granata                            0,
4489128ee2fSEnrico Granata                            lldb::eFormatBytesWithASCII,
4499128ee2fSEnrico Granata                            1,
4509128ee2fSEnrico Granata                            m_opaque_sp->GetByteSize(),
4519128ee2fSEnrico Granata                            16,
452d9dc52dcSGreg Clayton                            base_addr,
4539128ee2fSEnrico Granata                            0,
4549128ee2fSEnrico Granata                            0);
4559128ee2fSEnrico Granata     }
4569128ee2fSEnrico Granata     else
457da7bc7d0SGreg Clayton         strm.PutCString ("No value");
4589128ee2fSEnrico Granata 
4599128ee2fSEnrico Granata     return true;
4609128ee2fSEnrico Granata }
4619128ee2fSEnrico Granata 
4629128ee2fSEnrico Granata size_t
4639128ee2fSEnrico Granata SBData::ReadRawData (lldb::SBError& error,
464*c7bece56SGreg Clayton                      lldb::offset_t offset,
4659128ee2fSEnrico Granata                      void *buf,
4669128ee2fSEnrico Granata                      size_t size)
4679128ee2fSEnrico Granata {
4689128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4699128ee2fSEnrico Granata     void* ok = NULL;
4709128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4719128ee2fSEnrico Granata     {
4729128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4739128ee2fSEnrico Granata     }
4749128ee2fSEnrico Granata     else
4759128ee2fSEnrico Granata     {
4769128ee2fSEnrico Granata         uint32_t old_offset = offset;
4779128ee2fSEnrico Granata         ok = m_opaque_sp->GetU8(&offset, buf, size);
4789128ee2fSEnrico Granata         if ((offset == old_offset) || (ok == NULL))
4799128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4809128ee2fSEnrico Granata     }
4819128ee2fSEnrico Granata     if (log)
482*c7bece56SGreg Clayton         log->Printf ("SBData::ReadRawData (error=%p,offset=%" PRIu64 ",buf=%p,size=%lu) => "
4839128ee2fSEnrico Granata                      "(%p)", error.get(), offset, buf, size, ok);
4849128ee2fSEnrico Granata     return ok ? size : 0;
4859128ee2fSEnrico Granata }
4869128ee2fSEnrico Granata 
4879128ee2fSEnrico Granata void
4889128ee2fSEnrico Granata SBData::SetData (lldb::SBError& error,
4899128ee2fSEnrico Granata                  const void *buf,
4909128ee2fSEnrico Granata                  size_t size,
4919128ee2fSEnrico Granata                  lldb::ByteOrder endian,
4929128ee2fSEnrico Granata                  uint8_t addr_size)
4939128ee2fSEnrico Granata {
4949128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4959128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4969128ee2fSEnrico Granata         m_opaque_sp.reset(new DataExtractor(buf, size, endian, addr_size));
4979128ee2fSEnrico Granata     else
4989128ee2fSEnrico Granata         m_opaque_sp->SetData(buf, size, endian);
4999128ee2fSEnrico Granata     if (log)
500fd54b368SJason Molenda         log->Printf ("SBData::SetData (error=%p,buf=%p,size=%lu,endian=%d,addr_size=%c) => "
5019128ee2fSEnrico Granata                      "(%p)", error.get(), buf, size, endian, addr_size, m_opaque_sp.get());
5029128ee2fSEnrico Granata }
5039128ee2fSEnrico Granata 
5049128ee2fSEnrico Granata bool
5059128ee2fSEnrico Granata SBData::Append (const SBData& rhs)
5069128ee2fSEnrico Granata {
5079128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
5089128ee2fSEnrico Granata     bool value = false;
5099128ee2fSEnrico Granata     if (m_opaque_sp.get() && rhs.m_opaque_sp.get())
5109128ee2fSEnrico Granata         value = m_opaque_sp.get()->Append(*rhs.m_opaque_sp);
5119128ee2fSEnrico Granata     if (log)
5129128ee2fSEnrico Granata         log->Printf ("SBData::Append (rhs=%p) => "
5139128ee2fSEnrico Granata                      "(%s)", rhs.get(), value ? "true" : "false");
5149128ee2fSEnrico Granata     return value;
5159128ee2fSEnrico Granata }
5160f28986aSGreg Clayton 
5170f28986aSGreg Clayton lldb::SBData
5180f28986aSGreg Clayton SBData::CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data)
5190f28986aSGreg Clayton {
5200f28986aSGreg Clayton     if (!data || !data[0])
5210f28986aSGreg Clayton         return SBData();
5220f28986aSGreg Clayton 
5230f28986aSGreg Clayton     uint32_t data_len = strlen(data);
5240f28986aSGreg Clayton 
5250f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
5260f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5270f28986aSGreg Clayton 
5280f28986aSGreg Clayton     SBData ret(data_sp);
5290f28986aSGreg Clayton 
5300f28986aSGreg Clayton     return ret;
5310f28986aSGreg Clayton }
5320f28986aSGreg Clayton 
5330f28986aSGreg Clayton lldb::SBData
5340f28986aSGreg Clayton SBData::CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len)
5350f28986aSGreg Clayton {
5360f28986aSGreg Clayton     if (!array || array_len == 0)
5370f28986aSGreg Clayton         return SBData();
5380f28986aSGreg Clayton 
5390f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint64_t);
5400f28986aSGreg Clayton 
5410f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5420f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5430f28986aSGreg Clayton 
5440f28986aSGreg Clayton     SBData ret(data_sp);
5450f28986aSGreg Clayton 
5460f28986aSGreg Clayton     return ret;
5470f28986aSGreg Clayton }
5480f28986aSGreg Clayton 
5490f28986aSGreg Clayton lldb::SBData
5500f28986aSGreg Clayton SBData::CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len)
5510f28986aSGreg Clayton {
5520f28986aSGreg Clayton     if (!array || array_len == 0)
5530f28986aSGreg Clayton         return SBData();
5540f28986aSGreg Clayton 
5550f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint32_t);
5560f28986aSGreg Clayton 
5570f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5580f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5590f28986aSGreg Clayton 
5600f28986aSGreg Clayton     SBData ret(data_sp);
5610f28986aSGreg Clayton 
5620f28986aSGreg Clayton     return ret;
5630f28986aSGreg Clayton }
5640f28986aSGreg Clayton 
5650f28986aSGreg Clayton lldb::SBData
5660f28986aSGreg Clayton SBData::CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len)
5670f28986aSGreg Clayton {
5680f28986aSGreg Clayton     if (!array || array_len == 0)
5690f28986aSGreg Clayton         return SBData();
5700f28986aSGreg Clayton 
5710f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int64_t);
5720f28986aSGreg Clayton 
5730f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5740f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5750f28986aSGreg Clayton 
5760f28986aSGreg Clayton     SBData ret(data_sp);
5770f28986aSGreg Clayton 
5780f28986aSGreg Clayton     return ret;
5790f28986aSGreg Clayton }
5800f28986aSGreg Clayton 
5810f28986aSGreg Clayton lldb::SBData
5820f28986aSGreg Clayton SBData::CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len)
5830f28986aSGreg Clayton {
5840f28986aSGreg Clayton     if (!array || array_len == 0)
5850f28986aSGreg Clayton         return SBData();
5860f28986aSGreg Clayton 
5870f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int32_t);
5880f28986aSGreg Clayton 
5890f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
5900f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
5910f28986aSGreg Clayton 
5920f28986aSGreg Clayton     SBData ret(data_sp);
5930f28986aSGreg Clayton 
5940f28986aSGreg Clayton     return ret;
5950f28986aSGreg Clayton }
5960f28986aSGreg Clayton 
5970f28986aSGreg Clayton lldb::SBData
5980f28986aSGreg Clayton SBData::CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len)
5990f28986aSGreg Clayton {
6000f28986aSGreg Clayton     if (!array || array_len == 0)
6010f28986aSGreg Clayton         return SBData();
6020f28986aSGreg Clayton 
6030f28986aSGreg Clayton     size_t data_len = array_len * sizeof(double);
6040f28986aSGreg Clayton 
6050f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6060f28986aSGreg Clayton     lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
6070f28986aSGreg Clayton 
6080f28986aSGreg Clayton     SBData ret(data_sp);
6090f28986aSGreg Clayton 
6100f28986aSGreg Clayton     return ret;
6110f28986aSGreg Clayton }
6120f28986aSGreg Clayton 
6130f28986aSGreg Clayton bool
6140f28986aSGreg Clayton SBData::SetDataFromCString (const char* data)
6150f28986aSGreg Clayton {
6160f28986aSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6170f28986aSGreg Clayton 
6180f28986aSGreg Clayton     if (!data)
6190f28986aSGreg Clayton     {
6200f28986aSGreg Clayton         if (log)
6210f28986aSGreg Clayton             log->Printf ("SBData::SetDataFromCString (data=%p) => "
6220f28986aSGreg Clayton                          "false", data);
6230f28986aSGreg Clayton         return false;
6240f28986aSGreg Clayton     }
6250f28986aSGreg Clayton 
6260f28986aSGreg Clayton     size_t data_len = strlen(data);
6270f28986aSGreg Clayton 
6280f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
6290f28986aSGreg Clayton 
6300f28986aSGreg Clayton     if (!m_opaque_sp.get())
6310f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
6320f28986aSGreg Clayton     else
6330f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
6340f28986aSGreg Clayton 
6350f28986aSGreg Clayton     if (log)
6360f28986aSGreg Clayton         log->Printf ("SBData::SetDataFromCString (data=%p) => "
6370f28986aSGreg Clayton                      "true", data);
6380f28986aSGreg Clayton 
6390f28986aSGreg Clayton     return true;
6400f28986aSGreg Clayton }
6410f28986aSGreg Clayton 
6420f28986aSGreg Clayton bool
6430f28986aSGreg Clayton SBData::SetDataFromUInt64Array (uint64_t* array, size_t array_len)
6440f28986aSGreg Clayton {
6450f28986aSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6460f28986aSGreg Clayton 
6470f28986aSGreg Clayton     if (!array || array_len == 0)
6480f28986aSGreg Clayton     {
6490f28986aSGreg Clayton         if (log)
6500f28986aSGreg Clayton             log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => "
6510f28986aSGreg Clayton                          "false", array, array_len);
6520f28986aSGreg Clayton         return false;
6530f28986aSGreg Clayton     }
6540f28986aSGreg Clayton 
6550f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint64_t);
6560f28986aSGreg Clayton 
6570f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6580f28986aSGreg Clayton 
6590f28986aSGreg Clayton     if (!m_opaque_sp.get())
6600f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
6610f28986aSGreg Clayton     else
6620f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
6630f28986aSGreg Clayton 
6640f28986aSGreg Clayton     if (log)
6650f28986aSGreg Clayton         log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => "
6660f28986aSGreg Clayton                      "true", array, array_len);
6670f28986aSGreg Clayton 
6680f28986aSGreg Clayton     return true;
6690f28986aSGreg Clayton }
6700f28986aSGreg Clayton 
6710f28986aSGreg Clayton bool
6720f28986aSGreg Clayton SBData::SetDataFromUInt32Array (uint32_t* array, size_t array_len)
6730f28986aSGreg Clayton {
6740f28986aSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
6750f28986aSGreg Clayton 
6760f28986aSGreg Clayton     if (!array || array_len == 0)
6770f28986aSGreg Clayton     {
6780f28986aSGreg Clayton         if (log)
6790f28986aSGreg Clayton             log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => "
6800f28986aSGreg Clayton                          "false", array, array_len);
6810f28986aSGreg Clayton         return false;
6820f28986aSGreg Clayton     }
6830f28986aSGreg Clayton 
6840f28986aSGreg Clayton     size_t data_len = array_len * sizeof(uint32_t);
6850f28986aSGreg Clayton 
6860f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
6870f28986aSGreg Clayton 
6880f28986aSGreg Clayton     if (!m_opaque_sp.get())
6890f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
6900f28986aSGreg Clayton     else
6910f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
6920f28986aSGreg Clayton 
6930f28986aSGreg Clayton     if (log)
6940f28986aSGreg Clayton         log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => "
6950f28986aSGreg Clayton                      "true", array, array_len);
6960f28986aSGreg Clayton 
6970f28986aSGreg Clayton     return true;
6980f28986aSGreg Clayton }
6990f28986aSGreg Clayton 
7000f28986aSGreg Clayton bool
7010f28986aSGreg Clayton SBData::SetDataFromSInt64Array (int64_t* array, size_t array_len)
7020f28986aSGreg Clayton {
7030f28986aSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
7040f28986aSGreg Clayton 
7050f28986aSGreg Clayton     if (!array || array_len == 0)
7060f28986aSGreg Clayton     {
7070f28986aSGreg Clayton         if (log)
7080f28986aSGreg Clayton             log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => "
7090f28986aSGreg Clayton                          "false", array, array_len);
7100f28986aSGreg Clayton         return false;
7110f28986aSGreg Clayton     }
7120f28986aSGreg Clayton 
7130f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int64_t);
7140f28986aSGreg Clayton 
7150f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7160f28986aSGreg Clayton 
7170f28986aSGreg Clayton     if (!m_opaque_sp.get())
7180f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7190f28986aSGreg Clayton     else
7200f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7210f28986aSGreg Clayton 
7220f28986aSGreg Clayton     if (log)
7230f28986aSGreg Clayton         log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => "
7240f28986aSGreg Clayton                      "true", array, array_len);
7250f28986aSGreg Clayton 
7260f28986aSGreg Clayton     return true;
7270f28986aSGreg Clayton }
7280f28986aSGreg Clayton 
7290f28986aSGreg Clayton bool
7300f28986aSGreg Clayton SBData::SetDataFromSInt32Array (int32_t* array, size_t array_len)
7310f28986aSGreg Clayton {
7320f28986aSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
7330f28986aSGreg Clayton 
7340f28986aSGreg Clayton     if (!array || array_len == 0)
7350f28986aSGreg Clayton     {
7360f28986aSGreg Clayton         if (log)
7370f28986aSGreg Clayton             log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => "
7380f28986aSGreg Clayton                          "false", array, array_len);
7390f28986aSGreg Clayton         return false;
7400f28986aSGreg Clayton     }
7410f28986aSGreg Clayton 
7420f28986aSGreg Clayton     size_t data_len = array_len * sizeof(int32_t);
7430f28986aSGreg Clayton 
7440f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7450f28986aSGreg Clayton 
7460f28986aSGreg Clayton     if (!m_opaque_sp.get())
7470f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7480f28986aSGreg Clayton     else
7490f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7500f28986aSGreg Clayton 
7510f28986aSGreg Clayton     if (log)
7520f28986aSGreg Clayton         log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => "
7530f28986aSGreg Clayton                      "true", array, array_len);
7540f28986aSGreg Clayton 
7550f28986aSGreg Clayton     return true;
7560f28986aSGreg Clayton }
7570f28986aSGreg Clayton 
7580f28986aSGreg Clayton bool
7590f28986aSGreg Clayton SBData::SetDataFromDoubleArray (double* array, size_t array_len)
7600f28986aSGreg Clayton {
7610f28986aSGreg Clayton     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
7620f28986aSGreg Clayton 
7630f28986aSGreg Clayton     if (!array || array_len == 0)
7640f28986aSGreg Clayton     {
7650f28986aSGreg Clayton         if (log)
7660f28986aSGreg Clayton             log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => "
7670f28986aSGreg Clayton                          "false", array, array_len);
7680f28986aSGreg Clayton         return false;
7690f28986aSGreg Clayton     }
7700f28986aSGreg Clayton 
7710f28986aSGreg Clayton     size_t data_len = array_len * sizeof(double);
7720f28986aSGreg Clayton 
7730f28986aSGreg Clayton     lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
7740f28986aSGreg Clayton 
7750f28986aSGreg Clayton     if (!m_opaque_sp.get())
7760f28986aSGreg Clayton         m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
7770f28986aSGreg Clayton     else
7780f28986aSGreg Clayton         m_opaque_sp->SetData(buffer_sp);
7790f28986aSGreg Clayton 
7800f28986aSGreg Clayton     if (log)
7810f28986aSGreg Clayton         log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => "
7820f28986aSGreg Clayton                      "true", array, array_len);
7830f28986aSGreg Clayton 
7840f28986aSGreg Clayton     return true;
7850f28986aSGreg Clayton }
786