SBData.h revision 36da2aa6dc5ad9994b638ed09eb81c44cc05540b
1//===-- SBData.h -----------------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLDB_SBData_h_
11#define LLDB_SBData_h_
12
13#include "lldb/API/SBDefines.h"
14
15namespace lldb {
16
17class SBData
18{
19public:
20
21    SBData ();
22
23    SBData (const SBData &rhs);
24
25    const SBData &
26    operator = (const SBData &rhs);
27
28    ~SBData ();
29
30    uint8_t
31    GetAddressByteSize ();
32
33    void
34    SetAddressByteSize (uint8_t addr_byte_size);
35
36    void
37    Clear ();
38
39    bool
40    IsValid();
41
42    size_t
43    GetByteSize ();
44
45    lldb::ByteOrder
46    GetByteOrder();
47
48    void
49    SetByteOrder (lldb::ByteOrder endian);
50
51    float
52    GetFloat (lldb::SBError& error, lldb::offset_t offset);
53
54    double
55    GetDouble (lldb::SBError& error, lldb::offset_t offset);
56
57    long double
58    GetLongDouble (lldb::SBError& error, lldb::offset_t offset);
59
60    lldb::addr_t
61    GetAddress (lldb::SBError& error, lldb::offset_t offset);
62
63    uint8_t
64    GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset);
65
66    uint16_t
67    GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset);
68
69    uint32_t
70    GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset);
71
72    uint64_t
73    GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset);
74
75    int8_t
76    GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset);
77
78    int16_t
79    GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset);
80
81    int32_t
82    GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset);
83
84    int64_t
85    GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset);
86
87    const char*
88    GetString (lldb::SBError& error, lldb::offset_t offset);
89
90    size_t
91    ReadRawData (lldb::SBError& error,
92                 lldb::offset_t offset,
93                 void *buf,
94                 size_t size);
95
96    bool
97    GetDescription (lldb::SBStream &description, lldb::addr_t base_addr = LLDB_INVALID_ADDRESS);
98
99    // it would be nice to have SetData(SBError, const void*, size_t) when endianness and address size can be
100    // inferred from the existing DataExtractor, but having two SetData() signatures triggers a SWIG bug where
101    // the typemap isn't applied before resolving the overload, and thus the right function never gets called
102    void
103    SetData (lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size);
104
105    // see SetData() for why we don't have Append(const void* buf, size_t size)
106    bool
107    Append (const SBData& rhs);
108
109    static lldb::SBData
110    CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data);
111
112    // in the following CreateData*() and SetData*() prototypes, the two parameters array and array_len
113    // should not be renamed or rearranged, because doing so will break the SWIG typemap
114    static lldb::SBData
115    CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len);
116
117    static lldb::SBData
118    CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len);
119
120    static lldb::SBData
121    CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len);
122
123    static lldb::SBData
124    CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len);
125
126    static lldb::SBData
127    CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len);
128
129    bool
130    SetDataFromCString (const char* data);
131
132    bool
133    SetDataFromUInt64Array (uint64_t* array, size_t array_len);
134
135    bool
136    SetDataFromUInt32Array (uint32_t* array, size_t array_len);
137
138    bool
139    SetDataFromSInt64Array (int64_t* array, size_t array_len);
140
141    bool
142    SetDataFromSInt32Array (int32_t* array, size_t array_len);
143
144    bool
145    SetDataFromDoubleArray (double* array, size_t array_len);
146
147
148protected:
149
150    // Mimic shared pointer...
151    lldb_private::DataExtractor *
152    get() const;
153
154    lldb_private::DataExtractor *
155    operator->() const;
156
157    lldb::DataExtractorSP &
158    operator*();
159
160    const lldb::DataExtractorSP &
161    operator*() const;
162
163    SBData (const lldb::DataExtractorSP &data_sp);
164
165    void
166    SetOpaque (const lldb::DataExtractorSP &data_sp);
167
168private:
169    friend class SBInstruction;
170    friend class SBProcess;
171    friend class SBSection;
172    friend class SBValue;
173
174    lldb::DataExtractorSP  m_opaque_sp;
175};
176
177
178} // namespace lldb
179
180#endif // LLDB_SBData_h_
181