diff options
| author | Sachin Gupta <sgupta2m@in.ibm.com> | 2013-12-16 17:05:51 +0530 |
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-01-10 16:10:25 -0600 |
| commit | ea2a49ff0cd3827458025f75d5b6bd7054d18779 (patch) | |
| tree | ad948ed926202b306dea6ec23bc93bb63c617f03 /src | |
| parent | b96b58722a420bce27dc39fcd51297f6fc62ea87 (diff) | |
| download | talos-hostboot-ea2a49ff0cd3827458025f75d5b6bd7054d18779.tar.gz talos-hostboot-ea2a49ff0cd3827458025f75d5b6bd7054d18779.zip | |
PRD: Fix in UtilSMap
Change-Id: I09e5905f4a3d2f90e324c9ba1e74e99425ae6c4f
CQ: SW237677
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7746
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Reviewed-by: Zane Shelley <zshelle@us.ibm.com>
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8002
Diffstat (limited to 'src')
| -rwxr-xr-x | src/usr/diag/prdf/common/util/UtilSMap.H | 65 |
1 files changed, 59 insertions, 6 deletions
diff --git a/src/usr/diag/prdf/common/util/UtilSMap.H b/src/usr/diag/prdf/common/util/UtilSMap.H index bbf337947..a5da03c8d 100755 --- a/src/usr/diag/prdf/common/util/UtilSMap.H +++ b/src/usr/diag/prdf/common/util/UtilSMap.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2007,2013 */ +/* COPYRIGHT International Business Machines Corp. 2007,2014 */ /* */ /* p1 */ /* */ @@ -105,7 +105,17 @@ class UtilSMap void clear() { - if (NULL != iv_memblock) free(iv_memblock); + if (NULL != iv_memblock) + { + for( size_type i = 0; i < iv_size; i++ ) + { + ((key_type *)&iv_memblock[i])->~key_type(); + ((data_type *) + &iv_memblock[i + cv_firstSize])->~data_type(); + } + free(iv_memblock); + } + iv_memblock = NULL; iv_size = 0; iv_blockCount = 2; @@ -123,11 +133,13 @@ class UtilSMap iv_memblock = (char *) realloc(iv_memblock, cv_blockSize * iv_blockCount); } - (*(key_type *)&iv_memblock[cv_blockSize * iv_size]) = k; - data_type * l_rc = (data_type *) - &iv_memblock[cv_blockSize * iv_size + cv_firstSize]; - (*l_rc) = v; + new ((key_type *)&iv_memblock[cv_blockSize * iv_size]) + (key_type) (k); + + data_type * l_rc = new ((data_type *) + &iv_memblock[cv_blockSize * iv_size + cv_firstSize]) + (data_type) (v); iv_size++; @@ -143,6 +155,47 @@ class UtilSMap return *l_rc; }; + UtilSMap & operator = (const UtilSMap & i_rhs ) + { + if( &i_rhs == this ) return *this; + + clear(); + iv_size = i_rhs.iv_size; + iv_blockCount = i_rhs.iv_blockCount; + + if( NULL != i_rhs.iv_memblock ) + { + iv_memblock = (char *) malloc( cv_blockSize * iv_blockCount); + for( size_type i = 0; i < iv_size; i++ ) + { + new ((key_type *)&iv_memblock[i]) + (key_type)( i_rhs.iv_memblock[i] ); + + new ((data_type *) &iv_memblock[ i + cv_firstSize]) + (data_type) (i_rhs.iv_memblock[ i + cv_firstSize]); + } + } + return *this; + }; + UtilSMap (const UtilSMap & i_rhs ) + { + iv_size = i_rhs.iv_size; + iv_blockCount = i_rhs.iv_blockCount; + iv_memblock = NULL; + if( NULL != i_rhs.iv_memblock ) + { + iv_memblock = (char *) malloc( cv_blockSize * iv_blockCount); + for( size_type i = 0; i < iv_size; i++ ) + { + new ((key_type *)&iv_memblock[i]) + (key_type)( i_rhs.iv_memblock[i] ); + + new ((data_type *) &iv_memblock[ i + cv_firstSize]) + (data_type) (i_rhs.iv_memblock[ i + cv_firstSize]); + } + } + }; + private: data_type * find(const key_type & k) { |

