comparison libinterp/corefcn/oct-obj.h @ 16892:68fc671a9339

maint: Collapse interpfcn and interpfcn-core directories into corefcn directory. * libgui/src/module.mk: Remove -I references to interp-core, interpfcn, add reference to corefcn. * libinterp/Makefile.am: Remove -I references to interp-core, interpfcn, add reference to corefcn. * libinterp/corefcn/module.mk: Add files from interp-core, interpfcn to build system. Copy over special rules from module.mk files in interp-core andd interpfcn. * src/Makefile.am: Replace references to interp-core, interpfcn with those to corefcn. * libinterp/corefcn/Cell.cc, libinterp/corefcn/Cell.h, libinterp/corefcn/action-container.h, libinterp/corefcn/c-file-ptr-stream.cc, libinterp/corefcn/c-file-ptr-stream.h, libinterp/corefcn/comment-list.cc, libinterp/corefcn/comment-list.h, libinterp/corefcn/cutils.c, libinterp/corefcn/cutils.h, libinterp/corefcn/data.cc, libinterp/corefcn/data.h, libinterp/corefcn/debug.cc, libinterp/corefcn/debug.h, libinterp/corefcn/defaults.cc, libinterp/corefcn/defaults.in.h, libinterp/corefcn/defun-dld.h, libinterp/corefcn/defun-int.h, libinterp/corefcn/defun.cc, libinterp/corefcn/defun.h, libinterp/corefcn/dirfns.cc, libinterp/corefcn/dirfns.h, libinterp/corefcn/display.cc, libinterp/corefcn/display.h, libinterp/corefcn/dynamic-ld.cc, libinterp/corefcn/dynamic-ld.h, libinterp/corefcn/error.cc, libinterp/corefcn/error.h, libinterp/corefcn/event-queue.h, libinterp/corefcn/file-io.cc, libinterp/corefcn/file-io.h, libinterp/corefcn/gl-render.cc, libinterp/corefcn/gl-render.h, libinterp/corefcn/gl2ps-renderer.cc, libinterp/corefcn/gl2ps-renderer.h, libinterp/corefcn/gl2ps.c, libinterp/corefcn/gl2ps.h, libinterp/corefcn/graphics.cc, libinterp/corefcn/graphics.in.h, libinterp/corefcn/gripes.cc, libinterp/corefcn/gripes.h, libinterp/corefcn/help.cc, libinterp/corefcn/help.h, libinterp/corefcn/hook-fcn.cc, libinterp/corefcn/hook-fcn.h, libinterp/corefcn/input.cc, libinterp/corefcn/input.h, libinterp/corefcn/jit-ir.cc, libinterp/corefcn/jit-ir.h, libinterp/corefcn/jit-typeinfo.cc, libinterp/corefcn/jit-typeinfo.h, libinterp/corefcn/jit-util.cc, libinterp/corefcn/jit-util.h, libinterp/corefcn/load-path.cc, libinterp/corefcn/load-path.h, libinterp/corefcn/load-save.cc, libinterp/corefcn/load-save.h, libinterp/corefcn/ls-ascii-helper.cc, libinterp/corefcn/ls-ascii-helper.h, libinterp/corefcn/ls-hdf5.cc, libinterp/corefcn/ls-hdf5.h, libinterp/corefcn/ls-mat-ascii.cc, libinterp/corefcn/ls-mat-ascii.h, libinterp/corefcn/ls-mat4.cc, libinterp/corefcn/ls-mat4.h, libinterp/corefcn/ls-mat5.cc, libinterp/corefcn/ls-mat5.h, libinterp/corefcn/ls-oct-ascii.cc, libinterp/corefcn/ls-oct-ascii.h, libinterp/corefcn/ls-oct-binary.cc, libinterp/corefcn/ls-oct-binary.h, libinterp/corefcn/ls-utils.cc, libinterp/corefcn/ls-utils.h, libinterp/corefcn/matherr.c, libinterp/corefcn/mex.cc, libinterp/corefcn/mex.h, libinterp/corefcn/mexproto.h, libinterp/corefcn/mxarray.in.h, libinterp/corefcn/oct-errno.h, libinterp/corefcn/oct-errno.in.cc, libinterp/corefcn/oct-fstrm.cc, libinterp/corefcn/oct-fstrm.h, libinterp/corefcn/oct-hdf5.h, libinterp/corefcn/oct-hist.cc, libinterp/corefcn/oct-hist.h, libinterp/corefcn/oct-iostrm.cc, libinterp/corefcn/oct-iostrm.h, libinterp/corefcn/oct-lvalue.cc, libinterp/corefcn/oct-lvalue.h, libinterp/corefcn/oct-map.cc, libinterp/corefcn/oct-map.h, libinterp/corefcn/oct-obj.cc, libinterp/corefcn/oct-obj.h, libinterp/corefcn/oct-prcstrm.cc, libinterp/corefcn/oct-prcstrm.h, libinterp/corefcn/oct-procbuf.cc, libinterp/corefcn/oct-procbuf.h, libinterp/corefcn/oct-stdstrm.h, libinterp/corefcn/oct-stream.cc, libinterp/corefcn/oct-stream.h, libinterp/corefcn/oct-strstrm.cc, libinterp/corefcn/oct-strstrm.h, libinterp/corefcn/oct.h, libinterp/corefcn/octave-link.cc, libinterp/corefcn/octave-link.h, libinterp/corefcn/pager.cc, libinterp/corefcn/pager.h, libinterp/corefcn/pr-output.cc, libinterp/corefcn/pr-output.h, libinterp/corefcn/procstream.cc, libinterp/corefcn/procstream.h, libinterp/corefcn/profiler.cc, libinterp/corefcn/profiler.h, libinterp/corefcn/pt-jit.cc, libinterp/corefcn/pt-jit.h, libinterp/corefcn/sighandlers.cc, libinterp/corefcn/sighandlers.h, libinterp/corefcn/siglist.c, libinterp/corefcn/siglist.h, libinterp/corefcn/sparse-xdiv.cc, libinterp/corefcn/sparse-xdiv.h, libinterp/corefcn/sparse-xpow.cc, libinterp/corefcn/sparse-xpow.h, libinterp/corefcn/symtab.cc, libinterp/corefcn/symtab.h, libinterp/corefcn/sysdep.cc, libinterp/corefcn/sysdep.h, libinterp/corefcn/toplev.cc, libinterp/corefcn/toplev.h, libinterp/corefcn/txt-eng-ft.cc, libinterp/corefcn/txt-eng-ft.h, libinterp/corefcn/txt-eng.h, libinterp/corefcn/unwind-prot.cc, libinterp/corefcn/unwind-prot.h, libinterp/corefcn/utils.cc, libinterp/corefcn/utils.h, libinterp/corefcn/variables.cc, libinterp/corefcn/variables.h, libinterp/corefcn/workspace-element.h, libinterp/corefcn/xdiv.cc, libinterp/corefcn/xdiv.h, libinterp/corefcn/xgl2ps.c, libinterp/corefcn/xnorm.cc, libinterp/corefcn/xnorm.h, libinterp/corefcn/xpow.cc, libinterp/corefcn/xpow.h, libinterp/corefcn/zfstream.cc, libinterp/corefcn/zfstream.h: Files moved from interp-core and interpfcn directories. * libinterp/interp-core/Cell.cc, libinterp/interp-core/Cell.h, libinterp/interp-core/action-container.h, libinterp/interp-core/c-file-ptr-stream.cc, libinterp/interp-core/c-file-ptr-stream.h, libinterp/interp-core/comment-list.cc, libinterp/interp-core/comment-list.h, libinterp/interp-core/cutils.c, libinterp/interp-core/cutils.h, libinterp/interp-core/defun-dld.h, libinterp/interp-core/defun-int.h, libinterp/interp-core/display.cc, libinterp/interp-core/display.h, libinterp/interp-core/dynamic-ld.cc, libinterp/interp-core/dynamic-ld.h, libinterp/interp-core/event-queue.h, libinterp/interp-core/gl-render.cc, libinterp/interp-core/gl-render.h, libinterp/interp-core/gl2ps-renderer.cc, libinterp/interp-core/gl2ps-renderer.h, libinterp/interp-core/gl2ps.c, libinterp/interp-core/gl2ps.h, libinterp/interp-core/gripes.cc, libinterp/interp-core/gripes.h, libinterp/interp-core/jit-ir.cc, libinterp/interp-core/jit-ir.h, libinterp/interp-core/jit-typeinfo.cc, libinterp/interp-core/jit-typeinfo.h, libinterp/interp-core/jit-util.cc, libinterp/interp-core/jit-util.h, libinterp/interp-core/ls-ascii-helper.cc, libinterp/interp-core/ls-ascii-helper.h, libinterp/interp-core/ls-hdf5.cc, libinterp/interp-core/ls-hdf5.h, libinterp/interp-core/ls-mat-ascii.cc, libinterp/interp-core/ls-mat-ascii.h, libinterp/interp-core/ls-mat4.cc, libinterp/interp-core/ls-mat4.h, libinterp/interp-core/ls-mat5.cc, libinterp/interp-core/ls-mat5.h, libinterp/interp-core/ls-oct-binary.cc, libinterp/interp-core/ls-oct-binary.h, libinterp/interp-core/ls-utils.cc, libinterp/interp-core/ls-utils.h, libinterp/interp-core/matherr.c, libinterp/interp-core/mex.cc, libinterp/interp-core/mex.h, libinterp/interp-core/mexproto.h, libinterp/interp-core/module.mk, libinterp/interp-core/mxarray.in.h, libinterp/interp-core/oct-errno.h, libinterp/interp-core/oct-errno.in.cc, libinterp/interp-core/oct-fstrm.cc, libinterp/interp-core/oct-fstrm.h, libinterp/interp-core/oct-hdf5.h, libinterp/interp-core/oct-iostrm.cc, libinterp/interp-core/oct-iostrm.h, libinterp/interp-core/oct-lvalue.cc, libinterp/interp-core/oct-lvalue.h, libinterp/interp-core/oct-map.cc, libinterp/interp-core/oct-map.h, libinterp/interp-core/oct-obj.cc, libinterp/interp-core/oct-obj.h, libinterp/interp-core/oct-prcstrm.cc, libinterp/interp-core/oct-prcstrm.h, libinterp/interp-core/oct-procbuf.cc, libinterp/interp-core/oct-procbuf.h, libinterp/interp-core/oct-stdstrm.h, libinterp/interp-core/oct-stream.cc, libinterp/interp-core/oct-stream.h, libinterp/interp-core/oct-strstrm.cc, libinterp/interp-core/oct-strstrm.h, libinterp/interp-core/oct.h, libinterp/interp-core/procstream.cc, libinterp/interp-core/procstream.h, libinterp/interp-core/pt-jit.cc, libinterp/interp-core/pt-jit.h, libinterp/interp-core/siglist.c, libinterp/interp-core/siglist.h, libinterp/interp-core/sparse-xdiv.cc, libinterp/interp-core/sparse-xdiv.h, libinterp/interp-core/sparse-xpow.cc, libinterp/interp-core/sparse-xpow.h, libinterp/interp-core/txt-eng-ft.cc, libinterp/interp-core/txt-eng-ft.h, libinterp/interp-core/txt-eng.h, libinterp/interp-core/unwind-prot.cc, libinterp/interp-core/unwind-prot.h, libinterp/interp-core/xdiv.cc, libinterp/interp-core/xdiv.h, libinterp/interp-core/xgl2ps.c, libinterp/interp-core/xnorm.cc, libinterp/interp-core/xnorm.h, libinterp/interp-core/xpow.cc, libinterp/interp-core/xpow.h, libinterp/interp-core/zfstream.cc, libinterp/interp-core/zfstream.h, libinterp/interpfcn/data.cc, libinterp/interpfcn/data.h, libinterp/interpfcn/debug.cc, libinterp/interpfcn/debug.h, libinterp/interpfcn/defaults.cc, libinterp/interpfcn/defaults.in.h, libinterp/interpfcn/defun.cc, libinterp/interpfcn/defun.h, libinterp/interpfcn/dirfns.cc, libinterp/interpfcn/dirfns.h, libinterp/interpfcn/error.cc, libinterp/interpfcn/error.h, libinterp/interpfcn/file-io.cc, libinterp/interpfcn/file-io.h, libinterp/interpfcn/graphics.cc, libinterp/interpfcn/graphics.in.h, libinterp/interpfcn/help.cc, libinterp/interpfcn/help.h, libinterp/interpfcn/hook-fcn.cc, libinterp/interpfcn/hook-fcn.h, libinterp/interpfcn/input.cc, libinterp/interpfcn/input.h, libinterp/interpfcn/load-path.cc, libinterp/interpfcn/load-path.h, libinterp/interpfcn/load-save.cc, libinterp/interpfcn/load-save.h, libinterp/interpfcn/ls-oct-ascii.cc, libinterp/interpfcn/ls-oct-ascii.h, libinterp/interpfcn/module.mk, libinterp/interpfcn/oct-hist.cc, libinterp/interpfcn/oct-hist.h, libinterp/interpfcn/octave-link.cc, libinterp/interpfcn/octave-link.h, libinterp/interpfcn/pager.cc, libinterp/interpfcn/pager.h, libinterp/interpfcn/pr-output.cc, libinterp/interpfcn/pr-output.h, libinterp/interpfcn/profiler.cc, libinterp/interpfcn/profiler.h, libinterp/interpfcn/sighandlers.cc, libinterp/interpfcn/sighandlers.h, libinterp/interpfcn/symtab.cc, libinterp/interpfcn/symtab.h, libinterp/interpfcn/sysdep.cc, libinterp/interpfcn/sysdep.h, libinterp/interpfcn/toplev.cc, libinterp/interpfcn/toplev.h, libinterp/interpfcn/utils.cc, libinterp/interpfcn/utils.h, libinterp/interpfcn/variables.cc, libinterp/interpfcn/variables.h, libinterp/interpfcn/workspace-element.h: deleted files.
author Rik <rik@octave.org>
date Wed, 03 Jul 2013 17:43:48 -0700
parents libinterp/interp-core/oct-obj.h@1249a615c91b
children d63878346099
comparison
equal deleted inserted replaced
16891:486c3e2731ff 16892:68fc671a9339
1 /*
2
3 Copyright (C) 1994-2012 John W. Eaton
4 Copyright (C) 2009 VZLU Prague
5
6 This file is part of Octave.
7
8 Octave is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the
10 Free Software Foundation; either version 3 of the License, or (at your
11 option) any later version.
12
13 Octave is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with Octave; see the file COPYING. If not, see
20 <http://www.gnu.org/licenses/>.
21
22 */
23
24 #if !defined (octave_oct_obj_h)
25 #define octave_oct_obj_h 1
26
27 #include <string>
28 #include <vector>
29
30 #include "oct-alloc.h"
31 #include "str-vec.h"
32 #include "Array.h"
33
34 #include "ov.h"
35 #include "Cell.h"
36
37 class
38 OCTINTERP_API
39 octave_value_list
40 {
41 public:
42
43 octave_value_list (void)
44 : data (), names () { }
45
46 explicit octave_value_list (octave_idx_type n)
47 : data (dim_vector (1, n)), names () { }
48
49 octave_value_list (octave_idx_type n, const octave_value& val)
50 : data (dim_vector (1, n), val), names () { }
51
52 octave_value_list (const octave_value& tc)
53 : data (dim_vector (1, 1), tc), names () { }
54
55 octave_value_list (const Array<octave_value>& d)
56 : data (d.as_row ()), names () { }
57
58 octave_value_list (const Cell& tc)
59 : data (tc.as_row ()), names () { }
60
61 octave_value_list (const octave_value_list& obj)
62 : data (obj.data), names (obj.names) { }
63
64 // Concatenation constructor.
65 octave_value_list (const std::list<octave_value_list>&);
66
67 ~octave_value_list (void) { }
68
69 octave_value_list& operator = (const octave_value_list& obj)
70 {
71 if (this != &obj)
72 {
73 data = obj.data;
74 names = obj.names;
75 }
76
77 return *this;
78 }
79
80 Array<octave_value> array_value (void) const { return data; }
81
82 Cell cell_value (void) const { return array_value (); }
83
84 // Assignment will resize on range errors.
85
86 octave_value& operator () (octave_idx_type n) { return elem (n); }
87
88 const octave_value& operator () (octave_idx_type n) const { return elem (n); }
89
90 octave_idx_type length (void) const { return data.length (); }
91
92 bool empty (void) const { return length () == 0; }
93
94 void resize (octave_idx_type n, const octave_value& rfv = octave_value ())
95 {
96 data.resize (dim_vector (1, n), rfv);
97 }
98
99 octave_value_list& prepend (const octave_value& val);
100
101 octave_value_list& append (const octave_value& val);
102
103 octave_value_list& append (const octave_value_list& lst);
104
105 octave_value_list& reverse (void);
106
107 octave_value_list
108 slice (octave_idx_type offset, octave_idx_type len, bool tags = false) const
109 {
110 octave_value_list retval (data.linear_slice (offset, offset + len));
111 if (tags && len > 0 && names.length () > 0)
112 retval.names = names.linear_slice (offset, std::min (len, names.length ()));
113
114 return retval;
115 }
116
117 octave_value_list
118 splice (octave_idx_type offset, octave_idx_type len,
119 const octave_value_list& lst = octave_value_list ()) const;
120
121 bool all_strings_p (void) const;
122
123 bool all_scalars (void) const;
124
125 bool any_cell (void) const;
126
127 bool has_magic_colon (void) const;
128
129 string_vector make_argv (const std::string& = std::string ()) const;
130
131 void stash_name_tags (const string_vector& nm) { names = nm; }
132
133 string_vector name_tags (void) const { return names; }
134
135 void make_storable_values (void);
136
137 octave_value& xelem (octave_idx_type i)
138 {
139 return data.xelem (i);
140 }
141
142 void clear (void)
143 {
144 data.clear ();
145 }
146
147 private:
148
149 Array<octave_value> data;
150
151 // This list of strings can be used to tag each element of data with
152 // a name. By default, it is empty.
153 string_vector names;
154
155 octave_value& elem (octave_idx_type n)
156 {
157 if (n >= length ())
158 resize (n + 1);
159
160 return data(n);
161 }
162
163 const octave_value& elem (octave_idx_type n) const
164 { return data(n); }
165
166 DECLARE_OCTAVE_ALLOCATOR
167 };
168
169 // Make it easy to build argument lists for built-in functions or for
170 // returning values.
171
172 inline octave_value_list
173 ovl (const octave_value& a0)
174 {
175 octave_value_list retval;
176 retval(0) = a0;
177 return retval;
178 }
179
180 inline octave_value_list
181 ovl (const octave_value& a0, const octave_value& a1)
182 {
183 octave_value_list retval;
184 retval(1) = a1;
185 retval(0) = a0;
186 return retval;
187 }
188
189 inline octave_value_list
190 ovl (const octave_value& a0, const octave_value& a1,
191 const octave_value& a2)
192 {
193 octave_value_list retval;
194 retval(2) = a2;
195 retval(1) = a1;
196 retval(0) = a0;
197 return retval;
198 }
199
200 inline octave_value_list
201 ovl (const octave_value& a0, const octave_value& a1,
202 const octave_value& a2, const octave_value& a3)
203 {
204 octave_value_list retval;
205 retval(3) = a3;
206 retval(2) = a2;
207 retval(1) = a1;
208 retval(0) = a0;
209 return retval;
210 }
211
212 inline octave_value_list
213 ovl (const octave_value& a0, const octave_value& a1,
214 const octave_value& a2, const octave_value& a3,
215 const octave_value& a4)
216 {
217 octave_value_list retval;
218 retval(4) = a4;
219 retval(3) = a3;
220 retval(2) = a2;
221 retval(1) = a1;
222 retval(0) = a0;
223 return retval;
224 }
225
226 inline octave_value_list
227 ovl (const octave_value& a0, const octave_value& a1,
228 const octave_value& a2, const octave_value& a3,
229 const octave_value& a4, const octave_value& a5)
230 {
231 octave_value_list retval;
232 retval(5) = a5;
233 retval(4) = a4;
234 retval(3) = a3;
235 retval(2) = a2;
236 retval(1) = a1;
237 retval(0) = a0;
238 return retval;
239 }
240
241 inline octave_value_list
242 ovl (const octave_value& a0, const octave_value& a1,
243 const octave_value& a2, const octave_value& a3,
244 const octave_value& a4, const octave_value& a5,
245 const octave_value& a6)
246 {
247 octave_value_list retval;
248 retval(6) = a6;
249 retval(5) = a5;
250 retval(4) = a4;
251 retval(3) = a3;
252 retval(2) = a2;
253 retval(1) = a1;
254 retval(0) = a0;
255 return retval;
256 }
257
258 inline octave_value_list
259 ovl (const octave_value& a0, const octave_value& a1,
260 const octave_value& a2, const octave_value& a3,
261 const octave_value& a4, const octave_value& a5,
262 const octave_value& a6, const octave_value& a7)
263 {
264 octave_value_list retval;
265 retval(7) = a7;
266 retval(6) = a6;
267 retval(5) = a5;
268 retval(4) = a4;
269 retval(3) = a3;
270 retval(2) = a2;
271 retval(1) = a1;
272 retval(0) = a0;
273 return retval;
274 }
275
276 inline octave_value_list
277 ovl (const octave_value& a0, const octave_value& a1,
278 const octave_value& a2, const octave_value& a3,
279 const octave_value& a4, const octave_value& a5,
280 const octave_value& a6, const octave_value& a7,
281 const octave_value& a8)
282 {
283 octave_value_list retval;
284 retval(8) = a8;
285 retval(7) = a7;
286 retval(6) = a6;
287 retval(5) = a5;
288 retval(4) = a4;
289 retval(3) = a3;
290 retval(2) = a2;
291 retval(1) = a1;
292 retval(0) = a0;
293 return retval;
294 }
295
296 inline octave_value_list
297 ovl (const octave_value& a0, const octave_value& a1,
298 const octave_value& a2, const octave_value& a3,
299 const octave_value& a4, const octave_value& a5,
300 const octave_value& a6, const octave_value& a7,
301 const octave_value& a8, const octave_value& a9)
302 {
303 octave_value_list retval;
304 retval(9) = a9;
305 retval(8) = a8;
306 retval(7) = a7;
307 retval(6) = a6;
308 retval(5) = a5;
309 retval(4) = a4;
310 retval(3) = a3;
311 retval(2) = a2;
312 retval(1) = a1;
313 retval(0) = a0;
314 return retval;
315 }
316
317 #endif