Mercurial > hg > octave-nkf
annotate src/oct-obj.h @ 10809:85cbd239fce2
try a better status bar for fltk backend
author | Shai Ayal <shaiay@users.sourceforge.net> |
---|---|
date | Tue, 20 Jul 2010 19:31:17 +0300 |
parents | 8baff2aceabc |
children | fd0a3ac60b0e |
rev | line source |
---|---|
498 | 1 /* |
2 | |
7017 | 3 Copyright (C) 1994, 1995, 1996, 1997, 1998, 2000, 2002, 2003, 2004, |
8920 | 4 2005, 2006, 2007, 2008 John W. Eaton |
8580
188d38a553c7
further indexing optimization touches
Jaroslav Hajek <highegg@gmail.com>
parents:
8579
diff
changeset
|
5 Copyright (C) 2009 VZLU Prague |
498 | 6 |
7 This file is part of Octave. | |
8 | |
9 Octave is free software; you can redistribute it and/or modify it | |
10 under the terms of the GNU General Public License as published by the | |
7016 | 11 Free Software Foundation; either version 3 of the License, or (at your |
12 option) any later version. | |
498 | 13 |
14 Octave is distributed in the hope that it will be useful, but WITHOUT | |
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
17 for more details. | |
18 | |
19 You should have received a copy of the GNU General Public License | |
7016 | 20 along with Octave; see the file COPYING. If not, see |
21 <http://www.gnu.org/licenses/>. | |
498 | 22 |
23 */ | |
24 | |
504 | 25 #if !defined (octave_oct_obj_h) |
26 #define octave_oct_obj_h 1 | |
27 | |
1968 | 28 #include <string> |
4591 | 29 #include <vector> |
1968 | 30 |
2970 | 31 #include "oct-alloc.h" |
2943 | 32 #include "str-vec.h" |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
33 #include "Array.h" |
498 | 34 |
2369 | 35 #include "ov.h" |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
36 #include "Cell.h" |
498 | 37 |
737 | 38 class |
6109 | 39 OCTINTERP_API |
2872 | 40 octave_value_list |
508 | 41 { |
42 public: | |
43 | |
2086 | 44 octave_value_list (void) |
2872 | 45 : data () { } |
1968 | 46 |
9545
8670e55078fd
allow constructing octave_value_list from size
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
47 explicit octave_value_list (octave_idx_type n) |
8670e55078fd
allow constructing octave_value_list from size
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
48 : data (dim_vector (1, n)) { } |
8670e55078fd
allow constructing octave_value_list from size
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
49 |
5275 | 50 octave_value_list (octave_idx_type n, const octave_value& val) |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
51 : data (dim_vector (1, n), val) { } |
511 | 52 |
2086 | 53 octave_value_list (const octave_value& tc) |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10313
diff
changeset
|
54 : data (1, 1, tc) { } |
1968 | 55 |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
56 octave_value_list (const Array<octave_value>& d) |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10313
diff
changeset
|
57 : data (d.as_row ()) { } |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
58 |
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
59 octave_value_list (const Cell& tc) |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10313
diff
changeset
|
60 : data (tc.as_row ()) { } |
8546
3d8a914c580e
improve parser indexed assigment code
Jaroslav Hajek <highegg@gmail.com>
parents:
8523
diff
changeset
|
61 |
2086 | 62 octave_value_list (const octave_value_list& obj) |
4150 | 63 : data (obj.data), names (obj.names) { } |
508 | 64 |
8580
188d38a553c7
further indexing optimization touches
Jaroslav Hajek <highegg@gmail.com>
parents:
8579
diff
changeset
|
65 // Concatenation constructor. |
188d38a553c7
further indexing optimization touches
Jaroslav Hajek <highegg@gmail.com>
parents:
8579
diff
changeset
|
66 octave_value_list (const std::list<octave_value_list>&); |
188d38a553c7
further indexing optimization touches
Jaroslav Hajek <highegg@gmail.com>
parents:
8579
diff
changeset
|
67 |
4189 | 68 ~octave_value_list (void) { } |
69 | |
2970 | 70 void *operator new (size_t size) |
71 { return allocator.alloc (size); } | |
72 | |
4280 | 73 void operator delete (void *p, size_t size) |
74 { allocator.free (p, size); } | |
75 | |
5775 | 76 // FIXME -- without this, I have errors with the stack of |
4214 | 77 // octave_value_list objects in ov-usr-fcn.h. Why? |
78 void *operator new (size_t size, void *p) | |
79 { return ::operator new (size, p); } | |
80 | |
4280 | 81 void operator delete (void *p, void *) |
4352 | 82 { |
83 #if defined (HAVE_PLACEMENT_DELETE) | |
84 ::operator delete (p, static_cast<void *> (0)); | |
85 #else | |
86 ::operator delete (p); | |
87 #endif | |
88 } | |
2970 | 89 |
2086 | 90 octave_value_list& operator = (const octave_value_list& obj) |
508 | 91 { |
1968 | 92 if (this != &obj) |
10313 | 93 { |
94 data = obj.data; | |
95 names = obj.names; | |
96 } | |
1968 | 97 |
508 | 98 return *this; |
99 } | |
100 | |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
101 Array<octave_value> array_value (void) const { return data; } |
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
102 |
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
103 Cell cell_value (void) const { return array_value (); } |
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
104 |
2872 | 105 // Assignment will resize on range errors. |
508 | 106 |
5275 | 107 octave_value& operator () (octave_idx_type n) { return elem (n); } |
1968 | 108 |
10075
84b0725f4b09
return class types by reference in const Array element access functions
Jaroslav Hajek <highegg@gmail.com>
parents:
9545
diff
changeset
|
109 const octave_value& operator () (octave_idx_type n) const { return elem (n); } |
526 | 110 |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
111 octave_idx_type length (void) const { return data.length (); } |
2872 | 112 |
2951 | 113 bool empty (void) const { return length () == 0; } |
114 | |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10313
diff
changeset
|
115 void resize (octave_idx_type n, const octave_value& rfv |
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10313
diff
changeset
|
116 = Array<octave_value>::resize_fill_value ()) |
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10313
diff
changeset
|
117 { data.resize (1, n, rfv); } |
2872 | 118 |
119 octave_value_list& prepend (const octave_value& val); | |
120 | |
121 octave_value_list& append (const octave_value& val); | |
122 | |
123 octave_value_list& append (const octave_value_list& lst); | |
124 | |
125 octave_value_list& reverse (void); | |
126 | |
6335 | 127 octave_value_list |
10659
8baff2aceabc
fix slicing value lists with name tags (bug #29960)
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
128 slice (octave_idx_type offset, octave_idx_type len, bool tags = false) const |
8baff2aceabc
fix slicing value lists with name tags (bug #29960)
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
129 { |
8baff2aceabc
fix slicing value lists with name tags (bug #29960)
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
130 octave_value_list retval (data.linear_slice (offset, offset + len)); |
8baff2aceabc
fix slicing value lists with name tags (bug #29960)
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
131 if (tags && len > 0 && names.length () > 0) |
8baff2aceabc
fix slicing value lists with name tags (bug #29960)
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
132 retval.names = names.linear_slice (offset, std::min (len, names.length ())); |
8baff2aceabc
fix slicing value lists with name tags (bug #29960)
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
133 |
8baff2aceabc
fix slicing value lists with name tags (bug #29960)
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
134 return retval; |
8baff2aceabc
fix slicing value lists with name tags (bug #29960)
Jaroslav Hajek <highegg@gmail.com>
parents:
10350
diff
changeset
|
135 } |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
136 |
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
137 octave_value_list |
6335 | 138 splice (octave_idx_type offset, octave_idx_type len, |
10313 | 139 const octave_value_list& lst = octave_value_list ()) const; |
3195 | 140 |
2872 | 141 bool all_strings_p (void) const; |
1968 | 142 |
8455
fd11a08a9b31
disallow invalid {}-indexed assigments
Jaroslav Hajek <highegg@gmail.com>
parents:
8437
diff
changeset
|
143 bool all_scalars (void) const; |
fd11a08a9b31
disallow invalid {}-indexed assigments
Jaroslav Hajek <highegg@gmail.com>
parents:
8437
diff
changeset
|
144 |
10086
76df75b10c80
allow more cells in strfind/strrep + supply a general mechanism
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
145 bool any_cell (void) const; |
76df75b10c80
allow more cells in strfind/strrep + supply a general mechanism
Jaroslav Hajek <highegg@gmail.com>
parents:
10075
diff
changeset
|
146 |
5846 | 147 bool has_magic_colon (void) const; |
148 | |
8034
f61bd8e0d682
fix default_save_options parsing and allow mixing options with other arguments.
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
149 string_vector make_argv (const std::string& = std::string()) const; |
526 | 150 |
2943 | 151 void stash_name_tags (const string_vector& nm) { names = nm; } |
152 | |
153 string_vector name_tags (void) const { return names; } | |
154 | |
8523
ad3afaaa19c1
implement non-copying contiguous range indexing
Jaroslav Hajek <highegg@gmail.com>
parents:
8455
diff
changeset
|
155 void make_storable_values (void); |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
8034
diff
changeset
|
156 |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
157 octave_value& xelem (octave_idx_type i) |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
158 { |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
159 return data.xelem (i); |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
160 } |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
161 |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
162 void clear (void) |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
163 { |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
164 data.clear (); |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
165 } |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10160
diff
changeset
|
166 |
526 | 167 private: |
508 | 168 |
2970 | 169 static octave_allocator allocator; |
170 | |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
171 Array<octave_value> data; |
2872 | 172 |
2943 | 173 // This list of strings can be used to tag each element of data with |
174 // a name. By default, it is empty. | |
175 string_vector names; | |
176 | |
5275 | 177 octave_value& elem (octave_idx_type n) |
1968 | 178 { |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
179 if (n >= length ()) |
10313 | 180 resize (n + 1); |
4591 | 181 |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
182 return data(n); |
1968 | 183 } |
184 | |
10075
84b0725f4b09
return class types by reference in const Array element access functions
Jaroslav Hajek <highegg@gmail.com>
parents:
9545
diff
changeset
|
185 const octave_value& elem (octave_idx_type n) const |
8579
7e0f36dfefbe
implement octave_value_list using Array
Jaroslav Hajek <highegg@gmail.com>
parents:
8546
diff
changeset
|
186 { return data(n); } |
508 | 187 }; |
498 | 188 |
504 | 189 #endif |