1--- a/liboctave/idx-vector.cc Mon Jan 28 09:13:01 2008 +0000
2+++ b/liboctave/idx-vector.cc Fri Mar 07 20:17:54 2008 -0500
3@@ -249,41 +249,51 @@
4 }
5
6 IDX_VEC_REP::idx_vector_rep (bool b)
7- : data (0), len (1), num_zeros (0), num_ones (0), range_base (0),
8+ : data (0), len (b ? 1 : 0), num_zeros (0), num_ones (0), range_base (0),
9 range_step (0), max_val (0), min_val (0), count (1),
10 frozen_at_z_len (0), frozen_len (0), colon (0), range(0),
11- one_zero (1), initialized (0), frozen (0), colon_equiv_checked (0),
12- colon_equiv (0), orig_dims (1, 1)
13+ one_zero (0), initialized (0), frozen (0), colon_equiv_checked (0),
14+ colon_equiv (0), orig_dims (len, len)
15 {
16- data = new octave_idx_type [len];
17-
18- data[0] = tree_to_mat_idx (b);
19-
20- init_state ();
21+ if (len == 0)
22+ initialized = 1;
23+ else
24+ {
25+ data = new octave_idx_type [len];
26+ data[0] = 0;
27+ init_state ();
28+ }
29 }
30
31 IDX_VEC_REP::idx_vector_rep (const boolNDArray& bnda)
32- : data (0), len (bnda.length ()), num_zeros (0), num_ones (0),
33+ : data (0), len (bnda.nnz ()), num_zeros (0), num_ones (0),
34 range_base (0), range_step (0), max_val (0), min_val (0),
35 count (1), frozen_at_z_len (0), frozen_len (0), colon (0),
36- range(0), one_zero (1), initialized (0), frozen (0),
37- colon_equiv_checked (0), colon_equiv (0), orig_dims (bnda.dims ())
38+ range(0), one_zero (0), initialized (0), frozen (0),
39+ colon_equiv_checked (0), colon_equiv (0), orig_dims ()
40 {
41 if (len == 0)
42 {
43+ orig_dims = dim_vector (0, 0);
44 initialized = 1;
45- return;
46 }
47 else
48 {
49- octave_idx_type k = 0;
50 data = new octave_idx_type [len];
51
52- for (octave_idx_type i = 0; i < len; i++)
53- data[k++] = tree_to_mat_idx (bnda.elem (i));
54+ octave_idx_type ntot = bnda.length ();
55+
56+ for (octave_idx_type i = 0, k = 0; i < ntot; i++, k < len)
57+ if (bnda.elem (i))
58+ data[k++] = i;
59+
60+ dim_vector dv = bnda.dims ();
61+
62+ orig_dims = ((dv.length () == 2 && dv(0) == 1)
63+ ? dim_vector (1, len) : orig_dims = dim_vector (len, 1));
64+
65+ init_state ();
66 }
67-
68- init_state ();
69 }
70
71 IDX_VEC_REP&
72@@ -600,8 +610,6 @@
73 frozen_len = 0;
74 else
75 {
76- maybe_convert_one_zero_to_idx (z_len);
77-
78 max_val = max ();
79 min_val = min ();
80