[PPL-devel] [GIT] ppl/ppl(sparse_matrices): CO_Tree: use new/delete instead of malloc/ free.

Marco Poletti poletti.marco at gmail.com
Sun Aug 8 08:54:25 CEST 2010


Module: ppl/ppl
Branch: sparse_matrices
Commit: f60831af32063af3c27545f290406252cc41ba98
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=f60831af32063af3c27545f290406252cc41ba98

Author: Marco Poletti <poletti.marco at gmail.com>
Date:   Sun Aug  8 08:44:31 2010 +0200

CO_Tree: use new/delete instead of malloc/free.

---

 src/CO_Tree.cc         |   24 ++++++++----------------
 src/CO_Tree.inlines.hh |   29 +++++++++++------------------
 2 files changed, 19 insertions(+), 34 deletions(-)

diff --git a/src/CO_Tree.cc b/src/CO_Tree.cc
index 495e616..c7f9229 100644
--- a/src/CO_Tree.cc
+++ b/src/CO_Tree.cc
@@ -172,19 +172,16 @@ PPL::CO_Tree::init(dimension_type reserved_size1) {
   l++;
 
   reserved_size = ((dimension_type)1 << l) - 1;
-  // We use malloc() instead of operator new(), because we want to use
-  // realloc().
-  indexes = static_cast<dimension_type*>(malloc(sizeof(dimension_type)
-                                                * (reserved_size + 2)));
-  data = static_cast<data_type*>(malloc(sizeof(data_type)
-                                        * (reserved_size + 1)));
+  indexes = new dimension_type[reserved_size + 2];
+  data = static_cast<data_type*>(operator new(sizeof(data_type)
+                                              * (reserved_size + 1)));
   // Mark all pairs as unused.
   for (dimension_type i = 1; i <= reserved_size; ++i)
-    new (&(indexes[i])) dimension_type(unused_index);
+    indexes[i] = unused_index;
 
   // These are used as markers by iterators.
-  new (&(indexes[0])) dimension_type(0);
-  new (&(indexes[reserved_size + 1])) dimension_type(0);
+  indexes[0] = 0;
+  indexes[reserved_size + 1] = 0;
 
   max_depth = l;
 
@@ -200,15 +197,10 @@ PPL::CO_Tree::destroy() {
     for (dimension_type i = 1; i <= reserved_size; ++i) {
       if (indexes[i] != unused_index)
         data[i].~data_type();
-      indexes[i].~dimension_type();
     }
-    indexes[0].~dimension_type();
-    indexes[reserved_size + 1].~dimension_type();
 
-    // We use malloc()/free() instead of operator new()/operator delete()
-    // because we want to use realloc().
-    free(static_cast<void*>(indexes));
-    free(static_cast<void*>(data));
+    delete [] indexes;
+    operator delete(static_cast<void*>(data));
   }
 }
 
diff --git a/src/CO_Tree.inlines.hh b/src/CO_Tree.inlines.hh
index 5b1279d..43ee3a5 100644
--- a/src/CO_Tree.inlines.hh
+++ b/src/CO_Tree.inlines.hh
@@ -529,37 +529,30 @@ CO_Tree::rebuild_bigger_tree() {
   else {
     dimension_type new_reserved_size = reserved_size*2 + 1;
 
-    dimension_type* new_indexes
-      = static_cast<dimension_type*>(malloc(sizeof(dimension_type)
-                                            * (new_reserved_size + 2)));
+    dimension_type* new_indexes = new dimension_type[new_reserved_size + 2];
     data_type* new_data
-      = static_cast<data_type*>(malloc(sizeof(data_type)
-                                       * (new_reserved_size + 1)));
+      = static_cast<data_type*>(operator new(sizeof(data_type)
+                                             * (new_reserved_size + 1)));
 
-    new (&(new_indexes[1])) dimension_type(unused_index);
+    new_indexes[1] = unused_index;
 
     for (dimension_type i = 1, j = 2; i <= reserved_size; ++i, ++j) {
       if (indexes[i] == unused_index)
-        new (&(new_indexes[j])) dimension_type(unused_index);
+        new_indexes[j] = unused_index;
       else {
-        new (&(new_indexes[j])) dimension_type(indexes[i]);
+        new_indexes[j] = indexes[i];
         move_data_element(new_data[j], data[i]);
       }
-      indexes[i].~dimension_type();
       ++j;
-      new (&(new_indexes[j])) dimension_type(unused_index);
+      new_indexes[j] = unused_index;
     }
 
-    // These were used as markers by iterators.
-    indexes[0].~dimension_type();
-    indexes[reserved_size + 1].~dimension_type();
-
     // These are used as markers by iterators.
-    new (&(new_indexes[0])) dimension_type(0);
-    new (&(new_indexes[new_reserved_size + 1])) dimension_type(0);
+    new_indexes[0] = 0;
+    new_indexes[new_reserved_size + 1] = 0;
 
-    free(indexes);
-    free(data);
+    delete [] indexes;
+    operator delete(data);
 
     indexes = new_indexes;
     data = new_data;




More information about the PPL-devel mailing list