*** octave-3.0.0-modif/liboctave/idx-vector.cc 2008-01-25 10:18:06.000000000 +0100 --- octave-3.0.0/liboctave/idx-vector.cc 2007-10-12 23:27:16.000000000 +0200 *************** IDX_VEC_REP::idx_vector_rep (const IDX_V *** 44,64 **** : data (0), len (a.len), num_zeros (a.num_zeros), num_ones (a.num_ones), max_val (a.max_val), min_val (a.min_val), frozen_at_z_len (a.frozen_at_z_len), frozen_len (a.frozen_len), ! colon (a.colon), range(a.range), one_zero (a.one_zero), initialized (a.initialized), frozen (a.frozen), colon_equiv_checked (a.colon_equiv_checked), colon_equiv (a.colon_equiv), orig_dims (a.orig_dims) { if (len > 0) { ! if (range) { ! range_base = a.range_base; ! range_step = a.range_step; ! } else ! { ! data = new octave_idx_type [len]; ! for (octave_idx_type i = 0; i < len; i++) ! data[i] = a.data[i]; ! } } } --- 44,58 ---- : data (0), len (a.len), num_zeros (a.num_zeros), num_ones (a.num_ones), max_val (a.max_val), min_val (a.min_val), frozen_at_z_len (a.frozen_at_z_len), frozen_len (a.frozen_len), ! colon (a.colon), one_zero (a.one_zero), initialized (a.initialized), frozen (a.frozen), colon_equiv_checked (a.colon_equiv_checked), colon_equiv (a.colon_equiv), orig_dims (a.orig_dims) { if (len > 0) { ! data = new octave_idx_type [len]; ! for (octave_idx_type i = 0; i < len; i++) ! data[i] = a.data[i]; } } *************** idx_is_inf_or_nan (double x) *** 104,110 **** IDX_VEC_REP::idx_vector_rep (const ColumnVector& v) : data (0), len (v.length ()), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), frozen_len (0), ! colon (0), range(0), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (len, 1) { if (len == 0) --- 98,104 ---- IDX_VEC_REP::idx_vector_rep (const ColumnVector& v) : data (0), len (v.length ()), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), frozen_len (0), ! colon (0), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (len, 1) { if (len == 0) *************** IDX_VEC_REP::idx_vector_rep (const Colum *** 138,144 **** IDX_VEC_REP::idx_vector_rep (const NDArray& nda) : data (0), len (nda.length ()), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), range(0), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (nda.dims ()) { --- 132,138 ---- IDX_VEC_REP::idx_vector_rep (const NDArray& nda) : data (0), len (nda.length ()), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (nda.dims ()) { *************** IDX_VEC_REP::idx_vector_rep (const NDArr *** 174,180 **** IDX_VEC_REP::idx_vector_rep (const Range& r) : data (0), len (r.nelem ()), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), range(1), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (1, len) { --- 168,174 ---- IDX_VEC_REP::idx_vector_rep (const Range& r) : data (0), len (r.nelem ()), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (1, len) { *************** IDX_VEC_REP::idx_vector_rep (const Range *** 189,204 **** return; } // If all elements are ints, we can generate the indexes as integers // and save tons of tests. if (r.all_elements_are_ints ()) { ! range_base = static_cast (r.base ()-1); ! range_step = static_cast (r.inc ()); ! init_state(); } else (*current_liboctave_error_handler) --- 183,221 ---- return; } + data = new octave_idx_type [len]; // If all elements are ints, we can generate the indexes as integers // and save tons of tests. if (r.all_elements_are_ints ()) { ! octave_idx_type b = static_cast (r.base ()); ! octave_idx_type step = static_cast (r.inc ()); ! ! data[0] = b - 1; ! for (octave_idx_type i = 1; i < len; i++) ! data[i] = data[i-1] + step; ! ! // Don't use init_state(), as it can be vastly accelerated since ! // we don't have to search all values for max/min, etc. ! if (step >= 0) ! { ! min_val = data [0]; ! max_val = data [len - 1]; ! } ! else ! { ! min_val = data [len - 1]; ! max_val = data [0]; ! } ! if ((b <= 0 && step > 0) || (b >= 0 && step < 0)) ! num_zeros = 1; ! if ((b <= 1 && step > 0) || (b >= 1 && step < 0)) ! num_zeros = 0; ! ! initialized = 1; } else (*current_liboctave_error_handler) *************** IDX_VEC_REP::idx_vector_rep (const Range *** 208,214 **** IDX_VEC_REP::idx_vector_rep (double d) : data (0), len (1), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), range(1), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (1, 1) { --- 225,231 ---- IDX_VEC_REP::idx_vector_rep (double d) : data (0), len (1), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (1, 1) { *************** IDX_VEC_REP::idx_vector_rep (double d) *** 216,226 **** return; else { bool conversion_error = false; ! range_base = tree_to_mat_idx (d, conversion_error); ! range_step = 1; if (conversion_error) return; --- 233,243 ---- return; else { + data = new octave_idx_type [len]; bool conversion_error = false; ! data[0] = tree_to_mat_idx (d, conversion_error); if (conversion_error) return; *************** IDX_VEC_REP::idx_vector_rep (double d) *** 232,244 **** IDX_VEC_REP::idx_vector_rep (octave_idx_type i) : data (0), len (1), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), range(1), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (1, 1) { ! range_base = tree_to_mat_idx (i); ! range_step = 1; init_state (); } --- 249,261 ---- IDX_VEC_REP::idx_vector_rep (octave_idx_type i) : data (0), len (1), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (1, 1) { + data = new octave_idx_type [len]; ! data[0] = tree_to_mat_idx (i); init_state (); } *************** IDX_VEC_REP::idx_vector_rep (octave_idx_ *** 246,252 **** IDX_VEC_REP::idx_vector_rep (char c) : data (0), len (0), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (1), range(0), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (0, 0) { --- 263,269 ---- IDX_VEC_REP::idx_vector_rep (char c) : data (0), len (0), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (1), one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (0, 0) { *************** IDX_VEC_REP::idx_vector_rep (char c) *** 258,264 **** IDX_VEC_REP::idx_vector_rep (bool b) : data (0), len (1), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), range(0), one_zero (1), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (1, 1) { --- 275,281 ---- IDX_VEC_REP::idx_vector_rep (bool b) : data (0), len (1), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), one_zero (1), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (1, 1) { *************** IDX_VEC_REP::idx_vector_rep (bool b) *** 272,278 **** IDX_VEC_REP::idx_vector_rep (const boolNDArray& bnda) : data (0), len (bnda.length ()), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), range(0), one_zero (1), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (bnda.dims ()) { --- 289,295 ---- IDX_VEC_REP::idx_vector_rep (const boolNDArray& bnda) : data (0), len (bnda.length ()), num_zeros (0), num_ones (0), max_val (0), min_val (0), count (1), frozen_at_z_len (0), ! frozen_len (0), colon (0), one_zero (1), initialized (0), frozen (0), colon_equiv_checked (0), colon_equiv (0), orig_dims (bnda.dims ()) { *************** IDX_VEC_REP::operator = (const IDX_VEC_R *** 298,311 **** { if (this != &a) { ! if (a.data) { ! delete [] data; ! len = a.len; ! data = new octave_idx_type [len]; ! for (octave_idx_type i = 0; i < len; i++) ! data[i] = a.data[i]; ! } ! else data = 0; num_zeros = a.num_zeros; num_ones = a.num_ones; --- 315,325 ---- { if (this != &a) { ! delete [] data; ! len = a.len; ! data = new octave_idx_type [len]; ! for (octave_idx_type i = 0; i < len; i++) ! data[i] = a.data[i]; num_zeros = a.num_zeros; num_ones = a.num_ones; *************** IDX_VEC_REP::operator = (const IDX_VEC_R *** 314,323 **** frozen_at_z_len = a.frozen_at_z_len; frozen_len = a.frozen_len; colon = a.colon; - if (range = a.range) { - range_base = a.range_base; - range_step = a.range_step; - } one_zero = a.one_zero; initialized = a.initialized; frozen = a.frozen; --- 328,333 ---- *************** IDX_VEC_REP::init_state (void) *** 340,363 **** min_val = 0; max_val = 0; } - else if (range) - { - if (range_step >= 0) - { - min_val = range_base; - max_val = (len > 0)? range_base + (len-1)*range_step : range_base; - } - else - { - max_val = range_base; - min_val = (len > 0)? range_base + (len-1)*range_step : range_base; - } - - if ((range_base <= 0 && range_step > 0) || (range_base >= 0 && range_step < 0)) - num_zeros = 1; - if ((range_base <= 1 && range_step > 0) || (range_base >= 1 && range_step < 0)) - num_zeros = 0; - } else { min_val = max_val = data[0]; --- 350,355 ---- *************** IDX_VEC_REP::is_colon_equiv (octave_idx_ *** 487,497 **** { colon_equiv = 1; } - else if (range) - { - colon_equiv = (range_base == 0 && len == n && - (range_step == 1 || range_step == -1 && sort_uniq)); - } else if (static_cast (len) > 1) { if (one_zero) --- 479,484 ---- *************** IDX_VEC_REP::is_colon_equiv (octave_idx_ *** 539,550 **** void IDX_VEC_REP::sort (bool uniq) { - if (range && len) { - if (range_step < 0) { - range_base += (len-1)*(range_step); - range_step = -range_step; - } - } else if (len > 1) { sort_data (data, len); --- 526,531 ----