]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/API/SBData.h
Merge clang 7.0.1 and several follow-up changes
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / API / SBData.h
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
15 namespace lldb {
16
17 class LLDB_API SBData {
18 public:
19   SBData();
20
21   SBData(const SBData &rhs);
22
23   const SBData &operator=(const SBData &rhs);
24
25   ~SBData();
26
27   uint8_t GetAddressByteSize();
28
29   void SetAddressByteSize(uint8_t addr_byte_size);
30
31   void Clear();
32
33   bool IsValid();
34
35   size_t GetByteSize();
36
37   lldb::ByteOrder GetByteOrder();
38
39   void SetByteOrder(lldb::ByteOrder endian);
40
41   float GetFloat(lldb::SBError &error, lldb::offset_t offset);
42
43   double GetDouble(lldb::SBError &error, lldb::offset_t offset);
44
45   long double GetLongDouble(lldb::SBError &error, lldb::offset_t offset);
46
47   lldb::addr_t GetAddress(lldb::SBError &error, lldb::offset_t offset);
48
49   uint8_t GetUnsignedInt8(lldb::SBError &error, lldb::offset_t offset);
50
51   uint16_t GetUnsignedInt16(lldb::SBError &error, lldb::offset_t offset);
52
53   uint32_t GetUnsignedInt32(lldb::SBError &error, lldb::offset_t offset);
54
55   uint64_t GetUnsignedInt64(lldb::SBError &error, lldb::offset_t offset);
56
57   int8_t GetSignedInt8(lldb::SBError &error, lldb::offset_t offset);
58
59   int16_t GetSignedInt16(lldb::SBError &error, lldb::offset_t offset);
60
61   int32_t GetSignedInt32(lldb::SBError &error, lldb::offset_t offset);
62
63   int64_t GetSignedInt64(lldb::SBError &error, lldb::offset_t offset);
64
65   const char *GetString(lldb::SBError &error, lldb::offset_t offset);
66
67   size_t ReadRawData(lldb::SBError &error, lldb::offset_t offset, void *buf,
68                      size_t size);
69
70   bool GetDescription(lldb::SBStream &description,
71                       lldb::addr_t base_addr = LLDB_INVALID_ADDRESS);
72
73   // it would be nice to have SetData(SBError, const void*, size_t) when
74   // endianness and address size can be inferred from the existing
75   // DataExtractor, but having two SetData() signatures triggers a SWIG bug
76   // where the typemap isn't applied before resolving the overload, and thus
77   // the right function never gets called
78   void SetData(lldb::SBError &error, const void *buf, size_t size,
79                lldb::ByteOrder endian, uint8_t addr_size);
80
81   // see SetData() for why we don't have Append(const void* buf, size_t size)
82   bool Append(const SBData &rhs);
83
84   static lldb::SBData CreateDataFromCString(lldb::ByteOrder endian,
85                                             uint32_t addr_byte_size,
86                                             const char *data);
87
88   // in the following CreateData*() and SetData*() prototypes, the two
89   // parameters array and array_len should not be renamed or rearranged,
90   // because doing so will break the SWIG typemap
91   static lldb::SBData CreateDataFromUInt64Array(lldb::ByteOrder endian,
92                                                 uint32_t addr_byte_size,
93                                                 uint64_t *array,
94                                                 size_t array_len);
95
96   static lldb::SBData CreateDataFromUInt32Array(lldb::ByteOrder endian,
97                                                 uint32_t addr_byte_size,
98                                                 uint32_t *array,
99                                                 size_t array_len);
100
101   static lldb::SBData CreateDataFromSInt64Array(lldb::ByteOrder endian,
102                                                 uint32_t addr_byte_size,
103                                                 int64_t *array,
104                                                 size_t array_len);
105
106   static lldb::SBData CreateDataFromSInt32Array(lldb::ByteOrder endian,
107                                                 uint32_t addr_byte_size,
108                                                 int32_t *array,
109                                                 size_t array_len);
110
111   static lldb::SBData CreateDataFromDoubleArray(lldb::ByteOrder endian,
112                                                 uint32_t addr_byte_size,
113                                                 double *array,
114                                                 size_t array_len);
115
116   bool SetDataFromCString(const char *data);
117
118   bool SetDataFromUInt64Array(uint64_t *array, size_t array_len);
119
120   bool SetDataFromUInt32Array(uint32_t *array, size_t array_len);
121
122   bool SetDataFromSInt64Array(int64_t *array, size_t array_len);
123
124   bool SetDataFromSInt32Array(int32_t *array, size_t array_len);
125
126   bool SetDataFromDoubleArray(double *array, size_t array_len);
127
128 protected:
129   // Mimic shared pointer...
130   lldb_private::DataExtractor *get() const;
131
132   lldb_private::DataExtractor *operator->() const;
133
134   lldb::DataExtractorSP &operator*();
135
136   const lldb::DataExtractorSP &operator*() const;
137
138   SBData(const lldb::DataExtractorSP &data_sp);
139
140   void SetOpaque(const lldb::DataExtractorSP &data_sp);
141
142 private:
143   friend class SBInstruction;
144   friend class SBProcess;
145   friend class SBSection;
146   friend class SBTarget;
147   friend class SBValue;
148
149   lldb::DataExtractorSP m_opaque_sp;
150 };
151
152 } // namespace lldb
153
154 #endif // LLDB_SBData_h_