Mercurial > hg > octave-lyh
diff liboctave/idx-vector.cc @ 191:b6b4d8c513fe
[project @ 1993-10-29 23:41:39 by jwe]
author | jwe |
---|---|
date | Fri, 29 Oct 1993 23:41:39 +0000 |
parents | e2c950dd96d2 |
children | 5869adaa6aea |
line wrap: on
line diff
--- a/liboctave/idx-vector.cc +++ b/liboctave/idx-vector.cc @@ -36,6 +36,8 @@ idx_vector::idx_vector (const idx_vector& a) { + initialized = a.initialized; + len = a.len; if (len > 0) { @@ -51,7 +53,7 @@ min_val = a.min_val; } else - data = 0; + data = (int *) 0; } static inline int @@ -66,16 +68,19 @@ idx_vector::idx_vector (const Matrix& m, int do_ftn_idx, const char *rc, int z_len = 0) { + initialized = 0; + int nr = m.rows (); int nc = m.columns (); if (nr == 0 || nc == 0) { len = 0; - data = 0; + data = (int *) 0; num_zeros = 0; num_ones = 0; one_zero = 0; + initialized = 1; return; } else if (nr > 1 && nc > 1 && do_ftn_idx) @@ -102,8 +107,8 @@ } else { - message ((char *) NULL, "invalid matrix index"); - jump_to_top_level (); + error ("invalid matrix used as index"); + return; } init_state (rc, z_len); @@ -111,9 +116,24 @@ idx_vector::idx_vector (const Range& r) { + initialized = 0; + len = r.nelem (); - assert (len != 0); + if (len < 0) + { + error ("invalid range used as index"); + return; + } + else if (len == 0) + { + data = (int *) 0; + num_zeros = 0; + num_ones = 0; + one_zero = 0; + initialized = 1; + return; + } double b = r.base (); double step = r.inc (); @@ -134,6 +154,8 @@ { if (this != &a) { + initialized = a.initialized; + delete [] data; len = a.len; data = new int [len]; @@ -184,7 +206,7 @@ { delete [] data; len = 0; - data = 0; + data = (int *) 0; num_zeros = 0; num_ones = 0; one_zero = 0; @@ -195,8 +217,11 @@ else if (min_val < 0) { error ("%s index %d out of range", rc, min_val+1); - jump_to_top_level (); + initialized = 0; + return; } + + initialized = 1; } void