diff src/ov-base-sparse.cc @ 10512:aac9f4265048

rewrite sparse indexed assignment
author Jaroslav Hajek <highegg@gmail.com>
date Tue, 13 Apr 2010 12:36:21 +0200
parents fdccd69d26bd
children c5005bc2b7a9
line wrap: on
line diff
--- a/src/ov-base-sparse.cc	Mon Apr 12 18:07:58 2010 -0400
+++ b/src/ov-base-sparse.cc	Tue Apr 13 12:36:21 2010 +0200
@@ -165,12 +165,40 @@
 void 
 octave_base_sparse<T>::assign (const octave_value_list& idx, const T& rhs)
 {
+
   octave_idx_type len = idx.length ();
 
-  for (octave_idx_type i = 0; i < len; i++)
-    matrix.set_index (idx(i).index_vector ());
+  switch (len)
+    {
+    case 1:
+      {
+        idx_vector i = idx (0).index_vector ();
+
+        if (! error_state)
+          matrix.assign (i, rhs);
+
+        break;
+      }
+
+    case 2:
+      {
+        idx_vector i = idx (0).index_vector ();
 
-  ::assign (matrix, rhs);
+        if (! error_state)
+          {
+            idx_vector j = idx (1).index_vector ();
+
+            if (! error_state)
+              matrix.assign (i, j, rhs);
+          }
+
+        break;
+      }
+
+    default:
+      error ("sparse indexing needs 1 or 2 indices");
+    }
+
 
   // Invalidate matrix type.
   typ.invalidate_type ();