From 9fc845c1746a83afc4e847895913851576945000 Mon Sep 17 00:00:00 2001
From: Mike Buland <eichlan@xagasoft.com>
Date: Wed, 9 Aug 2023 13:00:19 -0700
Subject: Added a temporory String -> Blob constructor.

Just to ease the transition.
---
 src/unstable/blob.cpp | 27 +++++++++++++++++++++++++++
 src/unstable/blob.h   |  5 +++++
 2 files changed, 32 insertions(+)

diff --git a/src/unstable/blob.cpp b/src/unstable/blob.cpp
index d343963..bf8cb5a 100644
--- a/src/unstable/blob.cpp
+++ b/src/unstable/blob.cpp
@@ -10,6 +10,9 @@
 #include "bu/exceptioninvaliditerator.h"
 #include "bu/exceptionindexoutofbounds.h"
 
+// Temporary
+#include "bu/string.h"
+
 #include <string.h>
 
 Bu::Blob::Blob() :
@@ -97,6 +100,14 @@ Bu::Blob::Blob( const Bu::Blob::const_iterator &iStart,
     pData[iSize] = 0;
 }
 
+Bu::Blob::Blob( const Bu::String &rSrc ) :
+    pData( 0 ),
+    iSize( rSrc.getSize() )
+{
+    pData = new char[rSrc.getSize()+1];
+    memcpy( pData, rSrc.getStr(), iSize+1 );
+}
+
 Bu::Blob::~Blob()
 {
     delete[] pData;
@@ -117,6 +128,15 @@ int32_t Bu::Blob::getSize() const
     return iSize;
 }
 
+void Bu::Blob::setData( const char *pSrc, int32_t iSize )
+{
+    delete[] pData;
+    pData = new char[iSize+1];
+    memset( pData, iSize, 1 );
+    this->iSize = iSize;
+    memcpy( pData, pSrc, iSize );
+}
+
 char *Bu::Blob::getData() const
 {
     return pData;
@@ -817,6 +837,13 @@ Bu::Formatter &Bu::operator<<( Bu::Formatter &rOut, const Bu::Blob &b )
     return rOut;
 }
 
+Bu::Formatter &Bu::operator>>( Bu::Formatter &fIn, Bu::Blob &b )
+{
+    Bu::String sTmp = fIn.readToken();
+    b.setData( sTmp.getStr(), sTmp.getSize() );
+    return fIn;
+}
+
 Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, const Bu::Blob &b )
 {
     int32_t iSize = b.getSize();
diff --git a/src/unstable/blob.h b/src/unstable/blob.h
index 2866ab2..2a665ad 100644
--- a/src/unstable/blob.h
+++ b/src/unstable/blob.h
@@ -46,10 +46,14 @@ namespace Bu
         Blob( int32_t iSize );
         Blob( const const_iterator &iStart );
         Blob( const const_iterator &iStart, const const_iterator &iEnd );
+
+        // Obviously temporary
+        Blob( const Bu::String &rSrc );
         virtual ~Blob();
 
         void setSize( int32_t iSize );
         int32_t getSize() const;
+        void setData( const char *pSrc, int32_t iSize );
         char *getData() const;
         char *c_str() const;
 
@@ -184,6 +188,7 @@ namespace Bu
 
     class Formatter;
     Formatter &operator<<( Formatter &rOut, const Blob &b );
+    Formatter &operator>>( Formatter &fIn, Blob &b );
 }
 
 #endif
-- 
cgit v1.2.3