summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSachin Gupta <sgupta2m@in.ibm.com>2013-12-16 17:05:51 +0530
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-01-10 16:10:25 -0600
commitea2a49ff0cd3827458025f75d5b6bd7054d18779 (patch)
treead948ed926202b306dea6ec23bc93bb63c617f03 /src
parentb96b58722a420bce27dc39fcd51297f6fc62ea87 (diff)
downloadtalos-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-xsrc/usr/diag/prdf/common/util/UtilSMap.H65
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)
{
OpenPOWER on IntegriCloud