diff liboctave/dRowVector.cc @ 4316:236c10efcde2

[project @ 2003-02-10 21:57:15 by jwe]
author jwe
date Mon, 10 Feb 2003 21:57:15 +0000
parents 5719210fff4c
children 6f3382e08a52
line wrap: on
line diff
--- a/liboctave/dRowVector.cc	Mon Feb 03 17:34:24 2003 +0000
+++ b/liboctave/dRowVector.cc	Mon Feb 10 21:57:15 2003 +0000
@@ -72,14 +72,20 @@
 RowVector::insert (const RowVector& a, int c)
 {
   int a_len = a.length ();
+
   if (c < 0 || c + a_len > length ())
     {
       (*current_liboctave_error_handler) ("range error for insert");
       return *this;
     }
 
-  for (int i = 0; i < a_len; i++)
-    elem (c+i) = a.elem (i);
+  if (a_len > 0)
+    {
+      make_unique ();
+
+      for (int i = 0; i < a_len; i++)
+	xelem (c+i) = a.elem (i);
+    }
 
   return *this;
 }
@@ -88,9 +94,15 @@
 RowVector::fill (double val)
 {
   int len = length ();
+
   if (len > 0)
-    for (int i = 0; i < len; i++)
-      elem (i) = val;
+    {
+      make_unique ();
+
+      for (int i = 0; i < len; i++)
+	xelem (i) = val;
+    }
+
   return *this;
 }
 
@@ -98,6 +110,7 @@
 RowVector::fill (double val, int c1, int c2)
 {
   int len = length ();
+
   if (c1 < 0 || c2 < 0 || c1 >= len || c2 >= len)
     {
       (*current_liboctave_error_handler) ("range error for fill");
@@ -106,8 +119,13 @@
 
   if (c1 > c2) { int tmp = c1; c1 = c2; c2 = tmp; }
 
-  for (int i = c1; i <= c2; i++)
-    elem (i) = val;
+  if (c2 >= c1)
+    {
+      make_unique ();
+
+      for (int i = c1; i <= c2; i++)
+	xelem (i) = val;
+    }
 
   return *this;
 }
@@ -159,7 +177,18 @@
   RowVector result (new_c);
 
   for (int i = 0; i < new_c; i++)
-    result.elem (i) = elem (c1+i);
+    result.xelem (i) = elem (c1+i);
+
+  return result;
+}
+
+RowVector
+RowVector::extract_n (int r1, int n) const
+{
+  RowVector result (n);
+
+  for (int i = 0; i < n; i++)
+    result.xelem (i) = elem (r1+i);
 
   return result;
 }