annotate src/ov-class.h @ 13294:7dce7e110511

make concatenation of class objects work * data.h: New file. * src/Makefile.am (octinclude_HEADERS): Add it to the list. * data.cc (attempt_type_conversion): New static function. (do_class_concat): New function. (do_cat): Use it if any elements of the list are objects. Check whether any elements of the list are objects or cells. Check whether all elements of the list are complex. Check whether the first element of the list is a struct. Maybe convert elements of the list to cells. New tests for horzcat and vertcat. * data.h (do_class_concat): Provide decl. * ov-class.h (octave_class::octave_class): Allow optional parent list. * ov.h, ov.h (octave_value::octave_value (const Octave_map&, const std::string&)): Likewise. * pt-mat.cc (do_class_concat): New static function. (tree_matrix::rvalue1): Use it to concatenate objects.
author John W. Eaton <jwe@octave.org>
date Fri, 07 Oct 2011 22:16:07 -0400
parents 2a8dcb5b3a00
children 441af0aa125a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
1 /*
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
2
11523
fd0a3ac60b0e update copyright notices
John W. Eaton <jwe@octave.org>
parents: 10926
diff changeset
3 Copyright (C) 2007-2011 John W. Eaton
10521
4d1fc073fbb7 add some missing copyright stmts
Jaroslav Hajek <highegg@gmail.com>
parents: 10313
diff changeset
4 Copyright (C) 2009 VZLU Prague
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
5
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
7
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
7444
1e1e2608da7b [project @ 2008-02-04 07:40:55 by jwe]
jwe
parents: 7338
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
1e1e2608da7b [project @ 2008-02-04 07:40:55 by jwe]
jwe
parents: 7338
diff changeset
11 option) any later version.
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
12
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
16 for more details.
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
17
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
7444
1e1e2608da7b [project @ 2008-02-04 07:40:55 by jwe]
jwe
parents: 7338
diff changeset
19 along with Octave; see the file COPYING. If not, see
1e1e2608da7b [project @ 2008-02-04 07:40:55 by jwe]
jwe
parents: 7338
diff changeset
20 <http://www.gnu.org/licenses/>.
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
21
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
22 */
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
23
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
24 #if !defined (octave_class_h)
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
25 #define octave_class_h 1
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
26
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
27 #include <cstdlib>
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
28
8950
d865363208d6 include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
29 #include <iosfwd>
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
30 #include <string>
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
31
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
32 #include "mx-base.h"
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
33 #include "str-vec.h"
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
34
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
35 #include "error.h"
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
36 #include "oct-alloc.h"
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
37 #include "oct-map.h"
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
38 #include "ov-base.h"
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
39 #include "ov-typeinfo.h"
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
40
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
41 class octave_value_list;
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
42
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
43 class tree_walker;
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
44
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
45 // Data structures.
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
46
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
47 class
9529
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
48 octave_class : public octave_base_value
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
49 {
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
50 public:
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
51
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
52 octave_class (void)
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11584
diff changeset
53 : octave_base_value (), map (), c_name (),
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11584
diff changeset
54 parent_list (), obsolete_copies (0)
11584
cda4aa780d58 Another round of initialising members in the constructor initialisation list
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11523
diff changeset
55 { }
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
56
13294
7dce7e110511 make concatenation of class objects work
John W. Eaton <jwe@octave.org>
parents: 13241
diff changeset
57 octave_class (const octave_map& m, const std::string& id,
7dce7e110511 make concatenation of class objects work
John W. Eaton <jwe@octave.org>
parents: 13241
diff changeset
58 const std::list<std::string>& plist
7dce7e110511 make concatenation of class objects work
John W. Eaton <jwe@octave.org>
parents: 13241
diff changeset
59 = std::list<std::string> ())
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11584
diff changeset
60 : octave_base_value (), map (m), c_name (id),
13294
7dce7e110511 make concatenation of class objects work
John W. Eaton <jwe@octave.org>
parents: 13241
diff changeset
61 parent_list (plist), obsolete_copies (0)
11584
cda4aa780d58 Another round of initialising members in the constructor initialisation list
Pascal Dupuis <Pascal.Dupuis@uclouvain.be>
parents: 11523
diff changeset
62 { }
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
63
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
64 octave_class (const octave_class& s)
9529
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
65 : octave_base_value (s), map (s.map), c_name (s.c_name),
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
66 parent_list (s.parent_list), obsolete_copies (0) { }
9010
f914834836e7 Partial implementation of derived classes using the old form with "@" files.
rtshort@smoketree.phaselocked.com
parents: 8950
diff changeset
67
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11584
diff changeset
68 octave_class (const octave_map& m, const std::string& id,
9010
f914834836e7 Partial implementation of derived classes using the old form with "@" files.
rtshort@smoketree.phaselocked.com
parents: 8950
diff changeset
69 const octave_value_list& parents);
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
70
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
71 ~octave_class (void) { }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
72
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
73 octave_base_value *clone (void) const { return new octave_class (*this); }
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 8212
diff changeset
74
9522
e79470be3ecb implement subsasgn this-arg optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9521
diff changeset
75 octave_base_value *unique_clone (void);
e79470be3ecb implement subsasgn this-arg optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9521
diff changeset
76
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 8212
diff changeset
77 octave_base_value *empty_clone (void) const
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 8212
diff changeset
78 {
10768
8a868004a437 use octave_map for octave_class
Jaroslav Hajek <highegg@gmail.com>
parents: 10742
diff changeset
79 return new octave_class (octave_map (map.keys ()), class_name ());
8785
70f5a0375afd oct-map.h: fix think-o in previous change
John W. Eaton <jwe@octave.org>
parents: 8212
diff changeset
80 }
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
81
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
82 Cell dotref (const octave_value_list& idx);
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
83
9329
67fc970dad7d improve indexed assignment using indexed numel
Jaroslav Hajek <highegg@gmail.com>
parents: 9240
diff changeset
84 Matrix size (void);
67fc970dad7d improve indexed assignment using indexed numel
Jaroslav Hajek <highegg@gmail.com>
parents: 9240
diff changeset
85
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11584
diff changeset
86 octave_idx_type numel (const octave_value_list&);
9329
67fc970dad7d improve indexed assignment using indexed numel
Jaroslav Hajek <highegg@gmail.com>
parents: 9240
diff changeset
87
7651
443a8f5a50fd require both subsref variants to be defined in octave_value subclasses
John W. Eaton <jwe@octave.org>
parents: 7444
diff changeset
88 octave_value subsref (const std::string& type,
10313
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
89 const std::list<octave_value_list>& idx)
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
90 {
7651
443a8f5a50fd require both subsref variants to be defined in octave_value subclasses
John W. Eaton <jwe@octave.org>
parents: 7444
diff changeset
91 octave_value_list tmp = subsref (type, idx, 1);
443a8f5a50fd require both subsref variants to be defined in octave_value subclasses
John W. Eaton <jwe@octave.org>
parents: 7444
diff changeset
92 return tmp.length () > 0 ? tmp(0) : octave_value ();
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
93 }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
94
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
95 octave_value_list subsref (const std::string& type,
10313
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
96 const std::list<octave_value_list>& idx,
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
97 int nargout);
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
98
13241
2a8dcb5b3a00 improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents: 13141
diff changeset
99 octave_value_list
2a8dcb5b3a00 improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents: 13141
diff changeset
100 do_multi_index_op (int nargout, const octave_value_list& idx)
2a8dcb5b3a00 improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents: 13141
diff changeset
101 {
2a8dcb5b3a00 improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents: 13141
diff changeset
102 return subsref ("(", std::list<octave_value_list> (1, idx), nargout);
2a8dcb5b3a00 improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents: 13141
diff changeset
103 }
2a8dcb5b3a00 improve default indexing for objects
John W. Eaton <jwe@octave.org>
parents: 13141
diff changeset
104
9529
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
105 static octave_value numeric_conv (const Cell& val,
10313
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
106 const std::string& type);
9529
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
107
9147
5579998f8acf Update to OOP facilities.
rtshort@bristlecone.phaselocked.com
parents: 9010
diff changeset
108 void assign(const std::string& k, const octave_value& rhs)
5579998f8acf Update to OOP facilities.
rtshort@bristlecone.phaselocked.com
parents: 9010
diff changeset
109 { map.assign (k, rhs); };
5579998f8acf Update to OOP facilities.
rtshort@bristlecone.phaselocked.com
parents: 9010
diff changeset
110
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
111 octave_value subsasgn (const std::string& type,
10313
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
112 const std::list<octave_value_list>& idx,
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
113 const octave_value& rhs);
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
114
12171
d08901c05c1b fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
115 octave_value undef_subsasgn (const std::string& type,
d08901c05c1b fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
116 const std::list<octave_value_list>& idx,
d08901c05c1b fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
117 const octave_value& rhs);
d08901c05c1b fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
118
8154
265a821f6555 Add subsindex and ismethod functions
David Bateman <dbateman@free.fr>
parents: 7651
diff changeset
119 idx_vector index_vector (void) const;
265a821f6555 Add subsindex and ismethod functions
David Bateman <dbateman@free.fr>
parents: 7651
diff changeset
120
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
121 dim_vector dims (void) const { return map.dims (); }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
122
9529
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
123 size_t byte_size (void) const;
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
124
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
125 // This is the number of elements in each field. The total number
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
126 // of elements is numel () * nfields ().
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
127 octave_idx_type numel (void) const
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
128 {
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
129 dim_vector dv = dims ();
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
130 return dv.numel ();
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
131 }
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
132
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
133 octave_idx_type nfields (void) const { return map.nfields (); }
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
134
9151
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
135 size_t nparents (void) const { return parent_list.size (); }
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
136
9529
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
137 octave_value reshape (const dim_vector& new_dims) const
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12619
diff changeset
138 {
12619
3b2e005e4219 Return octave_value of the same class as the original.
David Bateman <dbateman@free.fr>
parents: 12171
diff changeset
139 octave_class retval = octave_class (*this);
3b2e005e4219 Return octave_value of the same class as the original.
David Bateman <dbateman@free.fr>
parents: 12171
diff changeset
140 retval.map = retval.map_value().reshape (new_dims);
3b2e005e4219 Return octave_value of the same class as the original.
David Bateman <dbateman@free.fr>
parents: 12171
diff changeset
141 return octave_value (new octave_class (retval));
3b2e005e4219 Return octave_value of the same class as the original.
David Bateman <dbateman@free.fr>
parents: 12171
diff changeset
142 }
9529
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
143
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
144 octave_value resize (const dim_vector& dv, bool = false) const
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12619
diff changeset
145 {
12619
3b2e005e4219 Return octave_value of the same class as the original.
David Bateman <dbateman@free.fr>
parents: 12171
diff changeset
146 octave_class retval = octave_class (*this);
3b2e005e4219 Return octave_value of the same class as the original.
David Bateman <dbateman@free.fr>
parents: 12171
diff changeset
147 retval.map.resize (dv);
3b2e005e4219 Return octave_value of the same class as the original.
David Bateman <dbateman@free.fr>
parents: 12171
diff changeset
148 return octave_value (new octave_class (retval));
3b2e005e4219 Return octave_value of the same class as the original.
David Bateman <dbateman@free.fr>
parents: 12171
diff changeset
149 }
9529
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
150
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
151 bool is_defined (void) const { return true; }
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
152
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
153 bool is_map (void) const { return false; }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
154
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
155 bool is_object (void) const { return true; }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
156
10742
604e13a89c7f initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents: 10521
diff changeset
157 octave_map map_value (void) const { return map; }
604e13a89c7f initial code for structs rewrite
Jaroslav Hajek <highegg@gmail.com>
parents: 10521
diff changeset
158
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
159 string_vector map_keys (void) const;
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
160
9151
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
161 std::list<std::string> parent_class_name_list (void) const
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
162 { return parent_list; }
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
163
9010
f914834836e7 Partial implementation of derived classes using the old form with "@" files.
rtshort@smoketree.phaselocked.com
parents: 8950
diff changeset
164 string_vector parent_class_names (void) const
f914834836e7 Partial implementation of derived classes using the old form with "@" files.
rtshort@smoketree.phaselocked.com
parents: 8950
diff changeset
165 { return string_vector (parent_list); }
f914834836e7 Partial implementation of derived classes using the old form with "@" files.
rtshort@smoketree.phaselocked.com
parents: 8950
diff changeset
166
f914834836e7 Partial implementation of derived classes using the old form with "@" files.
rtshort@smoketree.phaselocked.com
parents: 8950
diff changeset
167 octave_base_value *find_parent_class (const std::string&);
f914834836e7 Partial implementation of derived classes using the old form with "@" files.
rtshort@smoketree.phaselocked.com
parents: 8950
diff changeset
168
9767
0df32e0b2074 fix base class field assignment
Jaroslav Hajek <highegg@gmail.com>
parents: 9581
diff changeset
169 octave_base_value *unique_parent_class (const std::string&);
0df32e0b2074 fix base class field assignment
Jaroslav Hajek <highegg@gmail.com>
parents: 9581
diff changeset
170
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
171 void print (std::ostream& os, bool pr_as_read_syntax = false) const;
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
172
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
173 void print_raw (std::ostream& os, bool pr_as_read_syntax = false) const;
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
174
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
175 bool print_name_tag (std::ostream& os, const std::string& name) const;
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
176
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11584
diff changeset
177 void print_with_name (std::ostream& os, const std::string& name,
10313
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
178 bool print_padding = true);
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
179
9190
7a10410db2c6 [mq]: x
Robert T. Short <rtshort@ieee.org>
parents: 9182
diff changeset
180 bool reconstruct_exemplar (void);
7a10410db2c6 [mq]: x
Robert T. Short <rtshort@ieee.org>
parents: 9182
diff changeset
181
9240
f27a8c07f0b2 clear -classes and support.
Robert T. Short <octave@phaselockedsystems.com>
parents: 9190
diff changeset
182 static void clear_exemplar_map (void);
f27a8c07f0b2 clear -classes and support.
Robert T. Short <octave@phaselockedsystems.com>
parents: 9190
diff changeset
183
9182
23af5910e5f5 make load work for derived classses
Robert T. Short <octave@phaselockedsystems.com>
parents: 9151
diff changeset
184 bool reconstruct_parents (void);
23af5910e5f5 make load work for derived classses
Robert T. Short <octave@phaselockedsystems.com>
parents: 9151
diff changeset
185
8212
ebf6f6a0f9a7 Allow saving/loading of classes. Add saveobj and loadobj methods
David Bateman <dbateman@free.fr>
parents: 8154
diff changeset
186 bool save_ascii (std::ostream& os);
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
187
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
188 bool load_ascii (std::istream& is);
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
189
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
190 bool save_binary (std::ostream& os, bool& save_as_floats);
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
191
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11584
diff changeset
192 bool load_binary (std::istream& is, bool swap,
10313
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
193 oct_mach_info::float_format fmt);
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
194
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
195 #if defined (HAVE_HDF5)
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
196 bool save_hdf5 (hid_t loc_id, const char *name, bool save_as_floats);
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
197
9881
b3089dba88bf Remove HDF5 cruft for older versions of HDF5
Kacper Kowalik
parents: 9767
diff changeset
198 bool load_hdf5 (hid_t loc_id, const char *name);
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
199 #endif
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
200
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
201 mxArray *as_mxArray (void) const;
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
202
9529
8e5009334661 partially revert e79470be3ecb
Jaroslav Hajek <highegg@gmail.com>
parents: 9522
diff changeset
203 private:
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
204
10768
8a868004a437 use octave_map for octave_class
Jaroslav Hajek <highegg@gmail.com>
parents: 10742
diff changeset
205 octave_map map;
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
206
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
207 DECLARE_OCTAVE_ALLOCATOR
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
208
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
209 public:
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
210 int type_id (void) const { return t_id; }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
211 std::string type_name (void) const { return t_name; }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
212 std::string class_name (void) const { return c_name; }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
213
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
214 static int static_type_id (void) { return t_id; }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
215 static std::string static_type_name (void) { return t_name; }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
216 static std::string static_class_name (void) { return "<unknown>"; }
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
217 static void register_type (void);
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
218
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
219 private:
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
220 static int t_id;
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
221
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
222 static const std::string t_name;
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
223 std::string c_name;
9010
f914834836e7 Partial implementation of derived classes using the old form with "@" files.
rtshort@smoketree.phaselocked.com
parents: 8950
diff changeset
224 std::list<std::string> parent_list;
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
225
9581
3d0d2bda3a0f fix previous change, avoid duplicate loads of methods in descendant classes
Jaroslav Hajek <highegg@gmail.com>
parents: 9529
diff changeset
226 bool in_class_method (void);
10926
f687bd17ce21 fix field assignment from private class methods
Jaroslav Hajek <highegg@gmail.com>
parents: 10768
diff changeset
227 std::string get_current_method_class (void);
9151
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
228
12171
d08901c05c1b fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
229 octave_value subsasgn_common (const octave_value& obj,
d08901c05c1b fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
230 const std::string& type,
d08901c05c1b fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
231 const std::list<octave_value_list>& idx,
d08901c05c1b fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
232 const octave_value& rhs);
d08901c05c1b fix bug in class assignment to undefined object with index
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
233
9522
e79470be3ecb implement subsasgn this-arg optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9521
diff changeset
234 int obsolete_copies;
e79470be3ecb implement subsasgn this-arg optimization
Jaroslav Hajek <highegg@gmail.com>
parents: 9521
diff changeset
235
9151
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
236 public:
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
237 // The list of field names and parent classes defines a class. We
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
238 // keep track of each class that has been created so that we know
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
239 class exemplar_info
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
240 {
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
241 public:
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
242
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
243 exemplar_info (void) : field_names (), parent_class_names () { }
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
244
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
245 exemplar_info (const octave_value& obj);
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
246
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
247 exemplar_info (const exemplar_info& x)
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
248 : field_names (x.field_names),
10313
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
249 parent_class_names (x.parent_class_names) { }
9151
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
250
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
251 exemplar_info& operator = (const exemplar_info& x)
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
252 {
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
253 if (&x != this)
10313
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
254 {
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
255 field_names = x.field_names;
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
256 parent_class_names = x.parent_class_names;
f3b65e1ae355 untabify src header files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
257 }
9151
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
258 return *this;
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
259 }
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
260
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
261 octave_idx_type nfields (void) const { return field_names.length (); }
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
262
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
263 size_t nparents (void) const { return parent_class_names.size (); }
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
264
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
265 string_vector fields (void) const { return field_names; }
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
266
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
267 std::list<std::string> parents (void) const { return parent_class_names; }
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
268
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
269 bool compare (const octave_value& obj) const;
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
270
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
271 private:
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
272
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
273 string_vector field_names;
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
274 std::list<std::string> parent_class_names;
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
275 };
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
276
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
277 // A map from class names to lists of fields.
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
278 static std::map<std::string, exemplar_info> exemplar_map;
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
279
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
280 typedef std::map<std::string, exemplar_info>::iterator exemplar_iterator;
d8f9588c6ba1 object exemplars
John W. Eaton <jwe@octave.org>
parents: 9147
diff changeset
281 typedef std::map<std::string, exemplar_info>::const_iterator exemplar_const_iterator;
7338
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
282 };
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
283
5215422865e0 [project @ 2007-12-28 22:31:35 by jwe]
jwe
parents:
diff changeset
284 #endif