Mercurial > hg > octave-lyh
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 +++ b/liboctave/dRowVector.cc @@ -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; }