comparison liboctave/idx-vector.cc @ 7572:85da2ab0c6fd

logical indexing compatibility fixes
author John W. Eaton <jwe@octave.org>
date Fri, 07 Mar 2008 20:17:54 -0500
parents fe4a43e1d1d3
children 755bf7ecc29b
comparison
equal deleted inserted replaced
7571:c01ff6818f4c 7572:85da2ab0c6fd
247 247
248 init_state (); 248 init_state ();
249 } 249 }
250 250
251 IDX_VEC_REP::idx_vector_rep (bool b) 251 IDX_VEC_REP::idx_vector_rep (bool b)
252 : data (0), len (1), num_zeros (0), num_ones (0), range_base (0), 252 : data (0), len (b ? 1 : 0), num_zeros (0), num_ones (0), range_base (0),
253 range_step (0), max_val (0), min_val (0), count (1), 253 range_step (0), max_val (0), min_val (0), count (1),
254 frozen_at_z_len (0), frozen_len (0), colon (0), range(0), 254 frozen_at_z_len (0), frozen_len (0), colon (0), range(0),
255 one_zero (1), initialized (0), frozen (0), colon_equiv_checked (0), 255 one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0),
256 colon_equiv (0), orig_dims (1, 1) 256 colon_equiv (0), orig_dims (len, len)
257 { 257 {
258 data = new octave_idx_type [len]; 258 if (len == 0)
259 259 initialized = 1;
260 data[0] = tree_to_mat_idx (b); 260 else
261 261 {
262 init_state (); 262 data = new octave_idx_type [len];
263 data[0] = 0;
264 init_state ();
265 }
263 } 266 }
264 267
265 IDX_VEC_REP::idx_vector_rep (const boolNDArray& bnda) 268 IDX_VEC_REP::idx_vector_rep (const boolNDArray& bnda)
266 : data (0), len (bnda.length ()), num_zeros (0), num_ones (0), 269 : data (0), len (bnda.nnz ()), num_zeros (0), num_ones (0),
267 range_base (0), range_step (0), max_val (0), min_val (0), 270 range_base (0), range_step (0), max_val (0), min_val (0),
268 count (1), frozen_at_z_len (0), frozen_len (0), colon (0), 271 count (1), frozen_at_z_len (0), frozen_len (0), colon (0),
269 range(0), one_zero (1), initialized (0), frozen (0), 272 range(0), one_zero (0), initialized (0), frozen (0),
270 colon_equiv_checked (0), colon_equiv (0), orig_dims (bnda.dims ()) 273 colon_equiv_checked (0), colon_equiv (0), orig_dims ()
271 { 274 {
272 if (len == 0) 275 if (len == 0)
273 { 276 {
277 orig_dims = dim_vector (0, 0);
274 initialized = 1; 278 initialized = 1;
275 return; 279 }
276 } 280 else
277 else 281 {
278 {
279 octave_idx_type k = 0;
280 data = new octave_idx_type [len]; 282 data = new octave_idx_type [len];
281 283
282 for (octave_idx_type i = 0; i < len; i++) 284 octave_idx_type ntot = bnda.length ();
283 data[k++] = tree_to_mat_idx (bnda.elem (i)); 285
284 } 286 for (octave_idx_type i = 0, k = 0; i < ntot; i++, k < len)
285 287 if (bnda.elem (i))
286 init_state (); 288 data[k++] = i;
289
290 dim_vector dv = bnda.dims ();
291
292 orig_dims = ((dv.length () == 2 && dv(0) == 1)
293 ? dim_vector (1, len) : orig_dims = dim_vector (len, 1));
294
295 init_state ();
296 }
287 } 297 }
288 298
289 IDX_VEC_REP& 299 IDX_VEC_REP&
290 IDX_VEC_REP::operator = (const IDX_VEC_REP& a) 300 IDX_VEC_REP::operator = (const IDX_VEC_REP& a)
291 { 301 {
598 { 608 {
599 if (len == 0) 609 if (len == 0)
600 frozen_len = 0; 610 frozen_len = 0;
601 else 611 else
602 { 612 {
603 maybe_convert_one_zero_to_idx (z_len);
604
605 max_val = max (); 613 max_val = max ();
606 min_val = min (); 614 min_val = min ();
607 615
608 if (min_val < 0) 616 if (min_val < 0)
609 { 617 {