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 SBData 18 { 19 public: 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 148 protected: 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 168 private: 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