summaryrefslogtreecommitdiffstats
path: root/lldb/source/API/SBData.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/API/SBData.cpp')
-rw-r--r--lldb/source/API/SBData.cpp307
1 files changed, 300 insertions, 7 deletions
diff --git a/lldb/source/API/SBData.cpp b/lldb/source/API/SBData.cpp
index f8735266236..60b451cc42d 100644
--- a/lldb/source/API/SBData.cpp
+++ b/lldb/source/API/SBData.cpp
@@ -11,6 +11,7 @@
#include "lldb/API/SBError.h"
#include "lldb/API/SBStream.h"
+#include "lldb/Core/DataBufferHeap.h"
#include "lldb/Core/DataExtractor.h"
#include "lldb/Core/Log.h"
#include "lldb/Core/Stream.h"
@@ -19,7 +20,8 @@
using namespace lldb;
using namespace lldb_private;
-SBData::SBData ()
+SBData::SBData () :
+ m_opaque_sp(new DataExtractor())
{
}
@@ -95,6 +97,16 @@ SBData::GetAddressByteSize ()
}
void
+SBData::SetAddressByteSize (uint8_t addr_byte_size)
+{
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+ if (m_opaque_sp.get())
+ m_opaque_sp->SetAddressByteSize(addr_byte_size);
+ if (log)
+ log->Printf ("SBData::SetAddressByteSize (%i)", addr_byte_size);
+}
+
+void
SBData::Clear ()
{
if (m_opaque_sp.get())
@@ -127,6 +139,17 @@ SBData::GetByteOrder ()
return value;
}
+void
+SBData::SetByteOrder (lldb::ByteOrder endian)
+{
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+ if (m_opaque_sp.get())
+ m_opaque_sp->SetByteOrder(endian);
+ if (log)
+ log->Printf ("SBData::GetByteOrder (%i)", endian);
+}
+
+
float
SBData::GetFloat (lldb::SBError& error, uint32_t offset)
{
@@ -462,11 +485,11 @@ SBData::ReadRawData (lldb::SBError& error,
}
void
-SBData::SetData(lldb::SBError& error,
- const void *buf,
- size_t size,
- lldb::ByteOrder endian,
- uint8_t addr_size)
+SBData::SetData (lldb::SBError& error,
+ const void *buf,
+ size_t size,
+ lldb::ByteOrder endian,
+ uint8_t addr_size)
{
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
if (!m_opaque_sp.get())
@@ -479,7 +502,7 @@ SBData::SetData(lldb::SBError& error,
}
bool
-SBData::Append(const SBData& rhs)
+SBData::Append (const SBData& rhs)
{
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
bool value = false;
@@ -490,3 +513,273 @@ SBData::Append(const SBData& rhs)
"(%s)", rhs.get(), value ? "true" : "false");
return value;
}
+
+lldb::SBData
+SBData::CreateDataFromCString (lldb::ByteOrder endian, uint32_t addr_byte_size, const char* data)
+{
+ if (!data || !data[0])
+ return SBData();
+
+ uint32_t data_len = strlen(data);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
+ lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
+
+ SBData ret(data_sp);
+
+ return ret;
+}
+
+lldb::SBData
+SBData::CreateDataFromUInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint64_t* array, size_t array_len)
+{
+ if (!array || array_len == 0)
+ return SBData();
+
+ size_t data_len = array_len * sizeof(uint64_t);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
+ lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
+
+ SBData ret(data_sp);
+
+ return ret;
+}
+
+lldb::SBData
+SBData::CreateDataFromUInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, uint32_t* array, size_t array_len)
+{
+ if (!array || array_len == 0)
+ return SBData();
+
+ size_t data_len = array_len * sizeof(uint32_t);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
+ lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
+
+ SBData ret(data_sp);
+
+ return ret;
+}
+
+lldb::SBData
+SBData::CreateDataFromSInt64Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int64_t* array, size_t array_len)
+{
+ if (!array || array_len == 0)
+ return SBData();
+
+ size_t data_len = array_len * sizeof(int64_t);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
+ lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
+
+ SBData ret(data_sp);
+
+ return ret;
+}
+
+lldb::SBData
+SBData::CreateDataFromSInt32Array (lldb::ByteOrder endian, uint32_t addr_byte_size, int32_t* array, size_t array_len)
+{
+ if (!array || array_len == 0)
+ return SBData();
+
+ size_t data_len = array_len * sizeof(int32_t);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
+ lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
+
+ SBData ret(data_sp);
+
+ return ret;
+}
+
+lldb::SBData
+SBData::CreateDataFromDoubleArray (lldb::ByteOrder endian, uint32_t addr_byte_size, double* array, size_t array_len)
+{
+ if (!array || array_len == 0)
+ return SBData();
+
+ size_t data_len = array_len * sizeof(double);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
+ lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, endian, addr_byte_size));
+
+ SBData ret(data_sp);
+
+ return ret;
+}
+
+bool
+SBData::SetDataFromCString (const char* data)
+{
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ if (!data)
+ {
+ if (log)
+ log->Printf ("SBData::SetDataFromCString (data=%p) => "
+ "false", data);
+ return false;
+ }
+
+ size_t data_len = strlen(data);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
+
+ if (!m_opaque_sp.get())
+ m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
+ else
+ m_opaque_sp->SetData(buffer_sp);
+
+ if (log)
+ log->Printf ("SBData::SetDataFromCString (data=%p) => "
+ "true", data);
+
+ return true;
+}
+
+bool
+SBData::SetDataFromUInt64Array (uint64_t* array, size_t array_len)
+{
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ if (!array || array_len == 0)
+ {
+ if (log)
+ log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => "
+ "false", array, array_len);
+ return false;
+ }
+
+ size_t data_len = array_len * sizeof(uint64_t);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
+
+ if (!m_opaque_sp.get())
+ m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
+ else
+ m_opaque_sp->SetData(buffer_sp);
+
+ if (log)
+ log->Printf ("SBData::SetDataFromUInt64Array (array=%p, array_len = %lu) => "
+ "true", array, array_len);
+
+ return true;
+}
+
+bool
+SBData::SetDataFromUInt32Array (uint32_t* array, size_t array_len)
+{
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ if (!array || array_len == 0)
+ {
+ if (log)
+ log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => "
+ "false", array, array_len);
+ return false;
+ }
+
+ size_t data_len = array_len * sizeof(uint32_t);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
+
+ if (!m_opaque_sp.get())
+ m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
+ else
+ m_opaque_sp->SetData(buffer_sp);
+
+ if (log)
+ log->Printf ("SBData::SetDataFromUInt32Array (array=%p, array_len = %lu) => "
+ "true", array, array_len);
+
+ return true;
+}
+
+bool
+SBData::SetDataFromSInt64Array (int64_t* array, size_t array_len)
+{
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ if (!array || array_len == 0)
+ {
+ if (log)
+ log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => "
+ "false", array, array_len);
+ return false;
+ }
+
+ size_t data_len = array_len * sizeof(int64_t);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
+
+ if (!m_opaque_sp.get())
+ m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
+ else
+ m_opaque_sp->SetData(buffer_sp);
+
+ if (log)
+ log->Printf ("SBData::SetDataFromSInt64Array (array=%p, array_len = %lu) => "
+ "true", array, array_len);
+
+ return true;
+}
+
+bool
+SBData::SetDataFromSInt32Array (int32_t* array, size_t array_len)
+{
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ if (!array || array_len == 0)
+ {
+ if (log)
+ log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => "
+ "false", array, array_len);
+ return false;
+ }
+
+ size_t data_len = array_len * sizeof(int32_t);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
+
+ if (!m_opaque_sp.get())
+ m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
+ else
+ m_opaque_sp->SetData(buffer_sp);
+
+ if (log)
+ log->Printf ("SBData::SetDataFromSInt32Array (array=%p, array_len = %lu) => "
+ "true", array, array_len);
+
+ return true;
+}
+
+bool
+SBData::SetDataFromDoubleArray (double* array, size_t array_len)
+{
+ LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
+
+ if (!array || array_len == 0)
+ {
+ if (log)
+ log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => "
+ "false", array, array_len);
+ return false;
+ }
+
+ size_t data_len = array_len * sizeof(double);
+
+ lldb::DataBufferSP buffer_sp(new DataBufferHeap(array, data_len));
+
+ if (!m_opaque_sp.get())
+ m_opaque_sp.reset(new DataExtractor(buffer_sp, GetByteOrder(), GetAddressByteSize()));
+ else
+ m_opaque_sp->SetData(buffer_sp);
+
+ if (log)
+ log->Printf ("SBData::SetDataFromDoubleArray (array=%p, array_len = %lu) => "
+ "true", array, array_len);
+
+ return true;
+}
OpenPOWER on IntegriCloud