diff liboctave/Array.cc @ 1619:1a35c8c91349

[project @ 1995-11-04 11:07:21 by jwe]
author jwe
date Sat, 04 Nov 1995 11:07:21 +0000
parents dd7d27461567
children 6eb77dffca6a
line wrap: on
line diff
--- a/liboctave/Array.cc
+++ b/liboctave/Array.cc
@@ -49,12 +49,6 @@
 {
   len = n;
   data = new T [len];
-
-#ifdef HEAVYWEIGHT_INDEXING
-  idx = 0;
-  max_indices = 0;
-  idx_count = 0;
-#endif
 }
 
 template <class T>
@@ -66,26 +60,12 @@
   data = new T [len];
   for (int i = 0; i < len; i++)
     data[i] = a.data[i];
-
-#ifdef HEAVYWEIGHT_INDEXING
-  max_indices = a.max_indices;
-  idx_count = a.idx_count;
-  if (a.idx)
-    {
-      idx_vector *idx = new idx_vector [max_indices];
-      for (int i = 0; i < max_indices; i++)
-	idx[i] = a.idx[i];
-    }
-  else
-    idx = 0;
-#endif
 }
 
 template <class T>
 ArrayRep<T>::~ArrayRep (void)
 {
   delete [] data;
-  delete [] idx;
 }
 
 template <class T>
@@ -109,9 +89,28 @@
 Array<T>::Array (int n, const T& val)
 {
   rep = new ArrayRep<T> (n);
+
   rep->count = 1;
+
   for (int i = 0; i < n; i++)
     rep->data[i] = val;
+
+#ifdef HEAVYWEIGHT_INDEXING
+  max_indices = 1;
+  idx_count = 0;
+  idx = 0;
+#endif
+}
+
+template <class T>
+Array<T>::~Array (void)
+{
+  if (--rep->count <= 0)
+    delete rep;
+
+#ifdef HEAVYWEIGHT_INDEXING
+  delete [] idx;
+#endif
 }
 
 template <class T>
@@ -126,6 +125,13 @@
       rep = a.rep;
       rep->count++;
     }
+
+#ifdef HEAVYWEIGHT_INDEXING
+  max_indices = 1;
+  idx_count = 0;
+  idx = 0;
+#endif
+
   return *this;
 }
 
@@ -190,8 +196,6 @@
   rep = new ArrayRep<T> (n);
   rep->count = 1;
 
-  SET_MAX_INDICES (1);
-
   if (old_data && old_len > 0)
     {
       int min_len = old_len < n ? old_len : n;
@@ -224,8 +228,6 @@
   rep = new ArrayRep<T> (n);
   rep->count = 1;
 
-  SET_MAX_INDICES (1);
-
   int min_len = old_len < n ? old_len : n;
 
   if (old_data && old_len > 0)
@@ -327,8 +329,6 @@
   rep = new ArrayRep<T> (r*c);
   rep->count = 1;
 
-  SET_MAX_INDICES (2);
-
   d1 = r;
   d2 = c;
 
@@ -368,8 +368,6 @@
   rep = new ArrayRep<T> (r*c);
   rep->count = 1;
 
-  SET_MAX_INDICES (2);
-
   d1 = r;
   d2 = c;
 
@@ -583,8 +581,6 @@
   rep = new ArrayRep<T> (new_len);
   rep->count = 1;
 
-  SET_MAX_INDICES (2);
-
   nr = r;
   nc = c;
 
@@ -622,8 +618,6 @@
   rep = new ArrayRep<T> (new_len);
   rep->count = 1;
 
-  SET_MAX_INDICES (2);
-
   nr = r;
   nc = c;