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_ 155