SBData.h revision 15ef51e3bd8229d3779f96e08b25b26182c91c6c
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#ifndef SWIG
26915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    const SBData &
27915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    operator = (const SBData &rhs);
28915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#endif
29915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
30915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ~SBData ();
31915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
32915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint8_t
33915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetAddressByteSize ();
34915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
35915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    void
36915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    Clear ();
37915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
38915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    bool
39915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    IsValid();
40915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
41915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    size_t
42915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetByteSize ();
43915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
44915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::ByteOrder
45915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetByteOrder();
46915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
47915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    float
48915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetFloat (lldb::SBError& error, uint32_t offset);
49915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
50915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    double
51915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetDouble (lldb::SBError& error, uint32_t offset);
52915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
53915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    long double
54915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetLongDouble (lldb::SBError& error, uint32_t offset);
55915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
56915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::addr_t
57915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetAddress (lldb::SBError& error, uint32_t offset);
58915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
59915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint8_t
60915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetUnsignedInt8 (lldb::SBError& error, uint32_t offset);
61915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
62915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint16_t
63915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetUnsignedInt16 (lldb::SBError& error, uint32_t offset);
64915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
65915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint32_t
66915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetUnsignedInt32 (lldb::SBError& error, uint32_t offset);
67915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
68915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    uint64_t
69915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetUnsignedInt64 (lldb::SBError& error, uint32_t offset);
70915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
71915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int8_t
72915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetSignedInt8 (lldb::SBError& error, uint32_t offset);
73915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
74915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int16_t
75915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetSignedInt16 (lldb::SBError& error, uint32_t offset);
76915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
77915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int32_t
78915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetSignedInt32 (lldb::SBError& error, uint32_t offset);
79915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
80915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    int64_t
81915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetSignedInt64 (lldb::SBError& error, uint32_t offset);
82915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
83915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    const char*
84915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    GetString (lldb::SBError& error, uint32_t offset);
85915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
86915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    size_t
87915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    ReadRawData (lldb::SBError& error,
88915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                 uint32_t offset,
89915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                 void *buf,
90915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                 size_t size);
91915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
92915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    bool
9315ef51e3bd8229d3779f96e08b25b26182c91c6cGreg Clayton    GetDescription (lldb::SBStream &description, lldb::addr_t base_addr = LLDB_INVALID_ADDRESS);
94915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
95915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // it would be nice to have SetData(SBError, const void*, size_t) when endianness and address size can be
96915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // inferred from the existing DataExtractor, but having two SetData() signatures triggers a SWIG bug where
97915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // the typemap isn't applied before resolving the overload, and thus the right function never gets called
98915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    void
99915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    SetData(lldb::SBError& error, const void *buf, size_t size, lldb::ByteOrder endian, uint8_t addr_size);
100915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
101915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // see SetData() for why we don't have Append(const void* buf, size_t size)
102915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    bool
103915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    Append(const SBData& rhs);
104915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
105915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataprotected:
106915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
107915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#ifndef SWIG
108915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    // Mimic shared pointer...
109915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb_private::DataExtractor *
110915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    get() const;
111915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
112915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb_private::DataExtractor *
113915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    operator->() const;
114915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
115915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::DataExtractorSP &
116915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    operator*();
117915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
118915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    const lldb::DataExtractorSP &
119915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    operator*() const;
120915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#endif
121915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
122915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    SBData (const lldb::DataExtractorSP &data_sp);
123915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
124915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    void
125915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    SetOpaque (const lldb::DataExtractorSP &data_sp);
126915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
127915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataprivate:
128915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    friend class SBValue;
1293e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    friend class SBSection;
1303e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton
131915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    lldb::DataExtractorSP  m_opaque_sp;
132915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata};
133915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
134915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
135915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata} // namespace lldb
136915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata
137915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata#endif // LLDB_SBData_h_
138