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