GNU Octave  4.4.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
ov-typeinfo.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2018 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
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License 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 <https://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 namespace octave
38 {
39  class type_info
40  {
41  public:
42 
44 
46 
48 
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)
61 
64 
65  explicit type_info (int init_tab_sz = 16);
66 
67  // No copying!
68 
69  type_info (const type_info&) = delete;
70 
71  type_info& operator = (const type_info&) = delete;
72 
73  ~type_info (void) = default;
74 
75  // It is intentional that there is no install_type function.
76 
79  {
80  return register_unary_class_op (op, f, true);
81  }
82 
84  {
85  return register_unary_op (op, t, f, true);
86  }
87 
90  {
91  return register_non_const_unary_op (op, t, f, true);
92  }
93 
96  {
97  return register_binary_class_op (op, f, true);
98  }
99 
100  bool install_binary_op (octave_value::binary_op op, int t1, int t2,
102  {
103  return register_binary_op (op, t1, t2, f, true);
104  }
105 
108  {
109  return register_binary_class_op (op, f, true);
110  }
111 
113  int t_lhs, int t_rhs, binary_op_fcn f)
114  {
115  return register_binary_op (op, t_lhs, t_rhs, f, true);
116  }
117 
118  bool install_cat_op (int t1, int t2, cat_op_fcn f)
119  {
120  return register_cat_op (t1, t2, f, true);
121  }
122 
124  int t_lhs, int t_rhs, assign_op_fcn f)
125  {
126  return register_assign_op (op, t_lhs, t_rhs, f, true);
127  }
128 
131  {
132  return register_assignany_op (op, t_lhs, f, true);
133  }
134 
135  bool install_pref_assign_conv (int t_lhs, int t_rhs, int t_result)
136  {
137  return register_pref_assign_conv (t_lhs, t_rhs, t_result, true);
138  }
139 
140  bool install_widening_op (int t, int t_result,
142  {
143  return register_widening_op (t, t_result, f, true);
144  }
145 
146  int register_type (const std::string&, const std::string&,
147  const octave_value&, bool abort_on_duplicate = false);
148 
150  bool abort_on_duplicate = false);
151 
153  bool abort_on_duplicate = false);
154 
157  bool abort_on_duplicate = false);
158 
161  bool abort_on_duplicate = false);
162 
164  binary_op_fcn, bool abort_on_duplicate = false);
165 
168  bool abort_on_duplicate = false);
169 
171  binary_op_fcn, bool abort_on_duplicate = false);
172 
173  bool register_cat_op (int, int, cat_op_fcn,
174  bool abort_on_duplicate = false);
175 
177  bool abort_on_duplicate = false);
178 
180  bool abort_on_duplicate = false);
181 
182  bool register_pref_assign_conv (int, int, int,
183  bool abort_on_duplicate = false);
184 
186  bool abort_on_duplicate = false);
187 
189 
191 
193 
196 
198 
200 
203 
206 
207  cat_op_fcn lookup_cat_op (int, int);
208 
210 
212 
213  int lookup_pref_assign_conv (int, int);
214 
216 
217  string_vector installed_type_names (void) const;
218 
220 
221  octave_scalar_map unary_ops_map (void) const;
222 
224 
225  octave_scalar_map binary_ops_map (void) const;
226 
228 
229  octave_scalar_map assign_ops_map (void) const;
230 
232 
233  private:
234 
236 
238 
240 
242 
244 
246 
248 
250 
252 
254 
256 
258 
260 
262 
264  };
265 }
266 
267 namespace octave_value_typeinfo
268 {
270 
272 
274 
276 
278 
280 
282 
284 
285  extern int register_type (const std::string& t_name,
286  const std::string& c_name,
287  const octave_value& val);
288 
289  OCTAVE_DEPRECATED(4.4, "use octave::type_info::register_unary_class_op instead")
290  extern bool register_unary_class_op (octave_value::unary_op op,
292 
293  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_unary_op instead")
294  extern bool register_unary_op (octave_value::unary_op op,
295  int t, unary_op_fcn f);
296 
297  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_non_const_unary_op instead")
298  extern bool register_non_const_unary_op (octave_value::unary_op op,
299  int t, non_const_unary_op_fcn f);
300 
301  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_binary_class_op instead")
302  extern bool register_binary_class_op (octave_value::binary_op op,
304 
305  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_binary_op instead")
306  extern bool register_binary_op (octave_value::binary_op op,
307  int t1, int t2, binary_op_fcn f);
308 
309  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_binary_class_op instead")
310  extern bool register_binary_class_op (octave_value::compound_binary_op op,
312 
313  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_binary_op instead")
314  extern bool register_binary_op (octave_value::compound_binary_op op,
315  int t1, int t2, binary_op_fcn f);
316 
317  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_cat_op instead")
318  extern bool register_cat_op (int t1, int t2, cat_op_fcn f);
319 
320  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_assign_op instead")
321  extern bool register_assign_op (octave_value::assign_op op,
322  int t_lhs, int t_rhs, assign_op_fcn f);
323 
324  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_assignany_op instead")
325  extern bool register_assignany_op (octave_value::assign_op op,
326  int t_lhs, assignany_op_fcn f);
327 
328  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_pref_assign_conv instead")
329  extern bool register_pref_assign_conv (int t_lhs, int t_rhs, int t_result);
330 
331  OCTAVE_DEPRECATED (4.4, "use octave::type_info::register_widening_op instead")
332  extern bool register_widening_op (int t, int t_result,
333  octave_base_value::type_conv_fcn f);
334 
335  extern octave_value lookup_type (const std::string& nm);
336 
338 
339  extern unary_op_fcn lookup_unary_op (octave_value::unary_op op, int t);
340 
342  lookup_non_const_unary_op (octave_value::unary_op op, int t);
343 
344  extern binary_class_op_fcn
345  lookup_binary_class_op (octave_value::binary_op op);
346 
347  extern binary_op_fcn
348  lookup_binary_op (octave_value::binary_op op, int t1, int t2);
349 
350  extern binary_class_op_fcn
351  lookup_binary_class_op (octave_value::compound_binary_op op);
352 
353  extern binary_op_fcn
354  lookup_binary_op (octave_value::compound_binary_op op, int t1, int t2);
355 
356  extern cat_op_fcn lookup_cat_op (int t1, int t2);
357 
358  extern assign_op_fcn
359  lookup_assign_op (octave_value::assign_op op, int t_lhs, int t_rhs);
360 
361  extern assignany_op_fcn
362  lookup_assignany_op (octave_value::assign_op op, int t_lhs);
363 
364  extern int lookup_pref_assign_conv (int t_lhs, int t_rhs);
365 
366  extern octave_base_value::type_conv_fcn
367  lookup_widening_op (int t, int t_result);
368 
369  extern string_vector installed_type_names (void);
370 
372 }
373 
374 #endif
octave::type_info::assignany_op_fcn assignany_op_fcn
Definition: ov-typeinfo.h:283
bool register_cat_op(int t1, int t2, cat_op_fcn f)
Definition: ov-typeinfo.cc:834
octave::type_info::unary_op_fcn unary_op_fcn
Definition: ov-typeinfo.h:271
bool register_assign_op(octave_value::assign_op, int, int, assign_op_fcn, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:370
octave_scalar_map assignany_ops_map(void) const
Definition: ov-typeinfo.cc:717
bool register_unary_op(octave_value::unary_op op, int t, unary_op_fcn f)
Definition: ov-typeinfo.cc:780
Array< void * > non_const_unary_ops
Definition: ov-typeinfo.h:245
octave_scalar_map non_const_unary_ops_map(void) const
Definition: ov-typeinfo.cc:615
octave_value lookup_type(const std::string &nm)
Definition: ov-typeinfo.cc:476
bool install_widening_op(int t, int t_result, octave_base_value::type_conv_fcn f)
Definition: ov-typeinfo.h:140
Array< std::string > types
Definition: ov-typeinfo.h:237
octave_value(* binary_class_op_fcn)(const octave_value &, const octave_value &)
Definition: ov-typeinfo.h:50
assign_op
Definition: ov.h:136
Array< void * > cat_ops
Definition: ov-typeinfo.h:255
Array< void * > compound_binary_class_ops
Definition: ov-typeinfo.h:251
unary_op_fcn lookup_unary_op(octave_value::unary_op, int)
Definition: ov-typeinfo.cc:501
const octave_base_value const Array< octave_idx_type > & ra_idx
octave_value(* cat_op_fcn)(octave_base_value &, const octave_base_value &, const Array< octave_idx_type > &ra_idx)
Definition: ov-typeinfo.h:56
octave_value(* binary_op_fcn)(const octave_base_value &, const octave_base_value &)
Definition: ov-typeinfo.h:53
Array< octave_value * > vals
Definition: ov-typeinfo.h:239
identity matrix If supplied two scalar respectively For allows like xample val
Definition: data.cc:4986
F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE * f
octave_base_value::type_conv_fcn lookup_widening_op(int t, int t_result)
Definition: ov-typeinfo.cc:981
octave_value(* assignany_op_fcn)(octave_base_value &, const octave_value_list &, const octave_value &)
Definition: ov-typeinfo.h:63
bool register_pref_assign_conv(int, int, int, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:425
octave_base_value::type_conv_fcn lookup_widening_op(int, int)
Definition: ov-typeinfo.cc:572
bool install_unary_op(octave_value::unary_op op, int t, unary_op_fcn f)
Definition: ov-typeinfo.h:83
binary_op
Definition: ov.h:94
binary_op_fcn lookup_binary_op(octave_value::binary_op, int, int)
Definition: ov-typeinfo.cc:522
void(* non_const_unary_op_fcn)(octave_base_value &)
Definition: ov-typeinfo.h:47
STL namespace.
octave_value lookup_type(const std::string &nm)
Definition: ov-typeinfo.cc:877
bool register_binary_op(octave_value::binary_op, int, int, binary_op_fcn, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:262
string_vector installed_type_names(void) const
Definition: ov-typeinfo.cc:579
assignany_op_fcn lookup_assignany_op(octave_value::assign_op op, int t_lhs)
Definition: ov-typeinfo.cc:964
Array< void * > binary_class_ops
Definition: ov-typeinfo.h:247
octave::type_info::unary_class_op_fcn unary_class_op_fcn
Definition: ov-typeinfo.h:269
int lookup_pref_assign_conv(int t_lhs, int t_rhs)
Definition: ov-typeinfo.cc:972
binary_op_fcn lookup_binary_op(octave_value::binary_op op, int t1, int t2)
Definition: ov-typeinfo.cc:920
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:997
binary_class_op_fcn lookup_binary_class_op(octave_value::binary_op)
Definition: ov-typeinfo.cc:515
unary_class_op_fcn lookup_unary_class_op(octave_value::unary_op op)
Definition: ov-typeinfo.cc:885
assign_op_fcn lookup_assign_op(octave_value::assign_op op, int t_lhs, int t_rhs)
Definition: ov-typeinfo.cc:955
octave::type_info::non_const_unary_op_fcn non_const_unary_op_fcn
Definition: ov-typeinfo.h:273
bool register_pref_assign_conv(int t_lhs, int t_rhs, int t_result)
Definition: ov-typeinfo.cc:860
octave_value(* unary_op_fcn)(const octave_base_value &)
Definition: ov-typeinfo.h:45
octave_scalar_map binary_ops_map(void) const
Definition: ov-typeinfo.cc:640
bool install_binary_op(octave_value::compound_binary_op op, int t_lhs, int t_rhs, binary_op_fcn f)
Definition: ov-typeinfo.h:112
octave_value(* assign_op_fcn)(octave_base_value &, const octave_value_list &, const octave_base_value &)
Definition: ov-typeinfo.h:60
Array< void * > assignany_ops
Definition: ov-typeinfo.h:259
octave_scalar_map assign_ops_map(void) const
Definition: ov-typeinfo.cc:692
type_info(int init_tab_sz=16)
Definition: ov-typeinfo.cc:64
octave_scalar_map installed_type_info(void) const
Definition: ov-typeinfo.cc:741
assign_op_fcn lookup_assign_op(octave_value::assign_op, int, int)
Definition: ov-typeinfo.cc:551
bool install_cat_op(int t1, int t2, cat_op_fcn f)
Definition: ov-typeinfo.h:118
bool install_assignany_op(octave_value::assign_op op, int t_lhs, assignany_op_fcn f)
Definition: ov-typeinfo.h:129
OCTAVE_EXPORT octave_value_list isdir nd deftypefn *std::string nm
Definition: utils.cc:975
Array< void * > widening_ops
Definition: ov-typeinfo.h:263
octave_scalar_map installed_type_info(void)
Definition: ov-typeinfo.cc:997
cat_op_fcn lookup_cat_op(int, int)
Definition: ov-typeinfo.cc:544
Array< void * > assign_ops
Definition: ov-typeinfo.h:257
bool register_unary_op(octave_value::unary_op, int, unary_op_fcn, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:184
int lookup_pref_assign_conv(int, int)
Definition: ov-typeinfo.cc:566
bool register_non_const_unary_op(octave_value::unary_op op, int t, non_const_unary_op_fcn f)
Definition: ov-typeinfo.cc:789
unary_op_fcn lookup_unary_op(octave_value::unary_op op, int t)
Definition: ov-typeinfo.cc:893
bool register_cat_op(int, int, cat_op_fcn, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:346
bool install_pref_assign_conv(int t_lhs, int t_rhs, int t_result)
Definition: ov-typeinfo.h:135
bool register_assign_op(octave_value::assign_op op, int t_lhs, int t_rhs, assign_op_fcn f)
Definition: ov-typeinfo.cc:842
Array< void * > compound_binary_ops
Definition: ov-typeinfo.h:253
Array< void * > unary_ops
Definition: ov-typeinfo.h:243
bool register_assignany_op(octave_value::assign_op, int, assignany_op_fcn, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:399
string_vector installed_type_names(void)
Definition: ov-typeinfo.cc:989
bool register_non_const_unary_op(octave_value::unary_op, int, non_const_unary_op_fcn, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:209
bool install_binary_op(octave_value::binary_op op, int t1, int t2, binary_op_fcn f)
Definition: ov-typeinfo.h:100
bool register_unary_class_op(octave_value::unary_op, unary_class_op_fcn, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:159
bool register_unary_class_op(octave_value::unary_op op, unary_class_op_fcn f)
Definition: ov-typeinfo.cc:771
bool register_binary_class_op(octave_value::binary_op, binary_class_op_fcn, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:236
octave_scalar_map compound_binary_ops_map(void) const
Definition: ov-typeinfo.cc:665
type_info & operator=(const type_info &)=delete
Array< void * > binary_ops
Definition: ov-typeinfo.h:249
bool register_binary_class_op(octave_value::binary_op op, binary_class_op_fcn f)
Definition: ov-typeinfo.cc:798
~type_info(void)=default
octave_scalar_map unary_ops_map(void) const
Definition: ov-typeinfo.cc:590
return octave_value(v1.char_array_value() . concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string()) ? '\'' :'"'))
int register_type(const std::string &, const std::string &, const octave_value &, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:85
non_const_unary_op_fcn lookup_non_const_unary_op(octave_value::unary_op op, int t)
Definition: ov-typeinfo.cc:902
bool register_assignany_op(octave_value::assign_op op, int t_lhs, assignany_op_fcn f)
Definition: ov-typeinfo.cc:851
unary_class_op_fcn lookup_unary_class_op(octave_value::unary_op)
Definition: ov-typeinfo.cc:494
bool register_widening_op(int t, int t_result, octave_base_value::type_conv_fcn f)
Definition: ov-typeinfo.cc:868
int register_type(const std::string &t_name, const std::string &c_name, const octave_value &val)
Definition: ov-typeinfo.cc:762
octave::type_info::binary_op_fcn binary_op_fcn
Definition: ov-typeinfo.h:277
octave::type_info::binary_class_op_fcn binary_class_op_fcn
Definition: ov-typeinfo.h:275
bool install_binary_class_op(octave_value::compound_binary_op op, binary_class_op_fcn f)
Definition: ov-typeinfo.h:106
bool install_assign_op(octave_value::assign_op op, int t_lhs, int t_rhs, assign_op_fcn f)
Definition: ov-typeinfo.h:123
compound_binary_op
Definition: ov.h:119
Array< void * > unary_class_ops
Definition: ov-typeinfo.h:241
octave::type_info::assign_op_fcn assign_op_fcn
Definition: ov-typeinfo.h:281
octave::type_info::cat_op_fcn cat_op_fcn
Definition: ov-typeinfo.h:279
octave_value(* unary_class_op_fcn)(const octave_value &)
Definition: ov-typeinfo.h:43
binary_class_op_fcn lookup_binary_class_op(octave_value::binary_op op)
Definition: ov-typeinfo.cc:911
bool register_widening_op(int, int, octave_base_value::type_conv_fcn, bool abort_on_duplicate=false)
Definition: ov-typeinfo.cc:451
assignany_op_fcn lookup_assignany_op(octave_value::assign_op, int)
Definition: ov-typeinfo.cc:559
non_const_unary_op_fcn lookup_non_const_unary_op(octave_value::unary_op, int)
Definition: ov-typeinfo.cc:508
unary_op
Definition: ov.h:81
bool install_non_const_unary_op(octave_value::unary_op op, int t, non_const_unary_op_fcn f)
Definition: ov-typeinfo.h:88
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:888
bool register_binary_op(octave_value::binary_op op, int t1, int t2, binary_op_fcn f)
Definition: ov-typeinfo.cc:807
octave_base_value *(* type_conv_fcn)(const octave_base_value &)
Definition: ov-base.h:207
bool install_binary_class_op(octave_value::binary_op op, binary_class_op_fcn f)
Definition: ov-typeinfo.h:94
cat_op_fcn lookup_cat_op(int t1, int t2)
Definition: ov-typeinfo.cc:946
bool install_unary_class_op(octave_value::unary_op op, unary_class_op_fcn f)
Definition: ov-typeinfo.h:77
Array< int > pref_assign_conv
Definition: ov-typeinfo.h:261