1915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//===-- SBData.cpp ----------------------------------------------*- C++ -*-===//
2915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//
3915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//                     The LLVM Compiler Infrastructure
4915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//
5915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// This file is distributed under the University of Illinois Open Source
6915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata// License. See LICENSE.TXT for details.
7915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//
8915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//===----------------------------------------------------------------------===//
9915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
10915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#include "lldb/API/SBData.h"
11915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#include "lldb/API/SBError.h"
12915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#include "lldb/API/SBStream.h"
13915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
14a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton#include "lldb/Core/DataBufferHeap.h"
15915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#include "lldb/Core/DataExtractor.h"
16915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#include "lldb/Core/Log.h"
1796154be69fa240a662419183ed08e1cfc5418164Greg Clayton#include "lldb/Core/Stream.h"
1896154be69fa240a662419183ed08e1cfc5418164Greg Clayton
19915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
20915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatausing namespace lldb;
21915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatausing namespace lldb_private;
22915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
23a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::SBData () :
24a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    m_opaque_sp(new DataExtractor())
25915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
26915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
27915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
28915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::SBData (const lldb::DataExtractorSP& data_sp) :
29915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    m_opaque_sp (data_sp)
30915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
31915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
32915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
33915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::SBData(const SBData &rhs) :
34915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    m_opaque_sp (rhs.m_opaque_sp)
35915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
36915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
37915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
38915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataconst SBData &
39915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::operator = (const SBData &rhs)
40915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
41915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (this != &rhs)
42915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        m_opaque_sp = rhs.m_opaque_sp;
43915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return *this;
44915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
45915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
46915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::~SBData ()
47915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
48915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
49915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
50915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatavoid
51915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::SetOpaque (const lldb::DataExtractorSP &data_sp)
52915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
53915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    m_opaque_sp = data_sp;
54915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
55915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
56915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatalldb_private::DataExtractor *
57915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::get() const
58915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
59915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return m_opaque_sp.get();
60915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
61915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
62915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatalldb_private::DataExtractor *
63915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::operator->() const
64915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
65915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return m_opaque_sp.operator->();
66915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
67915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
68915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatalldb::DataExtractorSP &
69915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::operator*()
70915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
71915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return m_opaque_sp;
72915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
73915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
74915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataconst lldb::DataExtractorSP &
75915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::operator*() const
76915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
77915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return m_opaque_sp;
78915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
79915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
80915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatabool
81915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::IsValid()
82915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
83915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return m_opaque_sp.get() != NULL;
84915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
85915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
86915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatauint8_t
87915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::GetAddressByteSize ()
88915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
89952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
90915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint8_t value = 0;
91915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (m_opaque_sp.get())
92915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetAddressByteSize();
93915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
94915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        log->Printf ("SBData::GetAddressByteSize () => "
95915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%i)", value);
96915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
97915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
98915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
99915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatavoid
100a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::SetAddressByteSize (uint8_t addr_byte_size)
101a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
102952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
103a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (m_opaque_sp.get())
104a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp->SetAddressByteSize(addr_byte_size);
105a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (log)
106a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        log->Printf ("SBData::SetAddressByteSize (%i)", addr_byte_size);
107a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
108a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
109a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonvoid
110915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::Clear ()
111915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
112915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (m_opaque_sp.get())
113915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        m_opaque_sp->Clear();
114915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
115915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
116915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatasize_t
117915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::GetByteSize ()
118915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
119952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
120915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    size_t value = 0;
121915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (m_opaque_sp.get())
122915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetByteSize();
123915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
124915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        log->Printf ("SBData::GetByteSize () => "
1257e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda                     "(%lu)", value);
126915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
127915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
128915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
129915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatalldb::ByteOrder
130915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::GetByteOrder ()
131915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
132952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
133915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::ByteOrder value = eByteOrderInvalid;
134915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (m_opaque_sp.get())
135915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetByteOrder();
136915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
137915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        log->Printf ("SBData::GetByteOrder () => "
138915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%i)", value);
139915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
140915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
141915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
142a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonvoid
143a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::SetByteOrder (lldb::ByteOrder endian)
144a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
145952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
146a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (m_opaque_sp.get())
147a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp->SetByteOrder(endian);
148a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (log)
149a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        log->Printf ("SBData::GetByteOrder (%i)", endian);
150a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
151a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
152a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
153915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatafloat
15436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetFloat (lldb::SBError& error, lldb::offset_t offset)
155915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
156952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
157915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    float value = 0;
158915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
159915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
160915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
161915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
162915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
163915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
164915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
165915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetFloat(&offset);
166915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
167915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
168915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
169915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
17036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetFloat (error=%p,offset=%" PRIu64 ") => "
171915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%f)", error.get(), offset, value);
172915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
173915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
174915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
175915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatadouble
17636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetDouble (lldb::SBError& error, lldb::offset_t offset)
177915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
178952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
179915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    double value = 0;
180915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
181915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
182915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
183915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
184915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
185915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
186915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
187915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetDouble(&offset);
188915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
189915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
190915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
191915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
19236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetDouble (error=%p,offset=%" PRIu64 ") => "
193915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%f)", error.get(), offset, value);
194915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
195915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
196915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
197915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatalong double
19836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetLongDouble (lldb::SBError& error, lldb::offset_t offset)
199915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
200952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
201915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    long double value = 0;
202915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
203915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
204915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
205915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
206915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
207915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
208915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
209915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetLongDouble(&offset);
210915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
211915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
212915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
213915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
21436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetLongDouble (error=%p,offset=%" PRIu64 ") => "
2157e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda                     "(%Lf)", error.get(), offset, value);
216915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
217915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
218915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
219915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatalldb::addr_t
22036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetAddress (lldb::SBError& error, lldb::offset_t offset)
221915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
222952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
223915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::addr_t value = 0;
224915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
225915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
226915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
227915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
228915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
229915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
230915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
231915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetAddress(&offset);
232915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
233915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
234915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
235915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
23636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetAddress (error=%p,offset=%" PRIu64 ") => "
237915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%p)", error.get(), offset, (void*)value);
238915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
239915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
240915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
241915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatauint8_t
24236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset)
243915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
244952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
245915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint8_t value = 0;
246915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
247915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
248915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
249915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
250915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
251915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
252915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
253915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetU8(&offset);
254915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
255915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
256915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
257915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
25836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetUnsignedInt8 (error=%p,offset=%" PRIu64 ") => "
259915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%c)", error.get(), offset, value);
260915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
261915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
262915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
263915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatauint16_t
26436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset)
265915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
266952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
267915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint16_t value = 0;
268915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
269915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
270915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
271915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
272915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
273915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
274915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
275915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetU16(&offset);
276915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
277915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
278915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
279915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
28036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetUnsignedInt16 (error=%p,offset=%" PRIu64 ") => "
281915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%hd)", error.get(), offset, value);
282915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
283915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
284915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
285915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatauint32_t
28636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset)
287915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
288952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
289915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint32_t value = 0;
290915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
291915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
292915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
293915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
294915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
295915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
296915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
297915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetU32(&offset);
298915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
299915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
300915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
301915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
30236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetUnsignedInt32 (error=%p,offset=%" PRIu64 ") => "
303915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%d)", error.get(), offset, value);
304915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
305915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
306915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
307915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatauint64_t
30836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset)
309915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
310952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
311915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint64_t value = 0;
312915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
313915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
314915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
315915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
316915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
317915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
318915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
319915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetU64(&offset);
320915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
321915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
322915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
323915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
32436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetUnsignedInt64 (error=%p,offset=%" PRIu64 ") => "
3255f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea                     "(%" PRId64 ")", error.get(), offset, value);
326915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
327915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
328915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
329915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataint8_t
33036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset)
331915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
332952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
333915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int8_t value = 0;
334915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
335915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
336915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
337915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
338915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
339915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
340915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
341915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = (int8_t)m_opaque_sp->GetMaxS64(&offset, 1);
342915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
343915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
344915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
345915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
34636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetSignedInt8 (error=%p,offset=%" PRIu64 ") => "
347915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%c)", error.get(), offset, value);
348915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
349915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
350915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
351915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataint16_t
35236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset)
353915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
354952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
355915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int16_t value = 0;
356915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
357915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
358915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
359915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
360915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
361915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
362915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
363915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = (int16_t)m_opaque_sp->GetMaxS64(&offset, 2);
364915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
365915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
366915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
367915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
36836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetSignedInt16 (error=%p,offset=%" PRIu64 ") => "
369915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%hd)", error.get(), offset, value);
370915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
371915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
372915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
373915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataint32_t
37436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset)
375915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
376952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
377915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int32_t value = 0;
378915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
379915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
380915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
381915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
382915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
383915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
384915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
385915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = (int32_t)m_opaque_sp->GetMaxS64(&offset, 4);
386915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
387915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
388915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
389915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
39036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetSignedInt32 (error=%p,offset=%" PRIu64 ") => "
391915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%d)", error.get(), offset, value);
392915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
393915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
394915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
395915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataint64_t
39636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset)
397915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
398952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
399915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int64_t value = 0;
400915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
401915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
402915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
403915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
404915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
405915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
406915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
407915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = (int64_t)m_opaque_sp->GetMaxS64(&offset, 8);
408915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset)
409915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
410915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
411915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
41236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetSignedInt64 (error=%p,offset=%" PRIu64 ") => "
4135f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea                     "(%" PRId64 ")", error.get(), offset, value);
414915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
415915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
416915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
417915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataconst char*
41836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg ClaytonSBData::GetString (lldb::SBError& error, lldb::offset_t offset)
419915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
420952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
421915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    const char* value = 0;
422915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
423915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
424915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
425915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
426915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
427915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
428915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
429915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp->GetCStr(&offset);
430915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if (offset == old_offset || (value == NULL))
431915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
432915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
433915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
43436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::GetString (error=%p,offset=%" PRIu64 ") => "
435915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%p)", error.get(), offset, value);
436915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
437915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
438915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
439915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatabool
44015ef51e3bd8229d3779f96e08b25b26182c91c6cGreg ClaytonSBData::GetDescription (lldb::SBStream &description, lldb::addr_t base_addr)
441915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
44296154be69fa240a662419183ed08e1cfc5418164Greg Clayton    Stream &strm = description.ref();
44396154be69fa240a662419183ed08e1cfc5418164Greg Clayton
444915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (m_opaque_sp)
445915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
44696154be69fa240a662419183ed08e1cfc5418164Greg Clayton        m_opaque_sp->Dump (&strm,
44796154be69fa240a662419183ed08e1cfc5418164Greg Clayton                           0,
44896154be69fa240a662419183ed08e1cfc5418164Greg Clayton                           lldb::eFormatBytesWithASCII,
44996154be69fa240a662419183ed08e1cfc5418164Greg Clayton                           1,
45096154be69fa240a662419183ed08e1cfc5418164Greg Clayton                           m_opaque_sp->GetByteSize(),
45196154be69fa240a662419183ed08e1cfc5418164Greg Clayton                           16,
45296154be69fa240a662419183ed08e1cfc5418164Greg Clayton                           base_addr,
45396154be69fa240a662419183ed08e1cfc5418164Greg Clayton                           0,
45496154be69fa240a662419183ed08e1cfc5418164Greg Clayton                           0);
455915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
456915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
45796154be69fa240a662419183ed08e1cfc5418164Greg Clayton        strm.PutCString ("No value");
458915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
459915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return true;
460915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
461915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
462915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatasize_t
463915448044bac6fdac22a33cc46697dcb771a8df2Enrico GranataSBData::ReadRawData (lldb::SBError& error,
46436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton                     lldb::offset_t offset,
465915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     void *buf,
466915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     size_t size)
467915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
468952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
469915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    void* ok = NULL;
470915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
471915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
472915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        error.SetErrorString("no value to read from");
473915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
474915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
475915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    {
476915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        uint32_t old_offset = offset;
477915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        ok = m_opaque_sp->GetU8(&offset, buf, size);
478915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        if ((offset == old_offset) || (ok == NULL))
479915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata            error.SetErrorString("unable to read data");
480915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    }
481915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
48236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton        log->Printf ("SBData::ReadRawData (error=%p,offset=%" PRIu64 ",buf=%p,size=%lu) => "
483915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%p)", error.get(), offset, buf, size, ok);
484915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return ok ? size : 0;
485915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
486915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
487915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatavoid
488a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::SetData (lldb::SBError& error,
489a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                 const void *buf,
490a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                 size_t size,
491a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                 lldb::ByteOrder endian,
492a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                 uint8_t addr_size)
493915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
494952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
495915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (!m_opaque_sp.get())
496915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        m_opaque_sp.reset(new DataExtractor(buf, size, endian, addr_size));
497915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    else
498915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        m_opaque_sp->SetData(buf, size, endian);
499915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
5007e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda        log->Printf ("SBData::SetData (error=%p,buf=%p,size=%lu,endian=%d,addr_size=%c) => "
501915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%p)", error.get(), buf, size, endian, addr_size, m_opaque_sp.get());
502915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata}
503915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
504915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatabool
505a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::Append (const SBData& rhs)
506915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
507952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
508915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    bool value = false;
509915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (m_opaque_sp.get() && rhs.m_opaque_sp.get())
510915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        value = m_opaque_sp.get()->Append(*rhs.m_opaque_sp);
511915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    if (log)
512915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata        log->Printf ("SBData::Append (rhs=%p) => "
513915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                     "(%s)", rhs.get(), value ? "true" : "false");
514915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    return value;
515141f8d98cb74262914d66a7af4732e8cb2d8699fGreg Clayton}
516a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
517a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonlldb::SBData
518a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data)
519a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
520a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!data || !data[0])
521a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return SBData();
522a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
523a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    uint32_t data_len = strlen(data);
524a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
525a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
526a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
527a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
528a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SBData ret(data_sp);
529a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
530a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return ret;
531a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
532a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
533a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonlldb::SBData
534a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len)
535a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
536a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!array || array_len == 0)
537a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return SBData();
538a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
539a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = array_len * sizeof(uint64_t);
540a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
541a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
542a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
543a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
544a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SBData ret(data_sp);
545a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
546a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return ret;
547a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
548a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
549a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonlldb::SBData
550a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len)
551a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
552a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!array || array_len == 0)
553a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return SBData();
554a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
555a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = array_len * sizeof(uint32_t);
556a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
557a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
558a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
559a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
560a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SBData ret(data_sp);
561a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
562a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return ret;
563a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
564a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
565a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonlldb::SBData
566a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len)
567a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
568a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!array || array_len == 0)
569a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return SBData();
570a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
571a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = array_len * sizeof(int64_t);
572a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
573a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
574a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
575a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
576a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SBData ret(data_sp);
577a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
578a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return ret;
579a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
580a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
581a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonlldb::SBData
582a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len)
583a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
584a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!array || array_len == 0)
585a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return SBData();
586a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
587a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = array_len * sizeof(int32_t);
588a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
589a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
590a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
591a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
592a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SBData ret(data_sp);
593a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
594a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return ret;
595a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
596a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
597a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonlldb::SBData
598a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len)
599a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
600a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!array || array_len == 0)
601a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return SBData();
602a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
603a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = array_len * sizeof(double);
604a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
605a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
606a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
607a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
608a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SBData ret(data_sp);
609a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
610a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return ret;
611a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
612a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
613a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonbool
614a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::SetDataFromCString (const char* data)
615a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
616952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
617a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
618a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!data)
619a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    {
620a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        if (log)
621a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton            log->Printf ("SBData::SetDataFromCString (data=%p) => "
622a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                         "false", data);
623a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return false;
624a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    }
625a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
626a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = strlen(data);
627a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
628a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
629a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
630a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!m_opaque_sp.get())
631a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
632a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    else
633a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp->SetData(buffer_sp);
634a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
635a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (log)
636a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        log->Printf ("SBData::SetDataFromCString (data=%p) => "
637a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                     "true", data);
638a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
639a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return true;
640a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
641a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
642a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonbool
643a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::SetDataFromUInt64Array (uint64_t* array, size_t array_len)
644a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
645952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
646a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
647a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!array || array_len == 0)
648a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    {
649a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        if (log)
650a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton            log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => "
651a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                         "false", array, array_len);
652a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return false;
653a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    }
654a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
655a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = array_len * sizeof(uint64_t);
656a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
657a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
658a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
659a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!m_opaque_sp.get())
660a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
661a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    else
662a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp->SetData(buffer_sp);
663a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
664a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (log)
665a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => "
666a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                     "true", array, array_len);
667a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
668a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return true;
669a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
670a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
671a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonbool
672a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::SetDataFromUInt32Array (uint32_t* array, size_t array_len)
673a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
674952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
675a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
676a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!array || array_len == 0)
677a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    {
678a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        if (log)
679a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton            log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => "
680a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                         "false", array, array_len);
681a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return false;
682a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    }
683a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
684a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = array_len * sizeof(uint32_t);
685a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
686a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
687a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
688a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!m_opaque_sp.get())
689a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
690a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    else
691a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp->SetData(buffer_sp);
692a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
693a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (log)
694a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => "
695a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                     "true", array, array_len);
696a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
697a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return true;
698a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
699a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
700a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonbool
701a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::SetDataFromSInt64Array (int64_t* array, size_t array_len)
702a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
703952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
704a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
705a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!array || array_len == 0)
706a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    {
707a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        if (log)
708a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton            log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => "
709a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                         "false", array, array_len);
710a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return false;
711a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    }
712a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
713a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = array_len * sizeof(int64_t);
714a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
715a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
716a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
717a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!m_opaque_sp.get())
718a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
719a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    else
720a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp->SetData(buffer_sp);
721a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
722a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (log)
723a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => "
724a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                     "true", array, array_len);
725a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
726a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return true;
727a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
728a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
729a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonbool
730a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::SetDataFromSInt32Array (int32_t* array, size_t array_len)
731a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
732952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
733a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
734a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!array || array_len == 0)
735a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    {
736a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        if (log)
737a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton            log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => "
738a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                         "false", array, array_len);
739a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return false;
740a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    }
741a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
742a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = array_len * sizeof(int32_t);
743a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
744a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
745a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
746a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!m_opaque_sp.get())
747a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
748a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    else
749a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp->SetData(buffer_sp);
750a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
751a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (log)
752a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => "
753a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                     "true", array, array_len);
754a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
755a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return true;
756a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
757a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
758a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Claytonbool
759a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg ClaytonSBData::SetDataFromDoubleArray (double* array, size_t array_len)
760a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton{
761952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton    Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
762a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
763a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!array || array_len == 0)
764a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    {
765a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        if (log)
766a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton            log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => "
767a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                         "false", array, array_len);
768a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        return false;
769a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    }
770a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
771a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    size_t data_len = array_len * sizeof(double);
772a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
773a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
774a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
775a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (!m_opaque_sp.get())
776a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
777a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    else
778a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        m_opaque_sp->SetData(buffer_sp);
779a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
780a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    if (log)
781a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton        log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => "
782a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton                     "true", array, array_len);
783a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
784a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    return true;
785a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton}
786