Mercurial > hg > octave-nkf
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 { |