24 #if ! defined (octave_ov_base_h) 25 #define octave_ov_base_h 1 27 #include "octave-config.h" 125 template <
typename T>
131 #define DEF_CLASS_TO_BTYP(CLASS,BTYP) \ 133 struct class_to_btyp<CLASS> \ 135 static const builtin_type_t btyp = BTYP; \ 156 #define OCTAVE_EMPTY_CPP_ARG 158 #define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA \ 159 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2 (OCTAVE_EMPTY_CPP_ARG) 161 #define DECLARE_OV_BASE_TYPEID_FUNCTIONS_AND_DATA \ 162 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2(virtual) 164 #define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2(VIRTUAL) \ 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&); \ 177 static const std::string t_name; \ 178 static const std::string c_name; 180 #define DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(t, n, c) \ 182 const std::string t::t_name (n); \ 183 const std::string t::c_name (c); \ 184 void t::register_type (void) \ 186 octave::type_info& type_info \ 187 = octave::__get_type_info__ (#t "::register_type"); \ 189 register_type (type_info); \ 191 void t::register_type (octave::type_info& ti) \ 193 octave_value v (new t ()); \ 194 t_id = ti.register_type (t::t_name, t::c_name, v); \ 214 : _fcn (
f), _type_id (
t) { }
216 operator type_conv_fcn (
void)
const {
return _fcn; }
219 {
return (*_fcn) (v); }
250 virtual type_conv_info
254 virtual type_conv_info
285 const std::list<octave_value_list>& idx);
289 const std::list<octave_value_list>& idx,
294 const std::list<octave_value_list>& idx,
304 const std::list<octave_value_list>& idx,
309 const std::list<octave_value_list>& idx,
331 {
return dims ().ndims (); }
335 OCTAVE_DEPRECATED (4.4,
"use 'numel' instead")
363 virtual bool iscell (
void)
const {
return false; }
389 virtual bool is_range (
void)
const {
return false; }
391 virtual bool isstruct (
void)
const {
return false; }
393 virtual bool isobject (
void)
const {
return false; }
403 virtual bool isjava (
void)
const {
return false; }
421 virtual bool isfloat (
void)
const {
return false; }
443 virtual bool isreal (
void)
const {
return false; }
455 virtual bool issparse (
void)
const {
return false; }
457 virtual bool is_true (
void)
const {
return false; }
459 virtual bool isnull (
void)
const {
return false; }
485 virtual short int short_value (
bool =
false,
bool =
false)
const;
487 virtual unsigned short int ushort_value (
bool =
false,
bool =
false)
const;
489 virtual int int_value (
bool =
false,
bool =
false)
const;
491 virtual unsigned int uint_value (
bool =
false,
bool =
false)
const;
495 virtual long int long_value (
bool =
false,
bool =
false)
const;
497 virtual unsigned long int ulong_value (
bool =
false,
bool =
false)
const;
499 virtual int64_t
int64_value (
bool =
false,
bool =
false)
const;
501 virtual uint64_t
uint64_value (
bool =
false,
bool =
false)
const;
608 virtual size_t nparents (
void)
const;
640 char type =
'\'')
const;
653 virtual void print (std::ostream&
os,
bool pr_as_read_syntax =
false);
656 print_raw (std::ostream&
os,
bool pr_as_read_syntax =
false)
const;
663 bool print_padding =
true);
720 virtual void lock (
void);
722 virtual void unlock (
void);
724 virtual bool islocked (
void)
const {
return false; }
792 num_unary_mappers = umap_unknown
837 const std::list<octave_value_list>& idx,
841 { curr_print_indent_level = 0; }
844 { curr_print_indent_level += 2; }
847 { curr_print_indent_level -= 2; }
850 {
return curr_print_indent_level; }
852 void indent (std::ostream&
os)
const;
854 void newline (std::ostream&
os)
const;
856 void reset (
void)
const;
866 void warn_load (
const char *
type)
const;
867 void warn_save (
const char *
type)
const;
871 void wrong_type_arg_error (
void)
const;
888 const std::list<octave_value_list>& idx,
virtual bool isjava(void) const
FloatComplex float_complex_value(bool frc_str_conv=false) const
virtual octave_base_value * unique_parent_class(const std::string &)
#define DEF_CLASS_TO_BTYP(CLASS, BTYP)
octave_value as_uint16(void) const
virtual bool is_builtin_function(void) const
virtual bool is_double_type(void) const
bool btyp_isfloat(builtin_type_t btyp)
virtual bool is_string(void) const
octave_value as_int32(void) const
octave_base_value * clone(void) const
virtual bool is_user_function(void) const
OCTINTERP_API octave_value make_idx_args(const std::string &type, const std::list< octave_value_list > &idx, const std::string &who)
int int_value(bool req_int=false, bool frc_str_conv=false) const
Range range_value(void) const
virtual bool is_inline_function(void) const
virtual bool is_int16_type(void) const
virtual bool is_dld_function(void) const
virtual bool is_uint8_type(void) const
virtual bool is_perm_matrix(void) const
octave_value as_int8(void) const
std::string string_value(bool force=false) const
octave_int16 int16_scalar_value(void) const
octave_value as_single(void) const
virtual bool is_uint32_type(void) const
bool save_hdf5(octave_hdf5_id loc_id, const char *name, bool save_as_floats)
octave_uint64 uint64_scalar_value(void) const
unsigned long int ulong_value(bool req_int=false, bool frc_str_conv=false) const
octave_map map_value(void) const
void print_with_name(std::ostream &os, const std::string &name) const
virtual bool is_user_code(void) const
idx_vector index_vector(bool require_integers=false) const
int current_print_indent_level(void) const
virtual bool is_classdef_meta(void) const
virtual bool is_bool_matrix(void) const
virtual std::string edit_display(const float_display_format &, octave_idx_type, octave_idx_type) const
virtual bool is_function_handle(void) const
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
int nint_value(bool frc_str_conv=false) const
virtual bool is_char_matrix(void) const
octave_base_value * empty_clone(void) const
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
idx subsref(val, idx) esult
std::string xstring_value(const char *fmt,...) const
virtual float float_scalar_value(bool frc_str_conv=false) const
virtual void maybe_economize(void)
virtual octave_idx_type * mex_get_jc(void) const
int64_t int64_value(bool req_int=false, bool frc_str_conv=false) const
octave_value squeeze(void) const
octave_uint32 uint32_scalar_value(void) const
virtual bool is_single_type(void) const
octave_value all(int dim=0) const
int32NDArray int32_array_value(void) const
virtual octave_base_value * clone(void) const
octave_user_script * user_script_value(bool silent=false) const
virtual bool issparse(void) const
bool btyp_isarray(builtin_type_t btyp)
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
DiagMatrix diag_matrix_value(bool force=false) const
FloatDiagMatrix float_diag_matrix_value(bool force=false) const
virtual bool is_magic_colon(void) const
octave_fcn_inline * fcn_inline_value(bool silent=false) const
Array< octave_idx_type > sort_rows_idx(sortmode mode=ASCENDING) const
octave::mach_info::float_format flt_fmt
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
virtual dim_vector dims(void) const
octave_int8 int8_scalar_value(void) const
OCTINTERP_API std::string btyp_class_name[btyp_num_types]
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function t
type_conv_info(type_conv_fcn f=nullptr, int t=-1)
FloatMatrix float_matrix_value(bool frc_str_conv=false) const
Complex complex_value(bool frc_str_conv=false) const
virtual bool isnumeric(void) const
FloatNDArray float_array_value(bool frc_str_conv=false) const
virtual type_conv_info numeric_demotion_function(void) const
void print_info(std::ostream &os, const std::string &prefix="") const
virtual bool is_constant(void) const
virtual bool is_package(void) const
float float_value(bool frc_str_conv=false) const
OCTINTERP_API bool called_from_builtin(void)
virtual bool is_scalar_type(void) const
charMatrix char_matrix_value(bool frc_str_conv=false) const
virtual bool is_anonymous_function(void) const
virtual bool is_user_script(void) const
virtual bool is_mex_function(void) const
virtual bool is_all_va_args(void) const
octave_value resize(const dim_vector &dv, bool fill=false) const
uint32NDArray uint32_array_value(void) const
static double as_double(time_t sec, long usec)
static int curr_print_indent_level
OCTINTERP_API bool Vsparse_auto_mutate
FloatComplexMatrix float_complex_matrix_value(bool frc_str_conv=false) const
charNDArray char_array_value(bool frc_str_conv=false) const
sortmode is_sorted_rows(sortmode mode=UNSORTED) const
octave_value sort(octave_idx_type dim=0, sortmode mode=ASCENDING) const
bool bool_value(bool warn=false) const
octave_value dump(void) const
static const builtin_type_t btyp
int16NDArray int16_array_value(void) const
octave_value as_uint64(void) const
virtual octave_base_value * try_narrowing_conversion(void)
nd deftypefn *std::string name
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 &)
#define DECLARE_OV_BASE_TYPEID_FUNCTIONS_AND_DATA
virtual bool is_classdef_object(void) const
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)
virtual int ndims(void) const
bool is_zero_by_zero(void) const
virtual bool isstruct(void) const
type_info & __get_type_info__(const std::string &who)
virtual bool is_complex_matrix(void) const
void print_raw(std::ostream &os, bool pr_as_read_syntax=false) const
octave_uint8 uint8_scalar_value(void) const
void print(std::ostream &os, bool pr_as_read_syntax=false)
ComplexDiagMatrix complex_diag_matrix_value(bool force=false) const
virtual bool isinteger(void) const
bool load_hdf5(octave_hdf5_id loc_id, const char *name)
octave_idx_type rows(void) const
octave_value convert_to_str_internal(bool pad, bool force, char type) const
bool save_binary(std::ostream &os, bool &save_as_floats)
virtual bool is_range(void) const
octave_value permute(const Array< int > &vec, bool inv=false) const
bool btyp_isnumeric(builtin_type_t btyp)
octave_classdef * classdef_object_value(bool silent=false) const
uint64NDArray uint64_array_value(void) const
std::list< std::string > parent_class_name_list(void) const
virtual octave_idx_type numel(void) const
octave_function * function_value(bool silent=false) const
void reset_indent_level(void) const
octave_user_function * user_function_value(bool silent=false) const
virtual bool is_uint16_type(void) const
void decrement_indent_level(void) const
virtual bool is_classdef_superclass_ref(void) const
string_vector parent_class_names(void) const
virtual bool print_as_scalar(void) const
virtual double scalar_value(bool frc_str_conv=false) const
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
virtual bool islocked(void) const
bool btyp_isinteger(builtin_type_t btyp)
virtual bool iscellstr(void) const
octave_value convert_to_str(bool pad=false, bool force=false, char type='\'') const
octave_value as_int16(void) const
FloatComplexNDArray float_complex_array_value(bool frc_str_conv=false) const
string_vector map_keys(void) const
virtual bool is_function(void) const
virtual void short_disp(std::ostream &os) const
SparseComplexMatrix sparse_complex_matrix_value(bool frc_str_conv=false) const
virtual octave_base_value * unique_clone(void)
virtual type_conv_info numeric_conversion_function(void) const
octave_uint16 uint16_scalar_value(void) const
virtual void * mex_get_data(void) const
octave_value as_uint32(void) const
virtual bool islogical(void) const
bool save_ascii(std::ostream &os)
virtual bool isreal(void) const
bool fast_elem_insert(octave_idx_type n, const octave_value &x)
Assign the n-th element, aka val(n) = x.
octave_value reshape(const dim_vector &dv) const
octave_value diag(octave_idx_type k=0) const
virtual bool is_complex_scalar(void) const
short int short_value(bool req_int=false, bool frc_str_conv=false) const
MatrixType matrix_type(void) const
FloatComplexDiagMatrix float_complex_diag_matrix_value(bool force=false) const
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
octave_fcn_handle * fcn_handle_value(bool silent=false) const
long int long_value(bool req_int=false, bool frc_str_conv=false) const
T::size_type numel(const T &str)
octave_base_value(const octave_base_value &)
virtual bool isobject(void) const
virtual void erase_subfunctions(void)
bool load_ascii(std::istream &is)
octave_int32 int32_scalar_value(void) const
virtual bool iscomplex(void) const
octave_idx_type nnz(void) const
uint16NDArray uint16_array_value(void) const
virtual bool is_bool_scalar(void) const
virtual bool isfloat(void) const
virtual bool is_sq_string(void) const
bool print_name_tag(std::ostream &os, const std::string &name) const
octave_value full_value(void) const
virtual bool is_defined(void) const
virtual bool is_instance_of(const std::string &) const
idx subsasgn(val, idx, 0) esult
double double_value(bool frc_str_conv=false) const
int64NDArray int64_array_value(void) const
virtual bool is_real_scalar(void) const
int8NDArray int8_array_value(void) const
SparseMatrix sparse_matrix_value(bool frc_str_conv=false) const
the element is set to zero In other the statement xample y
void increment_indent_level(void) const
octave::refcount< octave_idx_type > count
virtual size_t byte_size(void) const
boolMatrix bool_matrix_value(bool warn=false) const
virtual bool is_uint64_type(void) const
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.
octave_idx_type nfields(void) const
virtual bool is_int8_type(void) const
virtual bool is_diag_matrix(void) const
SparseBoolMatrix sparse_bool_matrix_value(bool warn=false) const
PermMatrix perm_matrix_value(void) const
octave_idx_type columns(void) const
string_vector string_vector_value(bool pad=false) const
std::complex< float > FloatComplex
size_t nparents(void) const
virtual bool iscell(void) const
mxArray * as_mxArray(void) const
ComplexMatrix complex_matrix_value(bool frc_str_conv=false) const
std::complex< double > Complex
octave_value as_uint8(void) const
static bool beginning_of_line
write the output to stdout if nargout is
ComplexNDArray complex_array_value(bool frc_str_conv=false) const
virtual bool is_true(void) const
virtual bool is_int32_type(void) const
virtual bool is_real_matrix(void) const
sortmode issorted(sortmode mode=UNSORTED) const
Vector representing the dimensions (size) of an Array.
Array< std::string > cellstr_value(void) const
bool load_binary(std::istream &is, bool swap, octave::mach_info::float_format fmt)
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
octave_idx_type capacity(void) const
unsigned short int ushort_value(bool req_int=false, bool frc_str_conv=false) const
unsigned int uint_value(bool req_int=false, bool frc_str_conv=false) const
void convert_to_row_or_column_vector(void)
Cell cell_value(void) const
NDArray array_value(bool frc_str_conv=false) const
octave_idx_type nzmax(void) const
virtual octave_idx_type * mex_get_ir(void) const
Matrix matrix_value(bool frc_str_conv=false) const
octave_int64 int64_scalar_value(void) const
uint8NDArray uint8_array_value(void) const
virtual bool isnull(void) const
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
virtual bool is_cs_list(void) const
virtual bool is_matrix_type(void) const
static float_display_format get_edit_display_format(const octave_value &val)
virtual bool is_int64_type(void) const
octave_value fast_elem_extract(octave_idx_type n) const
Extract the n-th element, aka val(n).
octave_value do_index_op(const octave_value_list &idx, bool resize_ok=false)