GNU Octave  4.4.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
ov-base.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2018 John W. Eaton
4 Copyright (C) 2009-2010 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
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12 
13 Octave is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License 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 <https://www.gnu.org/licenses/>.
21 
22 */
23 
24 #if ! defined (octave_ov_base_h)
25 #define octave_ov_base_h 1
26 
27 #include "octave-config.h"
28 
29 #include <cstdlib>
30 
31 #include <iosfwd>
32 #include <list>
33 #include <string>
34 
35 #include "Range.h"
36 #include "data-conv.h"
37 #include "mx-base.h"
38 #include "str-vec.h"
39 
40 #include "error.h"
41 #include "oct-hdf5-types.h"
42 #include "oct-stream.h"
43 
44 namespace octave
45 {
46  class type_info;
47 
48  // FIXME: This is not ideal, but it avoids including
49  // interpreter-private.h here and bringing in a lot of unnecessary
50  // symbols that require even more header files.
51 
52  extern type_info& __get_type_info__ (const std::string&);
53 }
54 
55 class Cell;
57 class mxArray;
58 class octave_map;
59 class octave_scalar_map;
60 class octave_value;
61 class octave_value_list;
62 class octave_classdef;
63 class octave_function;
65 class octave_user_script;
66 class octave_user_code;
67 class octave_fcn_handle;
68 class octave_fcn_inline;
69 class octave_value_list;
70 
72 {
92 };
93 
94 extern OCTINTERP_API std::string
96 
97 inline bool btyp_isnumeric (builtin_type_t btyp)
98 { return btyp <= btyp_uint64; }
99 
100 inline bool btyp_isinteger (builtin_type_t btyp)
101 { return btyp >= btyp_int8 && btyp <= btyp_uint64; }
102 
103 inline bool btyp_isfloat (builtin_type_t btyp)
104 { return btyp <= btyp_float_complex; }
105 
106 inline bool btyp_isarray (builtin_type_t btyp)
107 { return btyp <= btyp_char; }
108 
109 //! Determine the resulting type for a possible mixed-type operation.
110 //!
111 //! Rules for the resulting type:
112 //! - bool -> double
113 //! - single + double -> single
114 //! - real + complex -> complex
115 //! - integer + real -> integer
116 //! - uint + uint -> uint (the bigger one)
117 //! - sint + sint -> sint (the bigger one)
118 //!
119 //! @return The resulting type or "unknown type", if the resulting type cannot
120 //! be determined.
121 
122 extern OCTINTERP_API
124 
125 template <typename T>
127 {
129 };
130 
131 #define DEF_CLASS_TO_BTYP(CLASS,BTYP) \
132  template <> \
133  struct class_to_btyp<CLASS> \
134  { \
135  static const builtin_type_t btyp = BTYP; \
136  }
137 
152 
153 // T_ID is the type id of struct objects, set by register_type().
154 // T_NAME is the type name of struct objects.
155 
156 #define OCTAVE_EMPTY_CPP_ARG /* empty */
157 
158 #define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA \
159  DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2 (OCTAVE_EMPTY_CPP_ARG)
160 
161 #define DECLARE_OV_BASE_TYPEID_FUNCTIONS_AND_DATA \
162  DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2(virtual)
163 
164 #define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2(VIRTUAL) \
165  public: \
166  VIRTUAL int type_id (void) const { return t_id; } \
167  VIRTUAL std::string type_name (void) const { return t_name; } \
168  VIRTUAL std::string class_name (void) const { return c_name; } \
169  static int static_type_id (void) { return t_id; } \
170  static std::string static_type_name (void) { return t_name; } \
171  static std::string static_class_name (void) { return c_name; } \
172  static void register_type (void); \
173  static void register_type (octave::type_info&); \
174  \
175  private: \
176  static int t_id; \
177  static const std::string t_name; \
178  static const std::string c_name;
179 
180 #define DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(t, n, c) \
181  int t::t_id (-1); \
182  const std::string t::t_name (n); \
183  const std::string t::c_name (c); \
184  void t::register_type (void) \
185  { \
186  octave::type_info& type_info \
187  = octave::__get_type_info__ (#t "::register_type"); \
188  \
189  register_type (type_info); \
190  } \
191  void t::register_type (octave::type_info& ti) \
192  { \
193  octave_value v (new t ()); \
194  t_id = ti.register_type (t::t_name, t::c_name, v); \
195  }
196 
197 // A base value type, so that derived types only have to redefine what
198 // they need (if they are derived from octave_base_value instead of
199 // octave_value).
200 
201 class
202 OCTINTERP_API
204 {
205 public:
206 
207  typedef octave_base_value * (*type_conv_fcn) (const octave_base_value&);
208 
209  // type conversion, including result type information
211  {
212  public:
213  type_conv_info (type_conv_fcn f = nullptr, int t = -1)
214  : _fcn (f), _type_id (t) { }
215 
216  operator type_conv_fcn (void) const { return _fcn; }
217 
218  octave_base_value * operator () (const octave_base_value& v) const
219  { return (*_fcn) (v); }
220 
221  int type_id (void) const { return _type_id; }
222 
223  private:
224  type_conv_fcn _fcn;
225  int _type_id;
226  };
227 
228  friend class octave_value;
229 
230  octave_base_value (void) : count (1) { }
231 
232  octave_base_value (const octave_base_value&) : count (1) { }
233 
234  virtual ~octave_base_value (void) = default;
235 
236  // Unconditional clone. Always clones.
237  virtual octave_base_value *
238  clone (void) const { return new octave_base_value (*this); }
239 
240  // Empty clone.
241  virtual octave_base_value *
242  empty_clone (void) const;
243 
244  // Unique clone. Usually clones, but may be overridden to fake the
245  // cloning when sharing copies is to be controlled from within an
246  // instance (see octave_class).
247  virtual octave_base_value *
248  unique_clone (void) { return clone (); }
249 
250  virtual type_conv_info
252  { return type_conv_info (); }
253 
254  virtual type_conv_info
256  { return type_conv_info (); }
257 
258  virtual octave_value squeeze (void) const;
259 
260  virtual octave_value full_value (void) const;
261 
262  virtual octave_value as_double (void) const;
263  virtual octave_value as_single (void) const;
264 
265  virtual octave_value as_int8 (void) const;
266  virtual octave_value as_int16 (void) const;
267  virtual octave_value as_int32 (void) const;
268  virtual octave_value as_int64 (void) const;
269 
270  virtual octave_value as_uint8 (void) const;
271  virtual octave_value as_uint16 (void) const;
272  virtual octave_value as_uint32 (void) const;
273  virtual octave_value as_uint64 (void) const;
274 
275  virtual octave_base_value * try_narrowing_conversion (void) { return nullptr; }
276 
277  virtual void maybe_economize (void) { }
278 
279  virtual Matrix size (void);
280 
281  virtual octave_idx_type numel (const octave_value_list&);
282 
283  virtual octave_value
284  subsref (const std::string& type,
285  const std::list<octave_value_list>& idx);
286 
287  virtual octave_value_list
288  subsref (const std::string& type,
289  const std::list<octave_value_list>& idx,
290  int nargout);
291 
292  virtual octave_value
293  subsref (const std::string& type,
294  const std::list<octave_value_list>& idx,
295  bool auto_add);
296 
297  virtual octave_value
298  do_index_op (const octave_value_list& idx, bool resize_ok = false);
299 
300  virtual void assign (const std::string&, const octave_value&) { }
301 
302  virtual octave_value
303  subsasgn (const std::string& type,
304  const std::list<octave_value_list>& idx,
305  const octave_value& rhs);
306 
307  virtual octave_value
309  const std::list<octave_value_list>& idx,
310  const octave_value& rhs);
311 
312  virtual idx_vector index_vector (bool require_integers = false) const;
313 
314  virtual dim_vector dims (void) const { return dim_vector (); }
315 
316  octave_idx_type rows (void) const
317  {
318  const dim_vector dv = dims ();
319 
320  return dv(0);
321  }
322 
324  {
325  const dim_vector dv = dims ();
326 
327  return dv(1);
328  }
329 
330  virtual int ndims (void) const
331  { return dims ().ndims (); }
332 
333  virtual octave_idx_type numel (void) const { return dims ().numel (); }
334 
335  OCTAVE_DEPRECATED (4.4, "use 'numel' instead")
336  virtual octave_idx_type capacity (void) const
337  { return numel (); }
338 
339  virtual size_t byte_size (void) const { return 0; }
340 
341  virtual octave_idx_type nnz (void) const;
342 
343  virtual octave_idx_type nzmax (void) const;
344 
345  virtual octave_idx_type nfields (void) const;
346 
347  virtual octave_value reshape (const dim_vector&) const;
348 
349  virtual octave_value permute (const Array<int>& vec, bool = false) const;
350 
351  virtual octave_value resize (const dim_vector&, bool fill = false) const;
352 
353  virtual MatrixType matrix_type (void) const;
354 
355  virtual MatrixType matrix_type (const MatrixType& typ) const;
356 
357  virtual bool is_defined (void) const { return false; }
358 
359  bool isempty (void) const { return (dims ().any_zero ()); }
360 
361  bool is_zero_by_zero (void) const { return dims().zero_by_zero (); }
362 
363  virtual bool iscell (void) const { return false; }
364 
365  virtual bool iscellstr (void) const { return false; }
366 
367  virtual bool is_real_scalar (void) const { return false; }
368 
369  virtual bool is_real_matrix (void) const { return false; }
370 
371  virtual bool is_complex_scalar (void) const { return false; }
372 
373  virtual bool is_complex_matrix (void) const { return false; }
374 
375  virtual bool is_bool_scalar (void) const { return false; }
376 
377  virtual bool is_bool_matrix (void) const { return false; }
378 
379  virtual bool is_char_matrix (void) const { return false; }
380 
381  virtual bool is_diag_matrix (void) const { return false; }
382 
383  virtual bool is_perm_matrix (void) const { return false; }
384 
385  virtual bool is_string (void) const { return false; }
386 
387  virtual bool is_sq_string (void) const { return false; }
388 
389  virtual bool is_range (void) const { return false; }
390 
391  virtual bool isstruct (void) const { return false; }
392 
393  virtual bool isobject (void) const { return false; }
394 
395  virtual bool is_classdef_meta (void) const { return false; }
396 
397  virtual bool is_classdef_superclass_ref (void) const { return false; }
398 
399  virtual bool is_classdef_object (void) const { return false; }
400 
401  virtual bool is_package (void) const { return false; }
402 
403  virtual bool isjava (void) const { return false; }
404 
405  virtual bool is_cs_list (void) const { return false; }
406 
407  virtual bool is_magic_colon (void) const { return false; }
408 
409  virtual bool is_all_va_args (void) const { return false; }
410 
411  virtual octave_value all (int = 0) const;
412 
413  virtual octave_value any (int = 0) const;
414 
415  virtual builtin_type_t builtin_type (void) const { return btyp_unknown; }
416 
417  virtual bool is_double_type (void) const { return false; }
418 
419  virtual bool is_single_type (void) const { return false; }
420 
421  virtual bool isfloat (void) const { return false; }
422 
423  virtual bool is_int8_type (void) const { return false; }
424 
425  virtual bool is_int16_type (void) const { return false; }
426 
427  virtual bool is_int32_type (void) const { return false; }
428 
429  virtual bool is_int64_type (void) const { return false; }
430 
431  virtual bool is_uint8_type (void) const { return false; }
432 
433  virtual bool is_uint16_type (void) const { return false; }
434 
435  virtual bool is_uint32_type (void) const { return false; }
436 
437  virtual bool is_uint64_type (void) const { return false; }
438 
439  virtual bool islogical (void) const { return false; }
440 
441  virtual bool isinteger (void) const { return false; }
442 
443  virtual bool isreal (void) const { return false; }
444 
445  virtual bool iscomplex (void) const { return false; }
446 
447  // Would be nice to get rid of the next four functions:
448 
449  virtual bool is_scalar_type (void) const { return false; }
450 
451  virtual bool is_matrix_type (void) const { return false; }
452 
453  virtual bool isnumeric (void) const { return false; }
454 
455  virtual bool issparse (void) const { return false; }
456 
457  virtual bool is_true (void) const { return false; }
458 
459  virtual bool isnull (void) const { return false; }
460 
461  virtual bool is_constant (void) const { return false; }
462 
463  virtual bool is_function_handle (void) const { return false; }
464 
465  virtual bool is_anonymous_function (void) const { return false; }
466 
467  virtual bool is_inline_function (void) const { return false; }
468 
469  virtual bool is_function (void) const { return false; }
470 
471  virtual bool is_user_script (void) const { return false; }
472 
473  virtual bool is_user_function (void) const { return false; }
474 
475  virtual bool is_user_code (void) const { return false; }
476 
477  virtual bool is_builtin_function (void) const { return false; }
478 
479  virtual bool is_dld_function (void) const { return false; }
480 
481  virtual bool is_mex_function (void) const { return false; }
482 
483  virtual void erase_subfunctions (void) { }
484 
485  virtual short int short_value (bool = false, bool = false) const;
486 
487  virtual unsigned short int ushort_value (bool = false, bool = false) const;
488 
489  virtual int int_value (bool = false, bool = false) const;
490 
491  virtual unsigned int uint_value (bool = false, bool = false) const;
492 
493  virtual int nint_value (bool = false) const;
494 
495  virtual long int long_value (bool = false, bool = false) const;
496 
497  virtual unsigned long int ulong_value (bool = false, bool = false) const;
498 
499  virtual int64_t int64_value (bool = false, bool = false) const;
500 
501  virtual uint64_t uint64_value (bool = false, bool = false) const;
502 
503  virtual double double_value (bool = false) const;
504 
505  virtual float float_value (bool = false) const;
506 
507  virtual double scalar_value (bool frc_str_conv = false) const
508  { return double_value (frc_str_conv); }
509 
510  virtual float float_scalar_value (bool frc_str_conv = false) const
511  { return float_value (frc_str_conv); }
512 
513  virtual Cell cell_value (void) const;
514 
515  virtual Matrix matrix_value (bool = false) const;
516 
517  virtual FloatMatrix float_matrix_value (bool = false) const;
518 
519  virtual NDArray array_value (bool = false) const;
520 
521  virtual FloatNDArray float_array_value (bool = false) const;
522 
523  virtual Complex complex_value (bool = false) const;
524 
525  virtual FloatComplex float_complex_value (bool = false) const;
526 
527  virtual ComplexMatrix complex_matrix_value (bool = false) const;
528 
529  virtual FloatComplexMatrix float_complex_matrix_value (bool = false) const;
530 
531  virtual ComplexNDArray complex_array_value (bool = false) const;
532 
533  virtual FloatComplexNDArray float_complex_array_value (bool = false) const;
534 
535  virtual bool bool_value (bool = false) const;
536 
537  virtual boolMatrix bool_matrix_value (bool = false) const;
538 
539  virtual boolNDArray bool_array_value (bool = false) const;
540 
541  virtual charMatrix char_matrix_value (bool force = false) const;
542 
543  virtual charNDArray char_array_value (bool = false) const;
544 
545  virtual SparseMatrix sparse_matrix_value (bool = false) const;
546 
547  virtual SparseComplexMatrix sparse_complex_matrix_value (bool = false) const;
548 
549  virtual SparseBoolMatrix sparse_bool_matrix_value (bool = false) const;
550 
551  virtual DiagMatrix diag_matrix_value (bool = false) const;
552 
553  virtual FloatDiagMatrix float_diag_matrix_value (bool = false) const;
554 
555  virtual ComplexDiagMatrix complex_diag_matrix_value (bool = false) const;
556 
557  virtual FloatComplexDiagMatrix
558  float_complex_diag_matrix_value (bool = false) const;
559 
560  virtual PermMatrix perm_matrix_value (void) const;
561 
562  virtual octave_int8 int8_scalar_value (void) const;
563 
564  virtual octave_int16 int16_scalar_value (void) const;
565 
566  virtual octave_int32 int32_scalar_value (void) const;
567 
568  virtual octave_int64 int64_scalar_value (void) const;
569 
570  virtual octave_uint8 uint8_scalar_value (void) const;
571 
572  virtual octave_uint16 uint16_scalar_value (void) const;
573 
574  virtual octave_uint32 uint32_scalar_value (void) const;
575 
576  virtual octave_uint64 uint64_scalar_value (void) const;
577 
578  virtual int8NDArray int8_array_value (void) const;
579 
580  virtual int16NDArray int16_array_value (void) const;
581 
582  virtual int32NDArray int32_array_value (void) const;
583 
584  virtual int64NDArray int64_array_value (void) const;
585 
586  virtual uint8NDArray uint8_array_value (void) const;
587 
588  virtual uint16NDArray uint16_array_value (void) const;
589 
590  virtual uint32NDArray uint32_array_value (void) const;
591 
592  virtual uint64NDArray uint64_array_value (void) const;
593 
594  virtual string_vector string_vector_value (bool pad = false) const;
595 
596  virtual std::string string_value (bool force = false) const;
597 
598  virtual Array<std::string> cellstr_value (void) const;
599 
600  virtual Range range_value (void) const;
601 
602  virtual octave_map map_value (void) const;
603 
604  virtual octave_scalar_map scalar_map_value (void) const;
605 
606  virtual string_vector map_keys (void) const;
607 
608  virtual size_t nparents (void) const;
609 
610  virtual std::list<std::string> parent_class_name_list (void) const;
611 
612  virtual string_vector parent_class_names (void) const;
613 
615  { return nullptr; }
616 
618  { return nullptr; }
619 
620  virtual bool is_instance_of (const std::string&) const
621  { return false; }
622 
623  virtual octave_classdef * classdef_object_value (bool silent = false);
624 
625  virtual octave_function * function_value (bool silent = false);
626 
627  virtual octave_user_function * user_function_value (bool silent = false);
628 
629  virtual octave_user_script * user_script_value (bool silent = false);
630 
631  virtual octave_user_code * user_code_value (bool silent = false);
632 
633  virtual octave_fcn_handle * fcn_handle_value (bool silent = false);
634 
635  virtual octave_fcn_inline * fcn_inline_value (bool silent = false);
636 
637  virtual octave_value_list list_value (void) const;
638 
639  virtual octave_value convert_to_str (bool pad = false, bool force = false,
640  char type = '\'') const;
641  virtual octave_value
642  convert_to_str_internal (bool pad, bool force, char type) const;
643 
644  virtual void convert_to_row_or_column_vector (void);
645 
646  // The following extractor functions don't perform any implicit type
647  // conversions.
648 
649  virtual std::string xstring_value () const;
650 
651  virtual bool print_as_scalar (void) const { return false; }
652 
653  virtual void print (std::ostream& os, bool pr_as_read_syntax = false);
654 
655  virtual void
656  print_raw (std::ostream& os, bool pr_as_read_syntax = false) const;
657 
658  virtual bool
659  print_name_tag (std::ostream& os, const std::string& name) const;
660 
661  virtual void
662  print_with_name (std::ostream& output_buf, const std::string& name,
663  bool print_padding = true);
664 
665  virtual void short_disp (std::ostream& os) const { os << "..."; }
666 
667  virtual float_display_format get_edit_display_format (void) const;
668 
671  { return "#VAL"; }
672 
673  virtual void print_info (std::ostream& os, const std::string& prefix) const;
674 
675  virtual bool save_ascii (std::ostream& os);
676 
677  virtual bool load_ascii (std::istream& is);
678 
679  virtual bool save_binary (std::ostream& os, bool& save_as_floats);
680 
681  virtual bool load_binary (std::istream& is, bool swap,
683 
684  virtual bool
685  save_hdf5 (octave_hdf5_id loc_id, const char *name, bool save_as_floats);
686 
687  virtual bool
688  load_hdf5 (octave_hdf5_id loc_id, const char *name);
689 
690  virtual int
691  write (octave::stream& os, int block_size,
692  oct_data_conv::data_type output_type, int skip,
694 
695  virtual void * mex_get_data (void) const { return nullptr; }
696 
697  virtual octave_idx_type * mex_get_ir (void) const { return nullptr; }
698 
699  virtual octave_idx_type * mex_get_jc (void) const { return nullptr; }
700 
701  virtual mxArray * as_mxArray (void) const;
702 
703  virtual octave_value diag (octave_idx_type k = 0) const;
704 
705  virtual octave_value diag (octave_idx_type m, octave_idx_type n) const;
706 
707  virtual octave_value sort (octave_idx_type dim = 0,
708  sortmode mode = ASCENDING) const;
710  octave_idx_type dim = 0,
711  sortmode mode = ASCENDING) const;
712 
713  virtual sortmode issorted (sortmode mode = UNSORTED) const;
714 
715  virtual Array<octave_idx_type>
717 
718  virtual sortmode is_sorted_rows (sortmode mode = UNSORTED) const;
719 
720  virtual void lock (void);
721 
722  virtual void unlock (void);
723 
724  virtual bool islocked (void) const { return false; }
725 
726  virtual octave_value dump (void) const;
727 
728  // Standard mappers. Register new ones here.
730  {
792  num_unary_mappers = umap_unknown
793  };
794 
795  virtual octave_value map (unary_mapper_t) const;
796 
797  // These are fast indexing & assignment shortcuts for extracting
798  // or inserting a single scalar from/to an array.
799 
800  // Extract the n-th element, aka val(n). Result is undefined if val is not
801  // an array type or n is out of range. Never error.
802  virtual octave_value
804 
805  // Assign the n-th element, aka val(n) = x. Returns false if val is not an
806  // array type, x is not a matching scalar type, or n is out of range.
807  // Never error.
808  virtual bool
810 
811  // This is a helper for the above, to be overridden in scalar types. The
812  // whole point is to handle the insertion efficiently with just *two* VM
813  // calls, which is basically the theoretical minimum.
814  virtual bool
815  fast_elem_insert_self (void *where, builtin_type_t btyp) const;
816 
817  // Grab the reference count. For use by jit.
818  void
819  grab (void)
820  {
821  ++count;
822  }
823 
824  // Release the reference count. For use by jit.
825  void
826  release (void)
827  {
828  if (--count == 0)
829  delete this;
830  }
831 
832 protected:
833 
834  // This should only be called for derived types.
835 
836  octave_value numeric_assign (const std::string& type,
837  const std::list<octave_value_list>& idx,
838  const octave_value& rhs);
839 
840  void reset_indent_level (void) const
841  { curr_print_indent_level = 0; }
842 
843  void increment_indent_level (void) const
844  { curr_print_indent_level += 2; }
845 
846  void decrement_indent_level (void) const
847  { curr_print_indent_level -= 2; }
848 
849  int current_print_indent_level (void) const
850  { return curr_print_indent_level; }
851 
852  void indent (std::ostream& os) const;
853 
854  void newline (std::ostream& os) const;
855 
856  void reset (void) const;
857 
858  // A reference count.
859  // NOTE: the declaration is octave_idx_type because with 64-bit indexing,
860  // it is well possible to have more than MAX_INT copies of a single value
861  // (think of an empty cell array with >2G elements).
863 
864  static const char * get_umap_name (unary_mapper_t);
865 
866  void warn_load (const char *type) const;
867  void warn_save (const char *type) const;
868 
869 private:
870 
871  void wrong_type_arg_error (void) const;
872 
874  static bool beginning_of_line;
875 
877 };
878 
879 // TRUE means to perform automatic sparse to real mutation if there
880 // is memory to be saved
881 extern OCTINTERP_API bool Vsparse_auto_mutate;
882 
883 // Utility function to convert C++ arguments used in subsref/subsasgn into an
884 // octave_value_list object that can be used to call a function/method in the
885 // interpreter.
886 extern OCTINTERP_API octave_value
888  const std::list<octave_value_list>& idx,
889  const std::string& who);
890 
891 // Tells whether some regular octave_value_base methods are being called from
892 // within the "builtin" function.
893 extern OCTINTERP_API bool called_from_builtin (void);
894 
895 #endif
virtual bool isjava(void) const
Definition: ov-base.h:403
FloatComplex float_complex_value(bool frc_str_conv=false) const
Definition: ov.h:849
virtual octave_base_value * unique_parent_class(const std::string &)
Definition: ov-base.h:617
#define DEF_CLASS_TO_BTYP(CLASS, BTYP)
Definition: ov-base.h:131
octave_value as_uint16(void) const
Definition: ov.h:401
virtual bool is_builtin_function(void) const
Definition: ov-base.h:477
virtual bool is_double_type(void) const
Definition: ov-base.h:417
bool btyp_isfloat(builtin_type_t btyp)
Definition: ov-base.h:103
virtual bool is_string(void) const
Definition: ov-base.h:385
octave_value as_int32(void) const
Definition: ov.h:397
octave_base_value * clone(void) const
virtual bool is_user_function(void) const
Definition: ov-base.h:473
OCTINTERP_API octave_value make_idx_args(const std::string &type, const std::list< octave_value_list > &idx, const std::string &who)
Definition: ov-base.cc:1401
Definition: Cell.h:37
int int_value(bool req_int=false, bool frc_str_conv=false) const
Definition: ov.h:793
Range range_value(void) const
Definition: ov.h:970
virtual bool is_inline_function(void) const
Definition: ov-base.h:467
virtual bool is_int16_type(void) const
Definition: ov-base.h:425
virtual bool is_dld_function(void) const
Definition: ov-base.h:479
virtual bool is_uint8_type(void) const
Definition: ov-base.h:431
virtual bool is_perm_matrix(void) const
Definition: ov-base.h:383
octave_value as_int8(void) const
Definition: ov.h:395
std::string string_value(bool force=false) const
Definition: ov.h:955
octave_int16 int16_scalar_value(void) const
Definition: ov.h:910
octave_value as_single(void) const
Definition: ov.h:393
virtual bool is_uint32_type(void) const
Definition: ov-base.h:435
bool save_hdf5(octave_hdf5_id loc_id, const char *name, bool save_as_floats)
Definition: ov.h:1345
octave_uint64 uint64_scalar_value(void) const
Definition: ov.h:928
unsigned long int ulong_value(bool req_int=false, bool frc_str_conv=false) const
Definition: ov.h:808
octave_map map_value(void) const
void print_with_name(std::ostream &os, const std::string &name) const
Definition: ov.h:1274
virtual bool is_user_code(void) const
Definition: ov-base.h:475
sortmode
Definition: oct-sort.h:105
idx_vector index_vector(bool require_integers=false) const
Definition: ov.h:462
int current_print_indent_level(void) const
Definition: ov-base.h:849
virtual bool is_classdef_meta(void) const
Definition: ov-base.h:395
virtual bool is_bool_matrix(void) const
Definition: ov-base.h:377
virtual std::string edit_display(const float_display_format &, octave_idx_type, octave_idx_type) const
Definition: ov-base.h:669
virtual bool is_function_handle(void) const
Definition: ov-base.h:463
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_value as_int64(void) const
Definition: ov.h:398
int nint_value(bool frc_str_conv=false) const
Definition: ov.h:800
virtual bool is_char_matrix(void) const
Definition: ov-base.h:379
octave_base_value * empty_clone(void) const
Definition: ov.h:317
Return the CPU time used by your Octave session The first output is the total time spent executing your process and is equal to the sum of second and third which are the number of CPU seconds spent executing in user mode and the number of CPU seconds spent executing in system mode
Definition: data.cc:6348
idx subsref(val, idx) esult
Definition: ov.cc:3065
std::string xstring_value(const char *fmt,...) const
virtual float float_scalar_value(bool frc_str_conv=false) const
Definition: ov-base.h:510
virtual void maybe_economize(void)
Definition: ov-base.h:277
virtual octave_idx_type * mex_get_jc(void) const
Definition: ov-base.h:699
int64_t int64_value(bool req_int=false, bool frc_str_conv=false) const
Definition: ov.h:812
octave_value squeeze(void) const
Definition: ov.h:383
for large enough k
Definition: lu.cc:617
octave_uint32 uint32_scalar_value(void) const
Definition: ov.h:925
virtual bool is_single_type(void) const
Definition: ov-base.h:419
Definition: Range.h:33
octave_value all(int dim=0) const
Definition: ov.h:637
int32NDArray int32_array_value(void) const
Definition: ov.h:937
virtual octave_base_value * clone(void) const
Definition: ov-base.h:238
octave_user_script * user_script_value(bool silent=false) const
virtual bool issparse(void) const
Definition: ov-base.h:455
bool btyp_isarray(builtin_type_t btyp)
Definition: ov-base.h:106
int write(octave::stream &os, int block_size, oct_data_conv::data_type output_type, int skip, octave::mach_info::float_format flt_fmt) const
uint64_t uint64_value(bool req_int=false, bool frc_str_conv=false) const
Definition: ov.h:816
DiagMatrix diag_matrix_value(bool force=false) const
Definition: ov.h:891
FloatDiagMatrix float_diag_matrix_value(bool force=false) const
Definition: ov.h:894
virtual bool is_magic_colon(void) const
Definition: ov-base.h:407
octave_fcn_inline * fcn_inline_value(bool silent=false) const
Array< octave_idx_type > sort_rows_idx(sortmode mode=ASCENDING) const
Definition: ov.h:1387
octave::mach_info::float_format flt_fmt
Definition: load-save.cc:736
the second is matched to the second specifier and placed in the second column and so forth If there are more words than specifiers then the process is repeated until all words have been processed or the limit imposed by any(non-whitespace) text in the format that is not one of these specifiers is considered a literal. If there is a literal between two format specifiers then that same literal must appear in the input stream between the matching words. The following specifiers are valid
Definition: file-io.cc:1499
virtual dim_vector dims(void) const
Definition: ov-base.h:314
octave_int8 int8_scalar_value(void) const
Definition: ov.h:907
OCTINTERP_API std::string btyp_class_name[btyp_num_types]
Definition: ov-base.cc:87
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
type_conv_info(type_conv_fcn f=nullptr, int t=-1)
Definition: ov-base.h:213
FloatMatrix float_matrix_value(bool frc_str_conv=false) const
Definition: ov.h:837
Complex complex_value(bool frc_str_conv=false) const
Definition: ov.h:846
virtual bool isnumeric(void) const
Definition: ov-base.h:453
FloatNDArray float_array_value(bool frc_str_conv=false) const
Definition: ov.h:843
virtual type_conv_info numeric_demotion_function(void) const
Definition: ov-base.h:255
builtin_type_t
Definition: ov-base.h:71
void print_info(std::ostream &os, const std::string &prefix="") const
Definition: ov.cc:2592
virtual bool is_constant(void) const
Definition: ov-base.h:461
virtual bool is_package(void) const
Definition: ov-base.h:401
float float_value(bool frc_str_conv=false) const
Definition: ov.h:825
OCTINTERP_API bool called_from_builtin(void)
Definition: ov-base.cc:1464
virtual bool is_scalar_type(void) const
Definition: ov-base.h:449
charMatrix char_matrix_value(bool frc_str_conv=false) const
Definition: ov.h:875
virtual bool is_anonymous_function(void) const
Definition: ov-base.h:465
virtual bool is_user_script(void) const
Definition: ov-base.h:471
virtual bool is_mex_function(void) const
Definition: ov-base.h:481
virtual bool is_all_va_args(void) const
Definition: ov-base.h:409
octave_value resize(const dim_vector &dv, bool fill=false) const
Definition: ov.h:511
octave_base_value(void)
Definition: ov-base.h:230
uint32NDArray uint32_array_value(void) const
Definition: ov.h:949
static double as_double(time_t sec, long usec)
Definition: oct-time.h:34
static int curr_print_indent_level
Definition: ov-base.h:873
OCTINTERP_API bool Vsparse_auto_mutate
Definition: ov-base.cc:101
FloatComplexMatrix float_complex_matrix_value(bool frc_str_conv=false) const
Definition: ov.h:856
bool swap
Definition: load-save.cc:738
void lock(void)
Definition: ov.h:1393
charNDArray char_array_value(bool frc_str_conv=false) const
Definition: ov.h:878
sortmode is_sorted_rows(sortmode mode=UNSORTED) const
Definition: ov.h:1390
octave_value sort(octave_idx_type dim=0, sortmode mode=ASCENDING) const
Definition: ov.h:1374
bool bool_value(bool warn=false) const
Definition: ov.h:866
octave_value dump(void) const
Definition: ov.h:1399
static const builtin_type_t btyp
Definition: ov-base.h:128
int16NDArray int16_array_value(void) const
Definition: ov.h:934
octave_value as_uint64(void) const
Definition: ov.h:403
virtual octave_base_value * try_narrowing_conversion(void)
Definition: ov-base.h:275
nd deftypefn *std::string name
Definition: sysdep.cc:647
octave_value & assign(assign_op op, const std::string &type, const std::list< octave_value_list > &idx, const octave_value &rhs)
virtual octave_base_value * find_parent_class(const std::string &)
Definition: ov-base.h:614
#define DECLARE_OV_BASE_TYPEID_FUNCTIONS_AND_DATA
Definition: ov-base.h:161
virtual bool is_classdef_object(void) const
Definition: ov-base.h:399
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function xample nargout(@histc)
Definition: ov-usr-fcn.cc:997
virtual int ndims(void) const
Definition: ov-base.h:330
bool is_zero_by_zero(void) const
Definition: ov-base.h:361
virtual bool isstruct(void) const
Definition: ov-base.h:391
type_info & __get_type_info__(const std::string &who)
virtual bool is_complex_matrix(void) const
Definition: ov-base.h:373
void print_raw(std::ostream &os, bool pr_as_read_syntax=false) const
Definition: ov.h:1268
octave_uint8 uint8_scalar_value(void) const
Definition: ov.h:919
void print(std::ostream &os, bool pr_as_read_syntax=false)
Definition: ov.h:1265
ComplexDiagMatrix complex_diag_matrix_value(bool force=false) const
Definition: ov.h:897
virtual bool isinteger(void) const
Definition: ov-base.h:441
bool load_hdf5(octave_hdf5_id loc_id, const char *name)
Definition: ov.h:1349
octave_idx_type rows(void) const
Definition: ov-base.h:316
octave_value convert_to_str_internal(bool pad, bool force, char type) const
Definition: ov.h:1256
bool save_binary(std::ostream &os, bool &save_as_floats)
Definition: ov.h:1338
virtual bool is_range(void) const
Definition: ov-base.h:389
bool save_as_floats
Definition: load-save.cc:1617
octave_value permute(const Array< int > &vec, bool inv=false) const
Definition: ov.h:505
bool btyp_isnumeric(builtin_type_t btyp)
Definition: ov-base.h:97
octave_classdef * classdef_object_value(bool silent=false) const
uint64NDArray uint64_array_value(void) const
Definition: ov.h:952
std::list< std::string > parent_class_name_list(void) const
Definition: ov.h:983
int64_t octave_hdf5_id
virtual octave_idx_type numel(void) const
Definition: ov-base.h:333
octave_function * function_value(bool silent=false) const
void reset_indent_level(void) const
Definition: ov-base.h:840
octave_user_function * user_function_value(bool silent=false) const
virtual bool is_uint16_type(void) const
Definition: ov-base.h:433
void decrement_indent_level(void) const
Definition: ov-base.h:846
idx type
Definition: ov.cc:3114
virtual bool is_classdef_superclass_ref(void) const
Definition: ov-base.h:397
string_vector parent_class_names(void) const
Definition: ov.h:986
Definition: dMatrix.h:36
virtual bool print_as_scalar(void) const
Definition: ov-base.h:651
virtual double scalar_value(bool frc_str_conv=false) const
Definition: ov-base.h:507
the exceeded dimensions are set to if fewer subscripts than dimensions are the exceeding dimensions are merged into the final requested dimension For consider the following dims
Definition: sub2ind.cc:255
virtual bool islocked(void) const
Definition: ov-base.h:724
bool btyp_isinteger(builtin_type_t btyp)
Definition: ov-base.h:100
virtual bool iscellstr(void) const
Definition: ov-base.h:365
octave_value convert_to_str(bool pad=false, bool force=false, char type='\'') const
Definition: ov.h:1251
octave_value as_int16(void) const
Definition: ov.h:396
FloatComplexNDArray float_complex_array_value(bool frc_str_conv=false) const
Definition: ov.h:863
string_vector map_keys(void) const
Definition: ov.h:977
virtual bool is_function(void) const
Definition: ov-base.h:469
virtual void short_disp(std::ostream &os) const
Definition: ov-base.h:665
SparseComplexMatrix sparse_complex_matrix_value(bool frc_str_conv=false) const
Definition: ov.h:885
virtual octave_base_value * unique_clone(void)
Definition: ov-base.h:248
virtual type_conv_info numeric_conversion_function(void) const
Definition: ov-base.h:251
octave_uint16 uint16_scalar_value(void) const
Definition: ov.h:922
virtual void * mex_get_data(void) const
Definition: ov-base.h:695
octave_value as_uint32(void) const
Definition: ov.h:402
virtual bool islogical(void) const
Definition: ov-base.h:439
bool save_ascii(std::ostream &os)
Definition: ov.h:1334
virtual bool isreal(void) const
Definition: ov-base.h:443
bool fast_elem_insert(octave_idx_type n, const octave_value &x)
Assign the n-th element, aka val(n) = x.
Definition: ov.h:1496
octave_value reshape(const dim_vector &dv) const
Definition: ov.h:502
void grab(void)
Definition: ov-base.h:819
octave_value diag(octave_idx_type k=0) const
Definition: ov.h:1368
virtual bool is_complex_scalar(void) const
Definition: ov-base.h:371
short int short_value(bool req_int=false, bool frc_str_conv=false) const
Definition: ov.h:786
MatrixType matrix_type(void) const
Definition: ov.h:514
FloatComplexDiagMatrix float_complex_diag_matrix_value(bool force=false) const
Definition: ov.h:901
octave_scalar_map scalar_map_value(void) const
octave_value_list list_value(void) const
octave_value undef_subsasgn(const std::string &type, const std::list< octave_value_list > &idx, const octave_value &rhs)
octave_user_code * user_code_value(bool silent=false) const
boolNDArray bool_array_value(bool warn=false) const
Definition: ov.h:872
octave_fcn_handle * fcn_handle_value(bool silent=false) const
long int long_value(bool req_int=false, bool frc_str_conv=false) const
Definition: ov.h:804
T::size_type numel(const T &str)
Definition: oct-string.cc:61
octave_base_value(const octave_base_value &)
Definition: ov-base.h:232
virtual bool isobject(void) const
Definition: ov-base.h:393
virtual void erase_subfunctions(void)
Definition: ov-base.h:483
void unlock(void)
Definition: ov.h:1395
bool load_ascii(std::istream &is)
Definition: ov.h:1336
octave_int32 int32_scalar_value(void) const
Definition: ov.h:913
virtual bool iscomplex(void) const
Definition: ov-base.h:445
octave_idx_type nnz(void) const
Definition: ov.h:496
uint16NDArray uint16_array_value(void) const
Definition: ov.h:946
virtual bool is_bool_scalar(void) const
Definition: ov-base.h:375
virtual bool isfloat(void) const
Definition: ov-base.h:421
virtual bool is_sq_string(void) const
Definition: ov-base.h:387
octave_map map(dims)
bool print_name_tag(std::ostream &os, const std::string &name) const
Definition: ov.h:1271
octave_value full_value(void) const
Definition: ov.h:387
virtual bool is_defined(void) const
Definition: ov-base.h:357
virtual bool is_instance_of(const std::string &) const
Definition: ov-base.h:620
idx subsasgn(val, idx, 0) esult
Definition: ov.cc:3114
Matrix size(void)
Definition: ov.h:409
double double_value(bool frc_str_conv=false) const
Definition: ov.h:822
int64NDArray int64_array_value(void) const
Definition: ov.h:940
virtual bool is_real_scalar(void) const
Definition: ov-base.h:367
int8NDArray int8_array_value(void) const
Definition: ov.h:931
SparseMatrix sparse_matrix_value(bool frc_str_conv=false) const
Definition: ov.h:881
the element is set to zero In other the statement xample y
Definition: data.cc:5264
void increment_indent_level(void) const
Definition: ov-base.h:843
octave::refcount< octave_idx_type > count
Definition: ov-base.h:862
virtual size_t byte_size(void) const
Definition: ov-base.h:339
boolMatrix bool_matrix_value(bool warn=false) const
Definition: ov.h:869
virtual bool is_uint64_type(void) const
Definition: ov-base.h:437
OCTINTERP_API builtin_type_t btyp_mixed_numeric(builtin_type_t x, builtin_type_t y)
Determine the resulting type for a possible mixed-type operation.
Definition: ov-base.cc:63
octave_idx_type nfields(void) const
Definition: ov.h:500
virtual bool is_int8_type(void) const
Definition: ov-base.h:423
virtual bool is_diag_matrix(void) const
Definition: ov-base.h:381
SparseBoolMatrix sparse_bool_matrix_value(bool warn=false) const
Definition: ov.h:888
PermMatrix perm_matrix_value(void) const
Definition: ov.h:904
octave_idx_type columns(void) const
Definition: ov-base.h:323
bool isempty(void) const
Definition: ov-base.h:359
string_vector string_vector_value(bool pad=false) const
Definition: ov.h:958
std::complex< float > FloatComplex
Definition: oct-cmplx.h:32
size_t nparents(void) const
Definition: ov.h:980
virtual bool iscell(void) const
Definition: ov-base.h:363
mxArray * as_mxArray(void) const
Definition: ov.h:1366
ComplexMatrix complex_matrix_value(bool frc_str_conv=false) const
Definition: ov.h:852
std::complex< double > Complex
Definition: oct-cmplx.h:31
octave_value as_uint8(void) const
Definition: ov.h:400
static bool beginning_of_line
Definition: ov-base.h:874
write the output to stdout if nargout is
Definition: load-save.cc:1612
void release(void)
Definition: ov-base.h:826
ComplexNDArray complex_array_value(bool frc_str_conv=false) const
Definition: ov.h:859
virtual bool is_true(void) const
Definition: ov-base.h:457
virtual bool is_int32_type(void) const
Definition: ov-base.h:427
virtual bool is_real_matrix(void) const
Definition: ov-base.h:369
sortmode issorted(sortmode mode=UNSORTED) const
Definition: ov.h:1380
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:87
Array< std::string > cellstr_value(void) const
Definition: ov.h:967
bool load_binary(std::istream &is, bool swap, octave::mach_info::float_format fmt)
Definition: ov.h:1341
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
octave_idx_type capacity(void) const
Definition: ov.h:490
unsigned short int ushort_value(bool req_int=false, bool frc_str_conv=false) const
Definition: ov.h:790
dim_vector dv
Definition: sub2ind.cc:263
unsigned int uint_value(bool req_int=false, bool frc_str_conv=false) const
Definition: ov.h:797
void convert_to_row_or_column_vector(void)
Definition: ov.h:1259
octave::stream os
Definition: file-io.cc:627
Cell cell_value(void) const
NDArray array_value(bool frc_str_conv=false) const
Definition: ov.h:840
octave_idx_type nzmax(void) const
Definition: ov.h:498
virtual octave_idx_type * mex_get_ir(void) const
Definition: ov-base.h:697
Matrix matrix_value(bool frc_str_conv=false) const
Definition: ov.h:834
octave_int64 int64_scalar_value(void) const
Definition: ov.h:916
uint8NDArray uint8_array_value(void) const
Definition: ov.h:943
virtual bool isnull(void) const
Definition: ov-base.h:459
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 * x
virtual builtin_type_t builtin_type(void) const
Definition: ov-base.h:415
virtual bool is_cs_list(void) const
Definition: ov-base.h:405
virtual bool is_matrix_type(void) const
Definition: ov-base.h:451
static float_display_format get_edit_display_format(const octave_value &val)
virtual bool is_int64_type(void) const
Definition: ov-base.h:429
octave_value fast_elem_extract(octave_idx_type n) const
Extract the n-th element, aka val(n).
Definition: ov.h:1484
octave_value do_index_op(const octave_value_list &idx, bool resize_ok=false)
Definition: ov.h:444