1915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata//===-- SBData.h -----------------------------------------------*- 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#ifndef LLDB_SBData_h_
11915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#define LLDB_SBData_h_
12915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
13915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#include "lldb/API/SBDefines.h"
14915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
15915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatanamespace lldb {
16915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
17915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataclass SBData
18915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata{
19915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granatapublic:
20915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
21915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    SBData ();
22915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
23915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    SBData (const SBData &rhs);
24915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
25915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    const SBData &
26915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    operator = (const SBData &rhs);
27915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
28915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ~SBData ();
29915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
30915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint8_t
31915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetAddressByteSize ();
32915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
33915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    void
34a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SetAddressByteSize (uint8_t addr_byte_size);
35a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
36a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    void
37915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    Clear ();
38915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
39915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    bool
40915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    IsValid();
41915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
42915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    size_t
43915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetByteSize ();
44915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
45915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::ByteOrder
46915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetByteOrder();
47915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
48a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    void
49a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SetByteOrder (lldb::ByteOrder endian);
50a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
51915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    float
5236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetFloat (lldb::SBError& error, lldb::offset_t offset);
53915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
54915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    double
5536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetDouble (lldb::SBError& error, lldb::offset_t offset);
56915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
57915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    long double
5836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetLongDouble (lldb::SBError& error, lldb::offset_t offset);
59915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
60915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::addr_t
6136da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetAddress (lldb::SBError& error, lldb::offset_t offset);
62915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
63915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint8_t
6436da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetUnsignedInt8 (lldb::SBError& error, lldb::offset_t offset);
65915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
66915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint16_t
6736da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetUnsignedInt16 (lldb::SBError& error, lldb::offset_t offset);
68915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
69915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint32_t
7036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetUnsignedInt32 (lldb::SBError& error, lldb::offset_t offset);
71915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
72915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint64_t
7336da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetUnsignedInt64 (lldb::SBError& error, lldb::offset_t offset);
74915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
75915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int8_t
7636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetSignedInt8 (lldb::SBError& error, lldb::offset_t offset);
77915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
78915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int16_t
7936da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetSignedInt16 (lldb::SBError& error, lldb::offset_t offset);
80915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
81915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int32_t
8236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetSignedInt32 (lldb::SBError& error, lldb::offset_t offset);
83915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
84915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int64_t
8536da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetSignedInt64 (lldb::SBError& error, lldb::offset_t offset);
86915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
87915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    const char*
8836da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    GetString (lldb::SBError& error, lldb::offset_t offset);
89915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
90915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    size_t
91915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ReadRawData (lldb::SBError& error,
9236da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton                 lldb::offset_t offset,
93915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                 void *buf,
94915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                 size_t size);
95915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
96915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    bool
9715ef51e3bd8229d3779f96e08b25b26182c91c6cGreg Clayton    GetDescription (lldb::SBStream &description, lldb::addr_t base_addr = LLDB_INVALID_ADDRESS);
98915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
99915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // it would be nice to have SetData(SBError, const void*, size_t) when endianness and address size can be
100915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // inferred from the existing DataExtractor, but having two SetData() signatures triggers a SWIG bug where
101915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // the typemap isn't applied before resolving the overload, and thus the right function never gets called
102915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    void
103a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SetData (lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size);
104915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
105915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // see SetData() for why we don't have Append(const void* buf, size_t size)
106915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    bool
107a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    Append (const SBData& rhs);
108a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
109a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    static lldb::SBData
110a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data);
111a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
112a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    // in the following CreateData*() and SetData*() prototypes, the two parameters array and array_len
113a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    // should not be renamed or rearranged, because doing so will break the SWIG typemap
114a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    static lldb::SBData
115a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len);
116a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
117a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    static lldb::SBData
118a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len);
119a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
120a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    static lldb::SBData
121a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len);
122a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
123a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    static lldb::SBData
124a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len);
125a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
126a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    static lldb::SBData
127a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len);
128a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
129a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    bool
130a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SetDataFromCString (const char* data);
131a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
132a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    bool
133a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SetDataFromUInt64Array (uint64_t* array, size_t array_len);
134a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
135a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    bool
136a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SetDataFromUInt32Array (uint32_t* array, size_t array_len);
137a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
138a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    bool
139a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SetDataFromSInt64Array (int64_t* array, size_t array_len);
140a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
141a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    bool
142a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SetDataFromSInt32Array (int32_t* array, size_t array_len);
143a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
144a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    bool
145a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton    SetDataFromDoubleArray (double* array, size_t array_len);
146a6b7e323caa2bbd1b2835dcce775340b27c13bf3Greg Clayton
147915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
148915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataprotected:
149915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
150915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // Mimic shared pointer...
151915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb_private::DataExtractor *
152915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    get() const;
153915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
154915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb_private::DataExtractor *
155915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    operator->() const;
156915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
157915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::DataExtractorSP &
158915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    operator*();
159915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
160915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    const lldb::DataExtractorSP &
161915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    operator*() const;
162915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
163915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    SBData (const lldb::DataExtractorSP &data_sp);
164915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
165915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    void
166915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    SetOpaque (const lldb::DataExtractorSP &data_sp);
167915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
168915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataprivate:
16923b8abbe214c252028f6e09f79169529c846409dGreg Clayton    friend class SBInstruction;
1709f074f0e030a74a3efd716a476b436f2d32bdf74Johnny Chen    friend class SBProcess;
1713e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    friend class SBSection;
17223b8abbe214c252028f6e09f79169529c846409dGreg Clayton    friend class SBValue;
1733e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton
174915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::DataExtractorSP  m_opaque_sp;
175915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata};
176915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
177915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
178915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata} // namespace lldb
179915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
180915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#endif // LLDB_SBData_h_
181