diff options
author | Mike Buland <mbuland@penny-arcade.com> | 2021-07-30 09:16:27 -0700 |
---|---|---|
committer | Mike Buland <mbuland@penny-arcade.com> | 2021-07-30 09:16:27 -0700 |
commit | 0fbcc3a0c7ef4835c77c5d8b87cc8732cc3f90df (patch) | |
tree | d214ecd864bbef469a9378ac5f3c05f6cd74f4da /src/stable/array.h | |
parent | 2745b2811b03e83c165b07801704f32fc5bc588d (diff) | |
download | libbu++-0fbcc3a0c7ef4835c77c5d8b87cc8732cc3f90df.tar.gz libbu++-0fbcc3a0c7ef4835c77c5d8b87cc8732cc3f90df.tar.bz2 libbu++-0fbcc3a0c7ef4835c77c5d8b87cc8732cc3f90df.tar.xz libbu++-0fbcc3a0c7ef4835c77c5d8b87cc8732cc3f90df.zip |
Fixed uninitializsed bug in Bu::Array::setSize.
When setCapacity was used before setSize some elements were not being
properly initialized in the array.
Diffstat (limited to 'src/stable/array.h')
-rw-r--r-- | src/stable/array.h | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/stable/array.h b/src/stable/array.h index ecffc6a..b089bda 100644 --- a/src/stable/array.h +++ b/src/stable/array.h | |||
@@ -297,7 +297,7 @@ namespace Bu | |||
297 | return core->iSize; | 297 | return core->iSize; |
298 | } | 298 | } |
299 | 299 | ||
300 | void setSize( long iNewLen, const value &initTo=value() ) | 300 | void setSize( long iNewLen ) |
301 | { | 301 | { |
302 | if( core->iSize == iNewLen ) | 302 | if( core->iSize == iNewLen ) |
303 | return; | 303 | return; |
@@ -306,19 +306,40 @@ namespace Bu | |||
306 | if( iNewLen > core->iCapacity ) | 306 | if( iNewLen > core->iCapacity ) |
307 | { | 307 | { |
308 | core->setCapacity( iNewLen ); | 308 | core->setCapacity( iNewLen ); |
309 | } | ||
310 | if( iNewLen > core->iSize ) | ||
311 | { | ||
309 | for( int j = core->iSize; j < iNewLen; j++ ) | 312 | for( int j = core->iSize; j < iNewLen; j++ ) |
310 | { | 313 | { |
311 | core->va.construct( | 314 | core->va.construct( |
312 | &core->pData[j], | 315 | &core->pData[j] |
313 | initTo | ||
314 | ); | 316 | ); |
315 | } | 317 | } |
316 | core->iSize = iNewLen; | ||
317 | } | 318 | } |
318 | else | 319 | core->iSize = iNewLen; |
320 | } | ||
321 | |||
322 | void setSize( long iNewLen, const value &initTo ) | ||
323 | { | ||
324 | if( core->iSize == iNewLen ) | ||
325 | return; | ||
326 | |||
327 | _hardCopy(); | ||
328 | if( iNewLen > core->iCapacity ) | ||
329 | { | ||
330 | core->setCapacity( iNewLen ); | ||
331 | } | ||
332 | if( iNewLen > core->iSize ) | ||
319 | { | 333 | { |
320 | core->iSize = iNewLen; | 334 | for( int j = core->iSize; j < iNewLen; j++ ) |
335 | { | ||
336 | core->va.construct( | ||
337 | &core->pData[j], | ||
338 | initTo | ||
339 | ); | ||
340 | } | ||
321 | } | 341 | } |
342 | core->iSize = iNewLen; | ||
322 | } | 343 | } |
323 | 344 | ||
324 | /** | 345 | /** |