diff liboctave/dSparse.cc @ 6207:3c92b8d892dd

[project @ 2006-12-06 20:19:14 by dbateman]
author dbateman
date Wed, 06 Dec 2006 20:19:16 +0000
parents da5a11b3d13e
children 64bad7c6a607
line wrap: on
line diff
--- a/liboctave/dSparse.cc	Wed Dec 06 20:10:03 2006 +0000
+++ b/liboctave/dSparse.cc	Wed Dec 06 20:19:16 2006 +0000
@@ -170,12 +170,36 @@
 bool
 SparseMatrix::is_symmetric (void) const
 {
-  if (is_square () && rows () > 0)
+  octave_idx_type nr = rows ();
+  octave_idx_type nc = cols ();
+
+  if (nr == nc && nr > 0)
     {
-      for (octave_idx_type i = 0; i < rows (); i++)
-	for (octave_idx_type j = i+1; j < cols (); j++)
-	  if (elem (i, j) != elem (j, i))
-	    return false;
+      for (octave_idx_type j = 0; j < nc; j++)
+	{
+	  for (octave_idx_type i = cidx(j); i < cidx(j+1); i++)
+	    {
+	      octave_idx_type ri = ridx(i);
+
+	      if (ri != j)
+		{
+		  bool found = false;
+
+		  for (octave_idx_type k = cidx(ri); k < cidx(ri+1); k++)
+		    {
+		      if (ridx(k) == j)
+			{
+			  if (data(i) == data(k))
+			    found = true;
+			  break;
+			}
+		    }
+
+		  if (! found)
+		    return false;
+		}
+	    }
+	}
 
       return true;
     }