annotate liboctave/idx-vector.h @ 7573:755bf7ecc29b

eliminate one_zero stuff from idx_vector
author John W. Eaton <jwe@octave.org>
date Sat, 08 Mar 2008 10:14:37 -0500
parents a7554a7f9981
children 7cbe01c21986
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2
7017
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
3 Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002, 2003,
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
4 2004, 2005, 2006, 2007 John W. Eaton
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
5
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
7
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6108
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6108
diff changeset
11 option) any later version.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
12
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
16 for more details.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
17
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6108
diff changeset
19 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6108
diff changeset
20 <http://www.gnu.org/licenses/>.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
21
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
22 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
23
383
0b52c68ec81f [project @ 1994-03-09 21:19:44 by jwe]
jwe
parents: 240
diff changeset
24 #if !defined (octave_idx_vector_h)
0b52c68ec81f [project @ 1994-03-09 21:19:44 by jwe]
jwe
parents: 240
diff changeset
25 #define octave_idx_vector_h 1
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
26
3503
d14c483b3c12 [project @ 2000-02-01 04:06:07 by jwe]
jwe
parents: 3145
diff changeset
27 #include <iostream>
d14c483b3c12 [project @ 2000-02-01 04:06:07 by jwe]
jwe
parents: 3145
diff changeset
28
4653
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
29 #include "dim-vector.h"
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
30 #include "oct-inttypes.h"
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
31 #include "intNDArray.h"
4504
f6a61399bc5c [project @ 2003-09-09 17:48:00 by jwe]
jwe
parents: 4461
diff changeset
32
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
33 class ColumnVector;
4650
623f6262a8e9 [project @ 2003-11-23 23:17:46 by jwe]
jwe
parents: 4504
diff changeset
34 class boolNDArray;
623f6262a8e9 [project @ 2003-11-23 23:17:46 by jwe]
jwe
parents: 4504
diff changeset
35 class NDArray;
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
36 class Range;
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 1
diff changeset
37
453
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 434
diff changeset
38 class
6108
143b556ce725 [project @ 2006-10-27 01:45:54 by jwe]
jwe
parents: 5781
diff changeset
39 OCTAVE_API
453
393e95f46b51 [project @ 1994-06-06 00:05:20 by jwe]
jwe
parents: 434
diff changeset
40 idx_vector
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
41 {
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
42 private:
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
43
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
44 class
6108
143b556ce725 [project @ 2006-10-27 01:45:54 by jwe]
jwe
parents: 5781
diff changeset
45 OCTAVE_API
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
46 idx_vector_rep
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
47 {
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
48 public:
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
49
2802
bca5fbab2e52 [project @ 1997-03-09 11:02:27 by jwe]
jwe
parents: 2800
diff changeset
50 idx_vector_rep (void)
7422
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
51 : data (0), len (0), num_zeros (0), num_ones (0),
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
52 range_base (0), range_step (0), max_val (0),
4653
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
53 min_val (0), count (1), frozen_at_z_len (0), frozen_len (0),
7573
755bf7ecc29b eliminate one_zero stuff from idx_vector
John W. Eaton <jwe@octave.org>
parents: 7422
diff changeset
54 colon (0), range(0), initialized (0), frozen (0),
4653
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
55 colon_equiv_checked (0), colon_equiv (0), orig_dims () { }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
56
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
57 idx_vector_rep (const ColumnVector& v);
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
58
4650
623f6262a8e9 [project @ 2003-11-23 23:17:46 by jwe]
jwe
parents: 4504
diff changeset
59 idx_vector_rep (const NDArray& nda);
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
60
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
61 template <class U>
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
62 idx_vector_rep (const intNDArray<U>& inda)
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
63 : data (0), len (inda.length ()), num_zeros (0), num_ones (0),
7422
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
64 range_base (0), range_step (0), max_val (0), min_val (0),
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
65 count (1), frozen_at_z_len (0), frozen_len (0), colon (0),
7573
755bf7ecc29b eliminate one_zero stuff from idx_vector
John W. Eaton <jwe@octave.org>
parents: 7422
diff changeset
66 range(0), initialized (0), frozen (0),
7422
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
67 colon_equiv_checked (0), colon_equiv (0), orig_dims (inda.dims ())
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
68 {
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
69 if (len == 0)
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
70 {
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
71 initialized = 1;
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
72 return;
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
73 }
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
74 else
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
75 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
76 data = new octave_idx_type [len];
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
77
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
78 for (octave_idx_type i = 0; i < len; i++)
7198
4555c116b420 [project @ 2007-11-27 03:06:10 by jwe]
jwe
parents: 7017
diff changeset
79 data[i] = tree_to_mat_idx (inda.elem (i));
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
80 }
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
81
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
82 init_state ();
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
83 }
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
84
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
85 idx_vector_rep (const Range& r);
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
86
2386
4fc9fd1424a9 [project @ 1996-10-12 18:31:34 by jwe]
jwe
parents: 2356
diff changeset
87 idx_vector_rep (double d);
4fc9fd1424a9 [project @ 1996-10-12 18:31:34 by jwe]
jwe
parents: 2356
diff changeset
88
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
89 idx_vector_rep (octave_idx_type i);
3928
e8627dc4bdf2 [project @ 2002-05-03 19:56:01 by jwe]
jwe
parents: 3504
diff changeset
90
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
91 idx_vector_rep (char c);
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
92
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2802
diff changeset
93 idx_vector_rep (bool b);
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2802
diff changeset
94
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
95 template <class U>
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
96 idx_vector_rep (const octave_int<U>& i)
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
97 : data (0), len (1), num_zeros (0), num_ones (0),
7422
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
98 range_base (0), range_step (0), max_val (0), min_val (0),
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
99 count (1), frozen_at_z_len (0), frozen_len (0), colon (0),
7573
755bf7ecc29b eliminate one_zero stuff from idx_vector
John W. Eaton <jwe@octave.org>
parents: 7422
diff changeset
100 range(0), initialized (0), frozen (0),
7422
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
101 colon_equiv_checked (0), colon_equiv (0), orig_dims (1, 1)
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
102 {
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
103 data = new octave_idx_type [len];
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
104
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
105 data[0] = tree_to_mat_idx (i);
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
106
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
107 init_state ();
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
108 }
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
109
4650
623f6262a8e9 [project @ 2003-11-23 23:17:46 by jwe]
jwe
parents: 4504
diff changeset
110 idx_vector_rep (const boolNDArray& bnda);
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2802
diff changeset
111
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
112 idx_vector_rep (const idx_vector_rep& a);
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
113
2802
bca5fbab2e52 [project @ 1997-03-09 11:02:27 by jwe]
jwe
parents: 2800
diff changeset
114 ~idx_vector_rep (void) { delete [] data; }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
115
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
116 idx_vector_rep& operator = (const idx_vector_rep& a);
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
117
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
118 int ok (void) { return initialized; }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
119
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
120 octave_idx_type capacity (void) const { return len; }
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
121 octave_idx_type length (octave_idx_type colon_len) const { return colon ? colon_len : len; }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
122
7422
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
123 octave_idx_type elem (octave_idx_type n) const
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
124 {
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
125 return colon ? n : (range ? range_base + range_step*n : data[n]);
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
126 }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
127
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
128 octave_idx_type checkelem (octave_idx_type n) const;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
129 octave_idx_type operator () (octave_idx_type n) const { return checkelem (n); }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
130
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
131 octave_idx_type max (void) const { return max_val; }
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
132 octave_idx_type min (void) const { return min_val; }
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
133
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
134 octave_idx_type zeros_count (void) const { return num_zeros; }
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
135 octave_idx_type ones_count (void) const { return num_ones; }
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
136
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
137 int is_colon (void) const { return colon; }
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
138 int is_colon_equiv (octave_idx_type n, int sort_uniq);
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
139
3079
eb827eb9b8ff [project @ 1997-08-03 20:44:07 by jwe]
jwe
parents: 2847
diff changeset
140 void sort (bool uniq);
eb827eb9b8ff [project @ 1997-08-03 20:44:07 by jwe]
jwe
parents: 2847
diff changeset
141
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
142 octave_idx_type orig_rows (void) const { return orig_dims(0); }
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
143 octave_idx_type orig_columns (void) const { return orig_dims(1); }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
144
4653
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
145 dim_vector orig_dimensions (void) const { return orig_dims; }
4504
f6a61399bc5c [project @ 2003-09-09 17:48:00 by jwe]
jwe
parents: 4461
diff changeset
146
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
147 // other stuff
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
148
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
149 void shorten (octave_idx_type n); // Unsafe. Avoid at all cost.
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
150
5781
faafc2d98b8d [project @ 2006-05-02 19:40:19 by jwe]
jwe
parents: 5307
diff changeset
151 octave_idx_type freeze (octave_idx_type z_len, const char *tag, bool resize_ok);
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
152
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
153 // i/o
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
154
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
155 std::ostream& print (std::ostream& os) const;
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
156
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
157 octave_idx_type *data;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
158 octave_idx_type len;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
159 octave_idx_type num_zeros;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
160 octave_idx_type num_ones;
7422
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
161 octave_idx_type range_base;
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
162 octave_idx_type range_step;
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
163 octave_idx_type max_val;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
164 octave_idx_type min_val;
4504
f6a61399bc5c [project @ 2003-09-09 17:48:00 by jwe]
jwe
parents: 4461
diff changeset
165
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
166 int count;
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
167
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
168 octave_idx_type frozen_at_z_len;
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
169 octave_idx_type frozen_len;
4653
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
170
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
171 unsigned int colon : 1;
7422
a7554a7f9981 [project @ 2008-01-25 22:54:33 by jwe]
jwe
parents: 7198
diff changeset
172 unsigned int range : 1;
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
173 unsigned int initialized : 1;
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
174 unsigned int frozen : 1;
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
175 unsigned int colon_equiv_checked : 1;
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
176 unsigned int colon_equiv : 1;
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
177
4653
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
178 dim_vector orig_dims;
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
179
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
180 void init_state (void);
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
181
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
182 octave_idx_type tree_to_mat_idx (double x, bool& conversion_error);
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
183
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
184 octave_idx_type tree_to_mat_idx (octave_idx_type i) { return i - 1; }
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
185
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
186 template <class U> octave_idx_type tree_to_mat_idx (const octave_int<U>& i)
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
187 { return i.value () - 1; }
1879
1b43d3c06c04 [project @ 1996-02-05 16:24:56 by jwe]
jwe
parents: 1560
diff changeset
188 };
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
189
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
190 public:
1551
8f63ee44726c [project @ 1995-10-08 23:19:55 by jwe]
jwe
parents: 1315
diff changeset
191
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
192 idx_vector (void) : rep (new idx_vector_rep ()) { }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
193
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
194 idx_vector (const ColumnVector& v) : rep (new idx_vector_rep (v)) { }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
195
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
196 idx_vector (const NDArray& nda) : rep (new idx_vector_rep (nda)) { }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
197
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
198 template <class U>
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
199 idx_vector (const intNDArray<U>& inda) : rep (new idx_vector_rep (inda)) { }
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
200
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
201 idx_vector (const Range& r) : rep (new idx_vector_rep (r)) { }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
202
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
203 idx_vector (double d) : rep (new idx_vector_rep (d)) { }
2386
4fc9fd1424a9 [project @ 1996-10-12 18:31:34 by jwe]
jwe
parents: 2356
diff changeset
204
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
205 idx_vector (octave_idx_type i) : rep (new idx_vector_rep (i)) { }
3928
e8627dc4bdf2 [project @ 2002-05-03 19:56:01 by jwe]
jwe
parents: 3504
diff changeset
206
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
207 idx_vector (char c) : rep (new idx_vector_rep (c)) { }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
208
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
209 idx_vector (bool b) : rep (new idx_vector_rep (b)) { }
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2802
diff changeset
210
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
211 template <class U>
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
212 idx_vector (const octave_int<U>& i) : rep (new idx_vector_rep (i)) { }
4938
703d97b89507 [project @ 2004-08-09 20:21:59 by jwe]
jwe
parents: 4653
diff changeset
213
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
214 idx_vector (const boolNDArray& bnda) : rep (new idx_vector_rep (bnda)) { }
2828
92826d6e8bd9 [project @ 1997-03-25 23:41:41 by jwe]
jwe
parents: 2802
diff changeset
215
4979
ce4e3d39d05b [project @ 2004-09-08 23:25:05 by jwe]
jwe
parents: 4938
diff changeset
216 idx_vector (const idx_vector& a) : rep (a.rep) { rep->count++; }
1551
8f63ee44726c [project @ 1995-10-08 23:19:55 by jwe]
jwe
parents: 1315
diff changeset
217
2802
bca5fbab2e52 [project @ 1997-03-09 11:02:27 by jwe]
jwe
parents: 2800
diff changeset
218 ~idx_vector (void)
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
219 {
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
220 if (--rep->count <= 0)
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
221 delete rep;
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
222 }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
223
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
224 idx_vector& operator = (const idx_vector& a)
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
225 {
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
226 if (this != &a)
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
227 {
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
228 if (--rep->count <= 0)
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
229 delete rep;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
230
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
231 rep = a.rep;
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
232 rep->count++;
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
233 }
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
234 return *this;
1551
8f63ee44726c [project @ 1995-10-08 23:19:55 by jwe]
jwe
parents: 1315
diff changeset
235 }
8f63ee44726c [project @ 1995-10-08 23:19:55 by jwe]
jwe
parents: 1315
diff changeset
236
3145
0d640dc625c7 [project @ 1998-02-05 08:44:59 by jwe]
jwe
parents: 3079
diff changeset
237 operator bool () const { return rep->ok (); }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
238
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
239 octave_idx_type capacity (void) const { return rep->capacity (); }
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
240 octave_idx_type length (octave_idx_type cl) const { return rep->length (cl); }
191
b6b4d8c513fe [project @ 1993-10-29 23:41:39 by jwe]
jwe
parents: 164
diff changeset
241
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
242 octave_idx_type elem (octave_idx_type n) const { return rep->elem (n); }
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
243 octave_idx_type checkelem (octave_idx_type n) const { return rep->checkelem (n); }
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
244 octave_idx_type operator () (octave_idx_type n) const { return rep->operator () (n); }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
245
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
246 octave_idx_type max (void) const { return rep->max (); }
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
247 octave_idx_type min (void) const { return rep->min (); }
1551
8f63ee44726c [project @ 1995-10-08 23:19:55 by jwe]
jwe
parents: 1315
diff changeset
248
7573
755bf7ecc29b eliminate one_zero stuff from idx_vector
John W. Eaton <jwe@octave.org>
parents: 7422
diff changeset
249 int one_zero_only (void) const { return 0; }
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
250 octave_idx_type zeros_count (void) const { return rep->zeros_count (); }
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
251 octave_idx_type ones_count (void) const { return rep->ones_count (); }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
252
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
253 int is_colon (void) const { return rep->is_colon (); }
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
254 int is_colon_equiv (octave_idx_type n, int sort_uniq = 0) const
2356
de9eb7bd4405 [project @ 1996-08-21 02:40:06 by jwe]
jwe
parents: 1993
diff changeset
255 { return rep->is_colon_equiv (n, sort_uniq); }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
256
3079
eb827eb9b8ff [project @ 1997-08-03 20:44:07 by jwe]
jwe
parents: 2847
diff changeset
257 void sort (bool uniq = false) { rep->sort (uniq); }
eb827eb9b8ff [project @ 1997-08-03 20:44:07 by jwe]
jwe
parents: 2847
diff changeset
258
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
259 octave_idx_type orig_rows (void) const { return rep->orig_rows (); }
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
260 octave_idx_type orig_columns (void) const { return rep->orig_columns (); }
208
380cb9ccc889 [project @ 1993-11-12 10:35:05 by jwe]
jwe
parents: 191
diff changeset
261
4653
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
262 dim_vector orig_dimensions (void) const { return rep->orig_dimensions (); }
4504
f6a61399bc5c [project @ 2003-09-09 17:48:00 by jwe]
jwe
parents: 4461
diff changeset
263
2663
00b2eff19bf5 [project @ 1997-02-08 21:58:49 by jwe]
jwe
parents: 2386
diff changeset
264 int orig_empty (void) const
4653
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
265 { return (! is_colon () && orig_dimensions().any_zero ()); }
2663
00b2eff19bf5 [project @ 1997-02-08 21:58:49 by jwe]
jwe
parents: 2386
diff changeset
266
4653
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
267 // Unsafe. Avoid at all cost.
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 5105
diff changeset
268 void shorten (octave_idx_type n) { rep->shorten (n); }
434
ec2a6ad30162 [project @ 1994-05-25 21:00:20 by jwe]
jwe
parents: 416
diff changeset
269
4653
14ab7b05a572 [project @ 2003-11-24 05:02:46 by jwe]
jwe
parents: 4650
diff changeset
270 // i/o
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
271
5781
faafc2d98b8d [project @ 2006-05-02 19:40:19 by jwe]
jwe
parents: 5307
diff changeset
272 octave_idx_type freeze (octave_idx_type z_len, const char *tag, bool resize_ok = false)
faafc2d98b8d [project @ 2006-05-02 19:40:19 by jwe]
jwe
parents: 5307
diff changeset
273 { return rep->freeze (z_len, tag, resize_ok); }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
274
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
275 std::ostream& print (std::ostream& os) const { return rep->print (os); }
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
276
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3503
diff changeset
277 friend std::ostream& operator << (std::ostream& os, const idx_vector& a)
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
278 { return a.print (os); }
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
279
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
280 private:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
281
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
282 idx_vector_rep *rep;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
283
1560
27a03373de41 [project @ 1995-10-12 07:22:26 by jwe]
jwe
parents: 1553
diff changeset
284 void init_state (void) { rep->init_state (); }
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
285 };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
286
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
287 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
288
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
289 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
290 ;;; Local Variables: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
291 ;;; mode: C++ ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
292 ;;; End: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
293 */