Patch from Enrico Granata that moves SBData related functions into the SBData
class instead of requiring a live process in order to be able to create useful
SBData objects.



git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@147702 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/API/SBData.cpp b/source/API/SBData.cpp
index f873526..60b451c 100644
--- a/source/API/SBData.cpp
+++ b/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 @@
 }
 
 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 @@
     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 @@
 }
 
 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 @@
 }
 
 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 @@
                      "(%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;
+}
diff --git a/source/API/SBProcess.cpp b/source/API/SBProcess.cpp
index 2930f28..aacec52 100644
--- a/source/API/SBProcess.cpp
+++ b/source/API/SBProcess.cpp
@@ -13,8 +13,6 @@
 #include "lldb/lldb-types.h"
 
 #include "lldb/Interpreter/Args.h"
-#include "lldb/Core/DataBufferHeap.h"
-#include "lldb/Core/DataExtractor.h"
 #include "lldb/Core/Debugger.h"
 #include "lldb/Core/Log.h"
 #include "lldb/Core/State.h"
@@ -918,130 +916,3 @@
         sb_error.SetErrorString("invalid process");
     return sb_error;
 }
-
-lldb::SBData
-SBProcess::GetDataFromCString(const char* data)
-{
-    if (!IsValid())
-        return SBData();
-    
-    if (!data || !data[0])
-        return SBData();
-    
-    uint32_t data_len = strlen(data);
-    lldb::ByteOrder byte_order = GetByteOrder();
-    uint8_t addr_size = GetAddressByteSize();
-    
-    lldb::DataBufferSP buffer_sp(new DataBufferHeap(data, data_len));
-    lldb::DataExtractorSP data_sp(new DataExtractor(buffer_sp, byte_order, addr_size));
-    
-    SBData ret(data_sp);
-    
-    return ret;
-}
-
-lldb::SBData
-SBProcess::GetDataFromUnsignedInt64Array(uint64_t* array, size_t array_len)
-{
-    if (!IsValid())
-        return SBData();
-    
-    if (!array || array_len == 0)
-        return SBData();
-    
-    lldb::ByteOrder byte_order = GetByteOrder();
-    uint8_t addr_size = GetAddressByteSize();
-    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, byte_order, addr_size));
-    
-    SBData ret(data_sp);
-    
-    return ret;
-}
-
-lldb::SBData
-SBProcess::GetDataFromUnsignedInt32Array(uint32_t* array, size_t array_len)
-{
-    if (!IsValid())
-        return SBData();
-    
-    if (!array || array_len == 0)
-        return SBData();
-    
-    lldb::ByteOrder byte_order = GetByteOrder();
-    uint8_t addr_size = GetAddressByteSize();
-    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, byte_order, addr_size));
-    
-    SBData ret(data_sp);
-    
-    return ret;
-}
-
-lldb::SBData
-SBProcess::GetDataFromSignedInt64Array(int64_t* array, size_t array_len)
-{
-    if (!IsValid())
-        return SBData();
-    
-    if (!array || array_len == 0)
-        return SBData();
-    
-    lldb::ByteOrder byte_order = GetByteOrder();
-    uint8_t addr_size = GetAddressByteSize();
-    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, byte_order, addr_size));
-    
-    SBData ret(data_sp);
-    
-    return ret;
-}
-
-lldb::SBData
-SBProcess::GetDataFromSignedInt32Array(int32_t* array, size_t array_len)
-{
-    if (!IsValid())
-        return SBData();
-    
-    if (!array || array_len == 0)
-        return SBData();
-    
-    lldb::ByteOrder byte_order = GetByteOrder();
-    uint8_t addr_size = GetAddressByteSize();
-    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, byte_order, addr_size));
-    
-    SBData ret(data_sp);
-    
-    return ret;
-}
-
-lldb::SBData
-SBProcess::GetDataFromDoubleArray(double* array, size_t array_len)
-{
-    if (!IsValid())
-        return SBData();
-        
-    if (!array || array_len == 0)
-        return SBData();
-        
-    lldb::ByteOrder byte_order = GetByteOrder();
-    uint8_t addr_size = GetAddressByteSize();
-    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, byte_order, addr_size));
-    
-    SBData ret(data_sp);
-    
-    return ret;
-}
-