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 
149128ee2fSEnrico Granata #include "lldb/Core/DataExtractor.h"
159128ee2fSEnrico Granata #include "lldb/Core/Log.h"
16*da7bc7d0SGreg Clayton #include "lldb/Core/Stream.h"
17*da7bc7d0SGreg Clayton 
189128ee2fSEnrico Granata 
199128ee2fSEnrico Granata using namespace lldb;
209128ee2fSEnrico Granata using namespace lldb_private;
219128ee2fSEnrico Granata 
229128ee2fSEnrico Granata SBData::SBData ()
239128ee2fSEnrico Granata {
249128ee2fSEnrico Granata }
259128ee2fSEnrico Granata 
269128ee2fSEnrico Granata SBData::SBData (const lldb::DataExtractorSP& data_sp) :
279128ee2fSEnrico Granata     m_opaque_sp (data_sp)
289128ee2fSEnrico Granata {
299128ee2fSEnrico Granata }
309128ee2fSEnrico Granata 
319128ee2fSEnrico Granata SBData::SBData(const SBData &rhs) :
329128ee2fSEnrico Granata     m_opaque_sp (rhs.m_opaque_sp)
339128ee2fSEnrico Granata {
349128ee2fSEnrico Granata }
359128ee2fSEnrico Granata 
369128ee2fSEnrico Granata const SBData &
379128ee2fSEnrico Granata SBData::operator = (const SBData &rhs)
389128ee2fSEnrico Granata {
399128ee2fSEnrico Granata     if (this != &rhs)
409128ee2fSEnrico Granata         m_opaque_sp = rhs.m_opaque_sp;
419128ee2fSEnrico Granata     return *this;
429128ee2fSEnrico Granata }
439128ee2fSEnrico Granata 
449128ee2fSEnrico Granata SBData::~SBData ()
459128ee2fSEnrico Granata {
469128ee2fSEnrico Granata }
479128ee2fSEnrico Granata 
489128ee2fSEnrico Granata void
499128ee2fSEnrico Granata SBData::SetOpaque (const lldb::DataExtractorSP &data_sp)
509128ee2fSEnrico Granata {
519128ee2fSEnrico Granata     m_opaque_sp = data_sp;
529128ee2fSEnrico Granata }
539128ee2fSEnrico Granata 
549128ee2fSEnrico Granata lldb_private::DataExtractor *
559128ee2fSEnrico Granata SBData::get() const
569128ee2fSEnrico Granata {
579128ee2fSEnrico Granata     return m_opaque_sp.get();
589128ee2fSEnrico Granata }
599128ee2fSEnrico Granata 
609128ee2fSEnrico Granata lldb_private::DataExtractor *
619128ee2fSEnrico Granata SBData::operator->() const
629128ee2fSEnrico Granata {
639128ee2fSEnrico Granata     return m_opaque_sp.operator->();
649128ee2fSEnrico Granata }
659128ee2fSEnrico Granata 
669128ee2fSEnrico Granata lldb::DataExtractorSP &
679128ee2fSEnrico Granata SBData::operator*()
689128ee2fSEnrico Granata {
699128ee2fSEnrico Granata     return m_opaque_sp;
709128ee2fSEnrico Granata }
719128ee2fSEnrico Granata 
729128ee2fSEnrico Granata const lldb::DataExtractorSP &
739128ee2fSEnrico Granata SBData::operator*() const
749128ee2fSEnrico Granata {
759128ee2fSEnrico Granata     return m_opaque_sp;
769128ee2fSEnrico Granata }
779128ee2fSEnrico Granata 
789128ee2fSEnrico Granata bool
799128ee2fSEnrico Granata SBData::IsValid()
809128ee2fSEnrico Granata {
819128ee2fSEnrico Granata     return m_opaque_sp.get() != NULL;
829128ee2fSEnrico Granata }
839128ee2fSEnrico Granata 
849128ee2fSEnrico Granata uint8_t
859128ee2fSEnrico Granata SBData::GetAddressByteSize ()
869128ee2fSEnrico Granata {
879128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
889128ee2fSEnrico Granata     uint8_t value = 0;
899128ee2fSEnrico Granata     if (m_opaque_sp.get())
909128ee2fSEnrico Granata         value = m_opaque_sp->GetAddressByteSize();
919128ee2fSEnrico Granata     if (log)
929128ee2fSEnrico Granata         log->Printf ("SBData::GetAddressByteSize () => "
939128ee2fSEnrico Granata                      "(%i)", value);
949128ee2fSEnrico Granata     return value;
959128ee2fSEnrico Granata }
969128ee2fSEnrico Granata 
979128ee2fSEnrico Granata void
989128ee2fSEnrico Granata SBData::Clear ()
999128ee2fSEnrico Granata {
1009128ee2fSEnrico Granata     if (m_opaque_sp.get())
1019128ee2fSEnrico Granata         m_opaque_sp->Clear();
1029128ee2fSEnrico Granata }
1039128ee2fSEnrico Granata 
1049128ee2fSEnrico Granata size_t
1059128ee2fSEnrico Granata SBData::GetByteSize ()
1069128ee2fSEnrico Granata {
1079128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1089128ee2fSEnrico Granata     size_t value = 0;
1099128ee2fSEnrico Granata     if (m_opaque_sp.get())
1109128ee2fSEnrico Granata         value = m_opaque_sp->GetByteSize();
1119128ee2fSEnrico Granata     if (log)
1129128ee2fSEnrico Granata         log->Printf ("SBData::GetByteSize () => "
113fd54b368SJason Molenda                      "(%lu)", value);
1149128ee2fSEnrico Granata     return value;
1159128ee2fSEnrico Granata }
1169128ee2fSEnrico Granata 
1179128ee2fSEnrico Granata lldb::ByteOrder
1189128ee2fSEnrico Granata SBData::GetByteOrder ()
1199128ee2fSEnrico Granata {
1209128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1219128ee2fSEnrico Granata     lldb::ByteOrder value = eByteOrderInvalid;
1229128ee2fSEnrico Granata     if (m_opaque_sp.get())
1239128ee2fSEnrico Granata         value = m_opaque_sp->GetByteOrder();
1249128ee2fSEnrico Granata     if (log)
1259128ee2fSEnrico Granata         log->Printf ("SBData::GetByteOrder () => "
1269128ee2fSEnrico Granata                      "(%i)", value);
1279128ee2fSEnrico Granata     return value;
1289128ee2fSEnrico Granata }
1299128ee2fSEnrico Granata 
1309128ee2fSEnrico Granata float
1319128ee2fSEnrico Granata SBData::GetFloat (lldb::SBError& error, uint32_t offset)
1329128ee2fSEnrico Granata {
1339128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1349128ee2fSEnrico Granata     float value = 0;
1359128ee2fSEnrico Granata     if (!m_opaque_sp.get())
1369128ee2fSEnrico Granata     {
1379128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
1389128ee2fSEnrico Granata     }
1399128ee2fSEnrico Granata     else
1409128ee2fSEnrico Granata     {
1419128ee2fSEnrico Granata         uint32_t old_offset = offset;
1429128ee2fSEnrico Granata         value = m_opaque_sp->GetFloat(&offset);
1439128ee2fSEnrico Granata         if (offset == old_offset)
1449128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
1459128ee2fSEnrico Granata     }
1469128ee2fSEnrico Granata     if (log)
1479128ee2fSEnrico Granata         log->Printf ("SBData::GetFloat (error=%p,offset=%d) => "
1489128ee2fSEnrico Granata                      "(%f)", error.get(), offset, value);
1499128ee2fSEnrico Granata     return value;
1509128ee2fSEnrico Granata }
1519128ee2fSEnrico Granata 
1529128ee2fSEnrico Granata double
1539128ee2fSEnrico Granata SBData::GetDouble (lldb::SBError& error, uint32_t offset)
1549128ee2fSEnrico Granata {
1559128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1569128ee2fSEnrico Granata     double value = 0;
1579128ee2fSEnrico Granata     if (!m_opaque_sp.get())
1589128ee2fSEnrico Granata     {
1599128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
1609128ee2fSEnrico Granata     }
1619128ee2fSEnrico Granata     else
1629128ee2fSEnrico Granata     {
1639128ee2fSEnrico Granata         uint32_t old_offset = offset;
1649128ee2fSEnrico Granata         value = m_opaque_sp->GetDouble(&offset);
1659128ee2fSEnrico Granata         if (offset == old_offset)
1669128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
1679128ee2fSEnrico Granata     }
1689128ee2fSEnrico Granata     if (log)
1699128ee2fSEnrico Granata         log->Printf ("SBData::GetDouble (error=%p,offset=%d) => "
1709128ee2fSEnrico Granata                      "(%f)", error.get(), offset, value);
1719128ee2fSEnrico Granata     return value;
1729128ee2fSEnrico Granata }
1739128ee2fSEnrico Granata 
1749128ee2fSEnrico Granata long double
1759128ee2fSEnrico Granata SBData::GetLongDouble (lldb::SBError& error, uint32_t offset)
1769128ee2fSEnrico Granata {
1779128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
1789128ee2fSEnrico Granata     long double value = 0;
1799128ee2fSEnrico Granata     if (!m_opaque_sp.get())
1809128ee2fSEnrico Granata     {
1819128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
1829128ee2fSEnrico Granata     }
1839128ee2fSEnrico Granata     else
1849128ee2fSEnrico Granata     {
1859128ee2fSEnrico Granata         uint32_t old_offset = offset;
1869128ee2fSEnrico Granata         value = m_opaque_sp->GetLongDouble(&offset);
1879128ee2fSEnrico Granata         if (offset == old_offset)
1889128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
1899128ee2fSEnrico Granata     }
1909128ee2fSEnrico Granata     if (log)
1919128ee2fSEnrico Granata         log->Printf ("SBData::GetLongDouble (error=%p,offset=%d) => "
192fd54b368SJason Molenda                      "(%Lf)", error.get(), offset, value);
1939128ee2fSEnrico Granata     return value;
1949128ee2fSEnrico Granata }
1959128ee2fSEnrico Granata 
1969128ee2fSEnrico Granata lldb::addr_t
1979128ee2fSEnrico Granata SBData::GetAddress (lldb::SBError& error, uint32_t offset)
1989128ee2fSEnrico Granata {
1999128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2009128ee2fSEnrico Granata     lldb::addr_t value = 0;
2019128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2029128ee2fSEnrico Granata     {
2039128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2049128ee2fSEnrico Granata     }
2059128ee2fSEnrico Granata     else
2069128ee2fSEnrico Granata     {
2079128ee2fSEnrico Granata         uint32_t old_offset = offset;
2089128ee2fSEnrico Granata         value = m_opaque_sp->GetAddress(&offset);
2099128ee2fSEnrico Granata         if (offset == old_offset)
2109128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2119128ee2fSEnrico Granata     }
2129128ee2fSEnrico Granata     if (log)
2139128ee2fSEnrico Granata         log->Printf ("SBData::GetAddress (error=%p,offset=%d) => "
2149128ee2fSEnrico Granata                      "(%p)", error.get(), offset, (void*)value);
2159128ee2fSEnrico Granata     return value;
2169128ee2fSEnrico Granata }
2179128ee2fSEnrico Granata 
2189128ee2fSEnrico Granata uint8_t
2199128ee2fSEnrico Granata SBData::GetUnsignedInt8 (lldb::SBError& error, uint32_t offset)
2209128ee2fSEnrico Granata {
2219128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2229128ee2fSEnrico Granata     uint8_t value = 0;
2239128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2249128ee2fSEnrico Granata     {
2259128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2269128ee2fSEnrico Granata     }
2279128ee2fSEnrico Granata     else
2289128ee2fSEnrico Granata     {
2299128ee2fSEnrico Granata         uint32_t old_offset = offset;
2309128ee2fSEnrico Granata         value = m_opaque_sp->GetU8(&offset);
2319128ee2fSEnrico Granata         if (offset == old_offset)
2329128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2339128ee2fSEnrico Granata     }
2349128ee2fSEnrico Granata     if (log)
2359128ee2fSEnrico Granata         log->Printf ("SBData::GetUnsignedInt8 (error=%p,offset=%d) => "
2369128ee2fSEnrico Granata                      "(%c)", error.get(), offset, value);
2379128ee2fSEnrico Granata     return value;
2389128ee2fSEnrico Granata }
2399128ee2fSEnrico Granata 
2409128ee2fSEnrico Granata uint16_t
2419128ee2fSEnrico Granata SBData::GetUnsignedInt16 (lldb::SBError& error, uint32_t offset)
2429128ee2fSEnrico Granata {
2439128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2449128ee2fSEnrico Granata     uint16_t value = 0;
2459128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2469128ee2fSEnrico Granata     {
2479128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2489128ee2fSEnrico Granata     }
2499128ee2fSEnrico Granata     else
2509128ee2fSEnrico Granata     {
2519128ee2fSEnrico Granata         uint32_t old_offset = offset;
2529128ee2fSEnrico Granata         value = m_opaque_sp->GetU16(&offset);
2539128ee2fSEnrico Granata         if (offset == old_offset)
2549128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2559128ee2fSEnrico Granata     }
2569128ee2fSEnrico Granata     if (log)
2579128ee2fSEnrico Granata         log->Printf ("SBData::GetUnsignedInt16 (error=%p,offset=%d) => "
2589128ee2fSEnrico Granata                      "(%hd)", error.get(), offset, value);
2599128ee2fSEnrico Granata     return value;
2609128ee2fSEnrico Granata }
2619128ee2fSEnrico Granata 
2629128ee2fSEnrico Granata uint32_t
2639128ee2fSEnrico Granata SBData::GetUnsignedInt32 (lldb::SBError& error, uint32_t offset)
2649128ee2fSEnrico Granata {
2659128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2669128ee2fSEnrico Granata     uint32_t value = 0;
2679128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2689128ee2fSEnrico Granata     {
2699128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2709128ee2fSEnrico Granata     }
2719128ee2fSEnrico Granata     else
2729128ee2fSEnrico Granata     {
2739128ee2fSEnrico Granata         uint32_t old_offset = offset;
2749128ee2fSEnrico Granata         value = m_opaque_sp->GetU32(&offset);
2759128ee2fSEnrico Granata         if (offset == old_offset)
2769128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2779128ee2fSEnrico Granata     }
2789128ee2fSEnrico Granata     if (log)
2799128ee2fSEnrico Granata         log->Printf ("SBData::GetUnsignedInt32 (error=%p,offset=%d) => "
2809128ee2fSEnrico Granata                      "(%d)", error.get(), offset, value);
2819128ee2fSEnrico Granata     return value;
2829128ee2fSEnrico Granata }
2839128ee2fSEnrico Granata 
2849128ee2fSEnrico Granata uint64_t
2859128ee2fSEnrico Granata SBData::GetUnsignedInt64 (lldb::SBError& error, uint32_t offset)
2869128ee2fSEnrico Granata {
2879128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
2889128ee2fSEnrico Granata     uint64_t value = 0;
2899128ee2fSEnrico Granata     if (!m_opaque_sp.get())
2909128ee2fSEnrico Granata     {
2919128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
2929128ee2fSEnrico Granata     }
2939128ee2fSEnrico Granata     else
2949128ee2fSEnrico Granata     {
2959128ee2fSEnrico Granata         uint32_t old_offset = offset;
2969128ee2fSEnrico Granata         value = m_opaque_sp->GetU64(&offset);
2979128ee2fSEnrico Granata         if (offset == old_offset)
2989128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
2999128ee2fSEnrico Granata     }
3009128ee2fSEnrico Granata     if (log)
3019128ee2fSEnrico Granata         log->Printf ("SBData::GetUnsignedInt64 (error=%p,offset=%d) => "
302fd54b368SJason Molenda                      "(%lld)", error.get(), offset, value);
3039128ee2fSEnrico Granata     return value;
3049128ee2fSEnrico Granata }
3059128ee2fSEnrico Granata 
3069128ee2fSEnrico Granata int8_t
3079128ee2fSEnrico Granata SBData::GetSignedInt8 (lldb::SBError& error, uint32_t offset)
3089128ee2fSEnrico Granata {
3099128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3109128ee2fSEnrico Granata     int8_t value = 0;
3119128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3129128ee2fSEnrico Granata     {
3139128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3149128ee2fSEnrico Granata     }
3159128ee2fSEnrico Granata     else
3169128ee2fSEnrico Granata     {
3179128ee2fSEnrico Granata         uint32_t old_offset = offset;
3189128ee2fSEnrico Granata         value = (int8_t)m_opaque_sp->GetMaxS64(&offset, 1);
3199128ee2fSEnrico Granata         if (offset == old_offset)
3209128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3219128ee2fSEnrico Granata     }
3229128ee2fSEnrico Granata     if (log)
3239128ee2fSEnrico Granata         log->Printf ("SBData::GetSignedInt8 (error=%p,offset=%d) => "
3249128ee2fSEnrico Granata                      "(%c)", error.get(), offset, value);
3259128ee2fSEnrico Granata     return value;
3269128ee2fSEnrico Granata }
3279128ee2fSEnrico Granata 
3289128ee2fSEnrico Granata int16_t
3299128ee2fSEnrico Granata SBData::GetSignedInt16 (lldb::SBError& error, uint32_t offset)
3309128ee2fSEnrico Granata {
3319128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3329128ee2fSEnrico Granata     int16_t value = 0;
3339128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3349128ee2fSEnrico Granata     {
3359128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3369128ee2fSEnrico Granata     }
3379128ee2fSEnrico Granata     else
3389128ee2fSEnrico Granata     {
3399128ee2fSEnrico Granata         uint32_t old_offset = offset;
3409128ee2fSEnrico Granata         value = (int16_t)m_opaque_sp->GetMaxS64(&offset, 2);
3419128ee2fSEnrico Granata         if (offset == old_offset)
3429128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3439128ee2fSEnrico Granata     }
3449128ee2fSEnrico Granata     if (log)
3459128ee2fSEnrico Granata         log->Printf ("SBData::GetSignedInt16 (error=%p,offset=%d) => "
3469128ee2fSEnrico Granata                      "(%hd)", error.get(), offset, value);
3479128ee2fSEnrico Granata     return value;
3489128ee2fSEnrico Granata }
3499128ee2fSEnrico Granata 
3509128ee2fSEnrico Granata int32_t
3519128ee2fSEnrico Granata SBData::GetSignedInt32 (lldb::SBError& error, uint32_t offset)
3529128ee2fSEnrico Granata {
3539128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3549128ee2fSEnrico Granata     int32_t value = 0;
3559128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3569128ee2fSEnrico Granata     {
3579128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3589128ee2fSEnrico Granata     }
3599128ee2fSEnrico Granata     else
3609128ee2fSEnrico Granata     {
3619128ee2fSEnrico Granata         uint32_t old_offset = offset;
3629128ee2fSEnrico Granata         value = (int32_t)m_opaque_sp->GetMaxS64(&offset, 4);
3639128ee2fSEnrico Granata         if (offset == old_offset)
3649128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3659128ee2fSEnrico Granata     }
3669128ee2fSEnrico Granata     if (log)
3679128ee2fSEnrico Granata         log->Printf ("SBData::GetSignedInt32 (error=%p,offset=%d) => "
3689128ee2fSEnrico Granata                      "(%d)", error.get(), offset, value);
3699128ee2fSEnrico Granata     return value;
3709128ee2fSEnrico Granata }
3719128ee2fSEnrico Granata 
3729128ee2fSEnrico Granata int64_t
3739128ee2fSEnrico Granata SBData::GetSignedInt64 (lldb::SBError& error, uint32_t offset)
3749128ee2fSEnrico Granata {
3759128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3769128ee2fSEnrico Granata     int64_t value = 0;
3779128ee2fSEnrico Granata     if (!m_opaque_sp.get())
3789128ee2fSEnrico Granata     {
3799128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
3809128ee2fSEnrico Granata     }
3819128ee2fSEnrico Granata     else
3829128ee2fSEnrico Granata     {
3839128ee2fSEnrico Granata         uint32_t old_offset = offset;
3849128ee2fSEnrico Granata         value = (int64_t)m_opaque_sp->GetMaxS64(&offset, 8);
3859128ee2fSEnrico Granata         if (offset == old_offset)
3869128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
3879128ee2fSEnrico Granata     }
3889128ee2fSEnrico Granata     if (log)
3899128ee2fSEnrico Granata         log->Printf ("SBData::GetSignedInt64 (error=%p,offset=%d) => "
390fd54b368SJason Molenda                      "(%lld)", error.get(), offset, value);
3919128ee2fSEnrico Granata     return value;
3929128ee2fSEnrico Granata }
3939128ee2fSEnrico Granata 
3949128ee2fSEnrico Granata const char*
3959128ee2fSEnrico Granata SBData::GetString (lldb::SBError& error, uint32_t offset)
3969128ee2fSEnrico Granata {
3979128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
3989128ee2fSEnrico Granata     const char* value = 0;
3999128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4009128ee2fSEnrico Granata     {
4019128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4029128ee2fSEnrico Granata     }
4039128ee2fSEnrico Granata     else
4049128ee2fSEnrico Granata     {
4059128ee2fSEnrico Granata         uint32_t old_offset = offset;
4069128ee2fSEnrico Granata         value = m_opaque_sp->GetCStr(&offset);
4079128ee2fSEnrico Granata         if (offset == old_offset || (value == NULL))
4089128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4099128ee2fSEnrico Granata     }
4109128ee2fSEnrico Granata     if (log)
4119128ee2fSEnrico Granata         log->Printf ("SBData::GetString (error=%p,offset=%d) => "
4129128ee2fSEnrico Granata                      "(%p)", error.get(), offset, value);
4139128ee2fSEnrico Granata     return value;
4149128ee2fSEnrico Granata }
4159128ee2fSEnrico Granata 
4169128ee2fSEnrico Granata bool
417d9dc52dcSGreg Clayton SBData::GetDescription (lldb::SBStream &description, lldb::addr_t base_addr)
4189128ee2fSEnrico Granata {
419*da7bc7d0SGreg Clayton     Stream &strm = description.ref();
420*da7bc7d0SGreg Clayton 
4219128ee2fSEnrico Granata     if (m_opaque_sp)
4229128ee2fSEnrico Granata     {
423*da7bc7d0SGreg Clayton         m_opaque_sp->Dump (&strm,
4249128ee2fSEnrico Granata                            0,
4259128ee2fSEnrico Granata                            lldb::eFormatBytesWithASCII,
4269128ee2fSEnrico Granata                            1,
4279128ee2fSEnrico Granata                            m_opaque_sp->GetByteSize(),
4289128ee2fSEnrico Granata                            16,
429d9dc52dcSGreg Clayton                            base_addr,
4309128ee2fSEnrico Granata                            0,
4319128ee2fSEnrico Granata                            0);
4329128ee2fSEnrico Granata     }
4339128ee2fSEnrico Granata     else
434*da7bc7d0SGreg Clayton         strm.PutCString ("No value");
4359128ee2fSEnrico Granata 
4369128ee2fSEnrico Granata     return true;
4379128ee2fSEnrico Granata }
4389128ee2fSEnrico Granata 
4399128ee2fSEnrico Granata size_t
4409128ee2fSEnrico Granata SBData::ReadRawData (lldb::SBError& error,
4419128ee2fSEnrico Granata                      uint32_t offset,
4429128ee2fSEnrico Granata                      void *buf,
4439128ee2fSEnrico Granata                      size_t size)
4449128ee2fSEnrico Granata {
4459128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4469128ee2fSEnrico Granata     void* ok = NULL;
4479128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4489128ee2fSEnrico Granata     {
4499128ee2fSEnrico Granata         error.SetErrorString("no value to read from");
4509128ee2fSEnrico Granata     }
4519128ee2fSEnrico Granata     else
4529128ee2fSEnrico Granata     {
4539128ee2fSEnrico Granata         uint32_t old_offset = offset;
4549128ee2fSEnrico Granata         ok = m_opaque_sp->GetU8(&offset, buf, size);
4559128ee2fSEnrico Granata         if ((offset == old_offset) || (ok == NULL))
4569128ee2fSEnrico Granata             error.SetErrorString("unable to read data");
4579128ee2fSEnrico Granata     }
4589128ee2fSEnrico Granata     if (log)
459fd54b368SJason Molenda         log->Printf ("SBData::ReadRawData (error=%p,offset=%d,buf=%p,size=%lu) => "
4609128ee2fSEnrico Granata                      "(%p)", error.get(), offset, buf, size, ok);
4619128ee2fSEnrico Granata     return ok ? size : 0;
4629128ee2fSEnrico Granata }
4639128ee2fSEnrico Granata 
4649128ee2fSEnrico Granata void
4659128ee2fSEnrico Granata SBData::SetData(lldb::SBError& error,
4669128ee2fSEnrico Granata                 const void *buf,
4679128ee2fSEnrico Granata                 size_t size,
4689128ee2fSEnrico Granata                 lldb::ByteOrder endian,
4699128ee2fSEnrico Granata                 uint8_t addr_size)
4709128ee2fSEnrico Granata {
4719128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4729128ee2fSEnrico Granata     if (!m_opaque_sp.get())
4739128ee2fSEnrico Granata         m_opaque_sp.reset(new DataExtractor(buf, size, endian, addr_size));
4749128ee2fSEnrico Granata     else
4759128ee2fSEnrico Granata         m_opaque_sp->SetData(buf, size, endian);
4769128ee2fSEnrico Granata     if (log)
477fd54b368SJason Molenda         log->Printf ("SBData::SetData (error=%p,buf=%p,size=%lu,endian=%d,addr_size=%c) => "
4789128ee2fSEnrico Granata                      "(%p)", error.get(), buf, size, endian, addr_size, m_opaque_sp.get());
4799128ee2fSEnrico Granata }
4809128ee2fSEnrico Granata 
4819128ee2fSEnrico Granata bool
4829128ee2fSEnrico Granata SBData::Append(const SBData& rhs)
4839128ee2fSEnrico Granata {
4849128ee2fSEnrico Granata     LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
4859128ee2fSEnrico Granata     bool value = false;
4869128ee2fSEnrico Granata     if (m_opaque_sp.get() && rhs.m_opaque_sp.get())
4879128ee2fSEnrico Granata         value = m_opaque_sp.get()->Append(*rhs.m_opaque_sp);
4889128ee2fSEnrico Granata     if (log)
4899128ee2fSEnrico Granata         log->Printf ("SBData::Append (rhs=%p) => "
4909128ee2fSEnrico Granata                      "(%s)", rhs.get(), value ? "true" : "false");
4919128ee2fSEnrico Granata     return value;
4929128ee2fSEnrico Granata }
493