diff liboctave/boolSparse.cc @ 7620:36594d5bbe13

Move diag function into the octave_value class
author David Bateman <dbateman@free.fr>
date Fri, 21 Mar 2008 00:08:24 +0100
parents f3c00dc0912b
children eb63fbe60fab
line wrap: on
line diff
--- a/liboctave/boolSparse.cc	Fri Mar 21 13:20:11 2008 -0400
+++ b/liboctave/boolSparse.cc	Fri Mar 21 00:08:24 2008 +0100
@@ -143,88 +143,7 @@
 SparseBoolMatrix
 SparseBoolMatrix::diag (octave_idx_type k) const
 {
-  octave_idx_type nnr = rows ();
-  octave_idx_type nnc = cols ();
-
-  if (k > 0)
-    nnc -= k;
-  else if (k < 0)
-    nnr += k;
-
-  SparseBoolMatrix d;
-
-  if (nnr > 0 && nnc > 0)
-    {
-      octave_idx_type ndiag = (nnr < nnc) ? nnr : nnc;
-
-      // Count the number of non-zero elements
-      octave_idx_type nel = 0;
-      if (k > 0)
-	{
-	  for (octave_idx_type i = 0; i < ndiag; i++)
-	    if (elem (i, i+k) != 0.)
-	      nel++;
-	}
-      else if ( k < 0)
-	{
-	  for (octave_idx_type i = 0; i < ndiag; i++)
-	    if (elem (i-k, i) != 0.)
-	      nel++;
-	}
-      else
-	{
-	  for (octave_idx_type i = 0; i < ndiag; i++)
-	    if (elem (i, i) != 0.)
-	      nel++;
-	}
-      
-      d = SparseBoolMatrix (ndiag, 1, nel);
-      d.xcidx (0) = 0;
-      d.xcidx (1) = nel;
-
-      octave_idx_type ii = 0;
-      if (k > 0)
-	{
-	  for (octave_idx_type i = 0; i < ndiag; i++)
-	    {
-	      bool tmp = elem (i, i+k);
-	      if (tmp != 0.)
-		{
-		  d.xdata (ii) = tmp;
-		  d.xridx (ii++) = i;
-		}
-	    }
-	}
-      else if ( k < 0)
-	{
-	  for (octave_idx_type i = 0; i < ndiag; i++)
-	    {
-	      bool tmp = elem (i-k, i);
-	      if (tmp != 0.)
-		{
-		  d.xdata (ii) = tmp;
-		  d.xridx (ii++) = i;
-		}
-	    }
-	}
-      else
-	{
-	  for (octave_idx_type i = 0; i < ndiag; i++)
-	    {
-	      bool tmp = elem (i, i);
-	      if (tmp != 0.)
-		{
-		  d.xdata (ii) = tmp;
-		  d.xridx (ii++) = i;
-		}
-	    }
-	}
-    }
-  else
-    (*current_liboctave_error_handler) 
-      ("diag: requested diagonal out of range");
-
-  return d;
+  return Sparse<bool>::diag (k);
 }
 
 boolMatrix