Mercurial > hg > octave-nkf
diff liboctave/CRowVector.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/CRowVector.cc +++ b/liboctave/CRowVector.cc @@ -78,14 +78,20 @@ ComplexRowVector::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; } @@ -94,14 +100,20 @@ ComplexRowVector::insert (const ComplexRowVector& 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; } @@ -110,9 +122,15 @@ ComplexRowVector::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; } @@ -120,9 +138,15 @@ ComplexRowVector::fill (const Complex& 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; } @@ -130,6 +154,7 @@ ComplexRowVector::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"); @@ -138,8 +163,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; } @@ -148,6 +178,7 @@ ComplexRowVector::fill (const Complex& 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"); @@ -156,8 +187,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; } @@ -224,6 +260,17 @@ return result; } +ComplexRowVector +ComplexRowVector::extract_n (int r1, int n) const +{ + ComplexRowVector result (n); + + for (int i = 0; i < n; i++) + result.elem (i) = elem (r1+i); + + return result; +} + // row vector by row vector -> row vector operations ComplexRowVector&