GNU Octave  4.2.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ov-typeinfo.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2017 John W. Eaton
4 
5 This file is part of Octave.
6 
7 Octave is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if ! defined (octave_ov_typeinfo_h)
24 #define octave_ov_typeinfo_h 1
25 
26 #include "octave-config.h"
27 
28 #include <string>
29 
30 #include "Array.h"
31 
32 #include "oct-map.h"
33 #include "ov.h"
34 
35 class string_vector;
36 
37 class
40 {
41 public:
42 
43  typedef octave_value (*unary_class_op_fcn) (const octave_value&);
44 
45  typedef octave_value (*unary_op_fcn) (const octave_base_value&);
46 
47  typedef void (*non_const_unary_op_fcn) (octave_base_value&);
48 
49  typedef octave_value (*binary_class_op_fcn)
50  (const octave_value&, const octave_value&);
51 
52  typedef octave_value (*binary_op_fcn)
54 
55  typedef octave_value (*cat_op_fcn)
58 
59  typedef octave_value (*assign_op_fcn)
60  (octave_base_value&, const octave_value_list&, const octave_base_value&);
61 
62  typedef octave_value (*assignany_op_fcn)
63  (octave_base_value&, const octave_value_list&, const octave_value&);
64 
65  static bool instance_ok (void);
66 
67  static int register_type (const std::string&, const std::string&,
68  const octave_value&);
69 
70  static bool register_unary_class_op (octave_value::unary_op,
71  unary_class_op_fcn);
72 
73  static bool register_unary_op (octave_value::unary_op, int, unary_op_fcn);
74 
75  static bool register_non_const_unary_op (octave_value::unary_op, int,
76  non_const_unary_op_fcn);
77 
78  static bool register_binary_class_op (octave_value::binary_op,
79  binary_class_op_fcn);
80 
81  static bool register_binary_op (octave_value::binary_op, int, int,
82  binary_op_fcn);
83 
84  static bool register_binary_class_op (octave_value::compound_binary_op,
85  binary_class_op_fcn);
86 
87  static bool register_binary_op (octave_value::compound_binary_op, int, int,
88  binary_op_fcn);
89 
90  static bool register_cat_op (int, int, cat_op_fcn);
91 
92  static bool register_assign_op (octave_value::assign_op, int, int,
93  assign_op_fcn);
94 
95  static bool register_assignany_op (octave_value::assign_op, int,
96  assignany_op_fcn);
97 
98  static bool register_pref_assign_conv (int, int, int);
99 
100  static bool
101  register_widening_op (int, int, octave_base_value::type_conv_fcn);
102 
103  static octave_value
105  {
106  return instance->do_lookup_type (nm);
107  }
108 
109  static unary_class_op_fcn
111  {
112  return instance->do_lookup_unary_class_op (op);
113  }
114 
115  static unary_op_fcn
117  {
118  return instance->do_lookup_unary_op (op, t);
119  }
120 
121  static non_const_unary_op_fcn
123  {
124  return instance->do_lookup_non_const_unary_op (op, t);
125  }
126 
127  static binary_class_op_fcn
129  {
130  return instance->do_lookup_binary_class_op (op);
131  }
132 
133  static binary_op_fcn
135  {
136  return instance->do_lookup_binary_op (op, t1, t2);
137  }
138 
139  static binary_class_op_fcn
141  {
142  return instance->do_lookup_binary_class_op (op);
143  }
144 
145  static binary_op_fcn
147  {
148  return instance->do_lookup_binary_op (op, t1, t2);
149  }
150 
151  static cat_op_fcn
152  lookup_cat_op (int t1, int t2)
153  {
154  return instance->do_lookup_cat_op (t1, t2);
155  }
156 
157  static assign_op_fcn
158  lookup_assign_op (octave_value::assign_op op, int t_lhs, int t_rhs)
159  {
160  return instance->do_lookup_assign_op (op, t_lhs, t_rhs);
161  }
162 
163  static assignany_op_fcn
165  {
166  return instance->do_lookup_assignany_op (op, t_lhs);
167  }
168 
169  static int
170  lookup_pref_assign_conv (int t_lhs, int t_rhs)
171  {
172  return instance->do_lookup_pref_assign_conv (t_lhs, t_rhs);
173  }
174 
176  lookup_widening_op (int t, int t_result)
177  {
178  return instance->do_lookup_widening_op (t, t_result);
179  }
180 
182  {
183  return instance->do_installed_type_names ();
184  }
185 
187  {
188  return instance->do_installed_type_info ();
189  }
190 
191 protected:
192 
194  : num_types (0), types (dim_vector (init_tab_sz, 1), ""),
195  vals (dim_vector (init_tab_sz, 1)),
196  unary_class_ops (dim_vector (octave_value::num_unary_ops, 1), 0),
197  unary_ops (dim_vector (octave_value::num_unary_ops, init_tab_sz), 0),
198  non_const_unary_ops (dim_vector (octave_value::num_unary_ops, init_tab_sz), 0),
199  binary_class_ops (dim_vector (octave_value::num_binary_ops, 1), 0),
200  binary_ops (dim_vector (octave_value::num_binary_ops, init_tab_sz, init_tab_sz), 0),
201  compound_binary_class_ops (dim_vector (octave_value::num_compound_binary_ops, 1), 0),
202  compound_binary_ops (dim_vector (octave_value::num_compound_binary_ops, init_tab_sz, init_tab_sz), 0),
203  cat_ops (dim_vector (init_tab_sz, init_tab_sz), 0),
204  assign_ops (dim_vector (octave_value::num_assign_ops, init_tab_sz, init_tab_sz), 0),
205  assignany_ops (dim_vector (octave_value::num_assign_ops, init_tab_sz), 0),
206  pref_assign_conv (dim_vector (init_tab_sz, init_tab_sz), -1),
207  widening_ops (dim_vector (init_tab_sz, init_tab_sz), 0) { }
208 
210 
211 private:
212 
213  static const int init_tab_sz;
214 
216 
217  static void cleanup_instance (void) { delete instance; instance = 0; }
218 
220 
222 
224 
226 
228 
230 
232 
234 
236 
238 
240 
242 
244 
246 
248 
249  int do_register_type (const std::string&, const std::string&,
250  const octave_value&);
251 
252  bool do_register_unary_class_op (octave_value::unary_op, unary_class_op_fcn);
253 
254  bool do_register_unary_op (octave_value::unary_op, int, unary_op_fcn);
255 
256  bool do_register_non_const_unary_op (octave_value::unary_op, int,
257  non_const_unary_op_fcn);
258 
259  bool do_register_binary_class_op (octave_value::binary_op,
260  binary_class_op_fcn);
261 
262  bool do_register_binary_op (octave_value::binary_op, int, int,
263  binary_op_fcn);
264 
265  bool do_register_binary_class_op (octave_value::compound_binary_op,
266  binary_class_op_fcn);
267 
268  bool do_register_binary_op (octave_value::compound_binary_op, int, int,
269  binary_op_fcn);
270 
271  bool do_register_cat_op (int, int, cat_op_fcn);
272 
273  bool do_register_assign_op (octave_value::assign_op, int, int,
274  assign_op_fcn);
275 
276  bool do_register_assignany_op (octave_value::assign_op, int,
277  assignany_op_fcn);
278 
279  bool do_register_pref_assign_conv (int, int, int);
280 
281  bool do_register_widening_op (int, int, octave_base_value::type_conv_fcn);
282 
283  octave_value do_lookup_type (const std::string& nm);
284 
285  unary_class_op_fcn do_lookup_unary_class_op (octave_value::unary_op);
286 
287  unary_op_fcn do_lookup_unary_op (octave_value::unary_op, int);
288 
289  non_const_unary_op_fcn do_lookup_non_const_unary_op
290  (octave_value::unary_op, int);
291 
292  binary_class_op_fcn do_lookup_binary_class_op (octave_value::binary_op);
293 
294  binary_op_fcn do_lookup_binary_op (octave_value::binary_op, int, int);
295 
296  binary_class_op_fcn do_lookup_binary_class_op (octave_value::compound_binary_op);
297 
298  binary_op_fcn do_lookup_binary_op (octave_value::compound_binary_op,
299  int, int);
300 
301  cat_op_fcn do_lookup_cat_op (int, int);
302 
303  assign_op_fcn do_lookup_assign_op (octave_value::assign_op, int, int);
304 
305  assignany_op_fcn do_lookup_assignany_op (octave_value::assign_op, int);
306 
307  int do_lookup_pref_assign_conv (int, int);
308 
309  octave_base_value::type_conv_fcn do_lookup_widening_op (int, int);
310 
311  string_vector do_installed_type_names (void) const;
312 
313  octave_scalar_map do_installed_type_info (void) const;
314 
315  octave_scalar_map unary_ops_map (void) const;
316  octave_scalar_map non_const_unary_ops_map (void) const;
317  octave_scalar_map binary_ops_map (void) const;
318  octave_scalar_map compound_binary_ops_map (void) const;
319  octave_scalar_map assign_ops_map (void) const;
320  octave_scalar_map assignany_ops_map (void) const;
321 
322  // No copying!
323 
325 
327 };
328 
329 #endif
static const int init_tab_sz
Definition: ov-typeinfo.h:213
Array< void * > binary_ops
Definition: ov-typeinfo.h:233
assign_op
Definition: ov.h:131
const octave_base_value const Array< octave_idx_type > & ra_idx
static octave_scalar_map installed_type_info(void)
Definition: ov-typeinfo.h:186
static void cleanup_instance(void)
Definition: ov-typeinfo.h:217
static string_vector installed_type_names(void)
Definition: ov-typeinfo.h:181
static non_const_unary_op_fcn lookup_non_const_unary_op(octave_value::unary_op op, int t)
Definition: ov-typeinfo.h:122
Array< int > pref_assign_conv
Definition: ov-typeinfo.h:245
Array< octave_value > vals
Definition: ov-typeinfo.h:223
binary_op
Definition: ov.h:89
Array< void * > binary_class_ops
Definition: ov-typeinfo.h:231
static binary_op_fcn lookup_binary_op(octave_value::binary_op op, int t1, int t2)
Definition: ov-typeinfo.h:134
static int lookup_pref_assign_conv(int t_lhs, int t_rhs)
Definition: ov-typeinfo.h:170
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function t
Definition: ov-usr-fcn.cc:935
static octave_value_typeinfo * instance
Definition: ov-typeinfo.h:215
static unary_class_op_fcn lookup_unary_class_op(octave_value::unary_op op)
Definition: ov-typeinfo.h:110
static octave_value lookup_type(const std::string &nm)
Definition: ov-typeinfo.h:104
OCTAVE_EXPORT octave_value_list isdir nd deftypefn *std::string nm
Definition: utils.cc:941
#define OCTINTERP_API
Definition: mexproto.h:69
static assignany_op_fcn lookup_assignany_op(octave_value::assign_op op, int t_lhs)
Definition: ov-typeinfo.h:164
Array< void * > non_const_unary_ops
Definition: ov-typeinfo.h:229
Array< void * > assignany_ops
Definition: ov-typeinfo.h:243
Array< void * > unary_class_ops
Definition: ov-typeinfo.h:225
string_vector & operator=(const string_vector &s)
Definition: str-vec.h:69
static binary_class_op_fcn lookup_binary_class_op(octave_value::binary_op op)
Definition: ov-typeinfo.h:128
Array< void * > cat_ops
Definition: ov-typeinfo.h:239
static cat_op_fcn lookup_cat_op(int t1, int t2)
Definition: ov-typeinfo.h:152
octave_base_value *(* type_conv_fcn)(const octave_base_value &)
Definition: ov-base.h:190
static binary_class_op_fcn lookup_binary_class_op(octave_value::compound_binary_op op)
Definition: ov-typeinfo.h:140
Array< void * > unary_ops
Definition: ov-typeinfo.h:227
Array< void * > assign_ops
Definition: ov-typeinfo.h:241
compound_binary_op
Definition: ov.h:114
Array< void * > widening_ops
Definition: ov-typeinfo.h:247
static assign_op_fcn lookup_assign_op(octave_value::assign_op op, int t_lhs, int t_rhs)
Definition: ov-typeinfo.h:158
Array< void * > compound_binary_ops
Definition: ov-typeinfo.h:237
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:87
unary_op
Definition: ov.h:76
If this string is the system will ring the terminal sometimes it is useful to be able to print the original representation of the string
Definition: utils.cc:854
Array< std::string > types
Definition: ov-typeinfo.h:221
return octave_value(v1.char_array_value().concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string())? '\'': '"'))
static unary_op_fcn lookup_unary_op(octave_value::unary_op op, int t)
Definition: ov-typeinfo.h:116
Array< void * > compound_binary_class_ops
Definition: ov-typeinfo.h:235
static octave_base_value::type_conv_fcn lookup_widening_op(int t, int t_result)
Definition: ov-typeinfo.h:176
static binary_op_fcn lookup_binary_op(octave_value::compound_binary_op op, int t1, int t2)
Definition: ov-typeinfo.h:146