SBData.h revision 7dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//===-- SBData.h -----------------------------------------------*- C++ -*-===//
2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//
3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// License. See LICENSE.TXT for details.
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//===----------------------------------------------------------------------===//
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef LLDB_SBData_h_
11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define LLDB_SBData_h_
12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "lldb/API/SBDefines.h"
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace lldb {
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class SBData
18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles){
19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochpublic:
20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    SBData ();
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    SBData (const SBData &rhs);
24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    const SBData &
26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    operator = (const SBData &rhs);
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    ~SBData ();
29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    uint8_t
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    GetAddressByteSize ();
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    void
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    SetAddressByteSize (uint8_t addr_byte_size);
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    void
37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    Clear ();
38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    bool
40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    IsValid();
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    size_t
43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    GetByteSize ();
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    lldb::ByteOrder
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    GetByteOrder();
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    void
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    SetByteOrder (lldb::ByteOrder endian);
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    float
524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    GetFloat (lldb::SBError& error, uint32_t offset);
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    double
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    GetDouble (lldb::SBError& error, uint32_t offset);
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    long double
584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    GetLongDouble (lldb::SBError& error, uint32_t offset);
594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    lldb::addr_t
614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    GetAddress (lldb::SBError& error, uint32_t offset);
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
63ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    uint8_t
64ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    GetUnsignedInt8 (lldb::SBError& error, uint32_t offset);
65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    uint16_t
67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    GetUnsignedInt16 (lldb::SBError& error, uint32_t offset);
68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    uint32_t
70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    GetUnsignedInt32 (lldb::SBError& error, uint32_t offset);
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    uint64_t
73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    GetUnsignedInt64 (lldb::SBError& error, uint32_t offset);
74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
75ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    int8_t
76ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    GetSignedInt8 (lldb::SBError& error, uint32_t offset);
77ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
78ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    int16_t
79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    GetSignedInt16 (lldb::SBError& error, uint32_t offset);
80ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
81ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    int32_t
82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    GetSignedInt32 (lldb::SBError& error, uint32_t offset);
83ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
84ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    int64_t
85ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    GetSignedInt64 (lldb::SBError& error, uint32_t offset);
8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const char*
88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    GetString (lldb::SBError& error, uint32_t offset);
89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    size_t
91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ReadRawData (lldb::SBError& error,
92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                 uint32_t offset,
93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                 void *buf,
944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                 size_t size);
954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    bool
97868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    GetDescription (lldb::SBStream &description, lldb::addr_t base_addr = LLDB_INVALID_ADDRESS);
98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // it would be nice to have SetData(SBError, const void*, size_t) when endianness and address size can be
10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // inferred from the existing DataExtractor, but having two SetData() signatures triggers a SWIG bug where
101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    // the typemap isn't applied before resolving the overload, and thus the right function never gets called
102868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    void
1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    SetData (lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size);
1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
105868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    // see SetData() for why we don't have Append(const void* buf, size_t size)
106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    bool
10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    Append (const SBData& rhs);
1083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    static lldb::SBData
1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data);
111ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
112ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    // in the following CreateData*() and SetData*() prototypes, the two parameters array and array_len
113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    // should not be renamed or rearranged, because doing so will break the SWIG typemap
114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    static lldb::SBData
115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len);
116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    static lldb::SBData
11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len);
119868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    static lldb::SBData
1217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len);
1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
123ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    static lldb::SBData
124ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len);
125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
126868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    static lldb::SBData
127868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len);
128ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    bool
130ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    SetDataFromCString (const char* data);
131ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
132ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    bool
1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    SetDataFromUInt64Array (uint64_t* array, size_t array_len);
1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    bool
1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    SetDataFromUInt32Array (uint32_t* array, size_t array_len);
137ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
138ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    bool
139ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    SetDataFromSInt64Array (int64_t* array, size_t array_len);
1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    bool
142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    SetDataFromSInt32Array (int32_t* array, size_t array_len);
143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    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