diff options
author | Mike Buland <eichlan@xagasoft.com> | 2019-08-08 09:59:52 -0700 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2019-08-08 09:59:52 -0700 |
commit | 238244337283a7f888cf49a1e56b809c22466a63 (patch) | |
tree | 5262c5bfed957edc0906c002e0e94bbc88154d08 /src/unstable/blobbuilder.cpp | |
parent | af4bc8816eb4b4cb4821b24706f55b518a43968d (diff) | |
download | libbu++-238244337283a7f888cf49a1e56b809c22466a63.tar.gz libbu++-238244337283a7f888cf49a1e56b809c22466a63.tar.bz2 libbu++-238244337283a7f888cf49a1e56b809c22466a63.tar.xz libbu++-238244337283a7f888cf49a1e56b809c22466a63.zip |
Fixed a bug in the BlobBuilder.
Appending wasn't working correctly.
Diffstat (limited to 'src/unstable/blobbuilder.cpp')
-rw-r--r-- | src/unstable/blobbuilder.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/unstable/blobbuilder.cpp b/src/unstable/blobbuilder.cpp index 497a1a1..43c0779 100644 --- a/src/unstable/blobbuilder.cpp +++ b/src/unstable/blobbuilder.cpp | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | #include "bu/blobbuilder.h" | 8 | #include "bu/blobbuilder.h" |
9 | #include "bu/blob.h" | 9 | #include "bu/blob.h" |
10 | #include "bu/exceptionbase.h" | ||
10 | 11 | ||
11 | #define PAGE_SIZE 8 | 12 | #define PAGE_SIZE 8 |
12 | 13 | ||
@@ -132,6 +133,7 @@ void Bu::BlobBuilderCore::append( const char *pSrc, int32_t iLength ) | |||
132 | if( iLength > 0 ) | 133 | if( iLength > 0 ) |
133 | { | 134 | { |
134 | pLast->pNext = new Chunk( pSrc, iLength ); | 135 | pLast->pNext = new Chunk( pSrc, iLength ); |
136 | pLast = pLast->pNext; | ||
135 | } | 137 | } |
136 | } | 138 | } |
137 | 139 | ||
@@ -214,6 +216,21 @@ void Bu::BlobBuilderCore::copyTo( void *pDestRaw, int32_t iLength ) const | |||
214 | } | 216 | } |
215 | } | 217 | } |
216 | 218 | ||
219 | char Bu::BlobBuilderCore::getAt( int32_t iIndex ) const | ||
220 | { | ||
221 | if( iIndex < 0 || iIndex >= iLength ) | ||
222 | throw Bu::ExceptionBase("Requseted index is out of range."); | ||
223 | |||
224 | Chunk *pCur = pFirst; | ||
225 | while( iIndex >= pCur->iLength ) | ||
226 | { | ||
227 | iIndex -= pCur->iLength; | ||
228 | pCur = pCur->pNext; | ||
229 | } | ||
230 | |||
231 | return pCur->pData[iIndex]; | ||
232 | } | ||
233 | |||
217 | ////// | 234 | ////// |
218 | // BlobBuilder | 235 | // BlobBuilder |
219 | // | 236 | // |
@@ -245,6 +262,7 @@ void Bu::BlobBuilder::set( const char *pSrc, int32_t iLength ) | |||
245 | 262 | ||
246 | void Bu::BlobBuilder::set( const char *pSrc ) | 263 | void Bu::BlobBuilder::set( const char *pSrc ) |
247 | { | 264 | { |
265 | _hardCopy(); | ||
248 | set( pSrc, strlen( pSrc ) ); | 266 | set( pSrc, strlen( pSrc ) ); |
249 | } | 267 | } |
250 | 268 | ||
@@ -262,6 +280,7 @@ void Bu::BlobBuilder::append( const char *pSrc, int32_t iLength ) | |||
262 | 280 | ||
263 | void Bu::BlobBuilder::append( const char *pSrc ) | 281 | void Bu::BlobBuilder::append( const char *pSrc ) |
264 | { | 282 | { |
283 | _hardCopy(); | ||
265 | append( pSrc, strlen( pSrc ) ); | 284 | append( pSrc, strlen( pSrc ) ); |
266 | } | 285 | } |
267 | 286 | ||
@@ -279,6 +298,7 @@ void Bu::BlobBuilder::prepend( const char *pSrc, int32_t iLength ) | |||
279 | 298 | ||
280 | void Bu::BlobBuilder::prepend( const char *pSrc ) | 299 | void Bu::BlobBuilder::prepend( const char *pSrc ) |
281 | { | 300 | { |
301 | _hardCopy(); | ||
282 | prepend( pSrc, strlen( pSrc ) ); | 302 | prepend( pSrc, strlen( pSrc ) ); |
283 | } | 303 | } |
284 | 304 | ||
@@ -297,6 +317,7 @@ void Bu::BlobBuilder::insert( int32_t iBefore, const char *pSrc, | |||
297 | 317 | ||
298 | void Bu::BlobBuilder::insert( int32_t iBefore, const char *pSrc ) | 318 | void Bu::BlobBuilder::insert( int32_t iBefore, const char *pSrc ) |
299 | { | 319 | { |
320 | _hardCopy(); | ||
300 | insert( iBefore, pSrc, strlen( pSrc ) ); | 321 | insert( iBefore, pSrc, strlen( pSrc ) ); |
301 | } | 322 | } |
302 | 323 | ||
@@ -321,6 +342,11 @@ void Bu::BlobBuilder::copyTo( void *pDestRaw, int32_t iDestSize ) const | |||
321 | core->copyTo( pDestRaw, iDestSize ); | 342 | core->copyTo( pDestRaw, iDestSize ); |
322 | } | 343 | } |
323 | 344 | ||
345 | char Bu::BlobBuilder::operator[]( int32_t iIndex ) const | ||
346 | { | ||
347 | return core->getAt( iIndex ); | ||
348 | } | ||
349 | |||
324 | Bu::BlobBuilder &Bu::BlobBuilder::operator=( const Blob &rSrc ) | 350 | Bu::BlobBuilder &Bu::BlobBuilder::operator=( const Blob &rSrc ) |
325 | { | 351 | { |
326 | set( rSrc ); | 352 | set( rSrc ); |
@@ -333,6 +359,12 @@ Bu::BlobBuilder &Bu::BlobBuilder::operator=( const char *pSrc ) | |||
333 | return *this; | 359 | return *this; |
334 | } | 360 | } |
335 | 361 | ||
362 | Bu::BlobBuilder &Bu::BlobBuilder::operator=( const char chr ) | ||
363 | { | ||
364 | set( &chr, 1 ); | ||
365 | return *this; | ||
366 | } | ||
367 | |||
336 | Bu::BlobBuilder &Bu::BlobBuilder::operator+=( const Blob &rSrc ) | 368 | Bu::BlobBuilder &Bu::BlobBuilder::operator+=( const Blob &rSrc ) |
337 | { | 369 | { |
338 | append( rSrc ); | 370 | append( rSrc ); |
@@ -345,4 +377,9 @@ Bu::BlobBuilder &Bu::BlobBuilder::operator+=( const char *pSrc ) | |||
345 | return *this; | 377 | return *this; |
346 | } | 378 | } |
347 | 379 | ||
380 | Bu::BlobBuilder &Bu::BlobBuilder::operator+=( const char chr ) | ||
381 | { | ||
382 | append( &chr, 1 ); | ||
383 | return *this; | ||
384 | } | ||
348 | 385 | ||