diff liboctave/Sparse.cc @ 5630:512d0d11ae39

[project @ 2006-02-20 22:05:30 by dbateman]
author dbateman
date Mon, 20 Feb 2006 22:05:32 +0000
parents 2857357f9d3c
children 69a4f320d95a
line wrap: on
line diff
--- a/liboctave/Sparse.cc
+++ b/liboctave/Sparse.cc
@@ -222,20 +222,29 @@
 
 template <class T>
 Sparse<T>::Sparse (octave_idx_type nr, octave_idx_type nc, T val)
-  : rep (new typename Sparse<T>::SparseRep (nr, nc, nr*nc)),
-    dimensions (dim_vector (nr, nc)), idx (0), idx_count (0)
+  : dimensions (dim_vector (nr, nc)), idx (0), idx_count (0)
 { 
-
-  octave_idx_type ii = 0;
-  xcidx (0) = 0;
-  for (octave_idx_type j = 0; j < nc; j++)
+  if (val != T ())
     {
-      for (octave_idx_type i = 0; i < nr; i++)
+      rep = new typename Sparse<T>::SparseRep (nr, nc, nr*nc);
+
+      octave_idx_type ii = 0;
+      xcidx (0) = 0;
+      for (octave_idx_type j = 0; j < nc; j++)
 	{
-	  xdata (ii) = val;
-	  xridx (ii++) = i;
-	} 
-      xcidx (j+1) = ii;
+	  for (octave_idx_type i = 0; i < nr; i++)
+	    {
+	      xdata (ii) = val;
+	      xridx (ii++) = i;
+	    } 
+	  xcidx (j+1) = ii;
+	}
+    }
+  else
+    {
+      rep = new typename Sparse<T>::SparseRep (nr, nc, 0);
+      for (octave_idx_type j = 0; j < nc+1; j++)
+	xcidx(j) = 0;
     }
 }