00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #if !defined (octave_base_value_h)
00025 #define octave_base_value_h 1
00026
00027 #include <cstdlib>
00028
00029 #include <iosfwd>
00030 #include <list>
00031 #include <string>
00032
00033 #include "Range.h"
00034 #include "data-conv.h"
00035 #include "mxarray.h"
00036 #include "mx-base.h"
00037 #include "str-vec.h"
00038
00039 #include "error.h"
00040 #include "oct-hdf5.h"
00041
00042 class Cell;
00043 class octave_map;
00044 class octave_scalar_map;
00045 class octave_value;
00046 class octave_value_list;
00047 class octave_stream;
00048 class octave_function;
00049 class octave_user_function;
00050 class octave_user_script;
00051 class octave_user_code;
00052 class octave_fcn_handle;
00053 class octave_fcn_inline;
00054 class octave_value_list;
00055 class octave_lvalue;
00056
00057 class tree_walker;
00058
00059 enum builtin_type_t
00060 {
00061 btyp_double,
00062 btyp_float,
00063 btyp_complex,
00064 btyp_float_complex,
00065 btyp_int8,
00066 btyp_int16,
00067 btyp_int32,
00068 btyp_int64,
00069 btyp_uint8,
00070 btyp_uint16,
00071 btyp_uint32,
00072 btyp_uint64,
00073 btyp_bool,
00074 btyp_char,
00075 btyp_struct,
00076 btyp_cell,
00077 btyp_func_handle,
00078 btyp_unknown,
00079 btyp_num_types = btyp_unknown
00080 };
00081
00082 extern OCTINTERP_API std::string
00083 btyp_class_name [btyp_num_types];
00084
00085 extern OCTINTERP_API string_vector
00086 get_builtin_classes (void);
00087
00088 inline bool btyp_isnumeric (builtin_type_t btyp)
00089 { return btyp <= btyp_uint64; }
00090
00091 inline bool btyp_isinteger (builtin_type_t btyp)
00092 { return btyp >= btyp_int8 && btyp <= btyp_uint64; }
00093
00094 inline bool btyp_isfloat (builtin_type_t btyp)
00095 { return btyp <= btyp_float_complex; }
00096
00097 inline bool btyp_isarray (builtin_type_t btyp)
00098 { return btyp <= btyp_char; }
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110 extern OCTINTERP_API
00111 builtin_type_t btyp_mixed_numeric (builtin_type_t x, builtin_type_t y);
00112
00113 template <class T>
00114 struct class_to_btyp
00115 {
00116 static const builtin_type_t btyp = btyp_unknown;
00117 };
00118
00119 #define DEF_CLASS_TO_BTYP(CLASS,BTYP) \
00120 template <> \
00121 struct class_to_btyp<CLASS> \
00122 { static const builtin_type_t btyp = BTYP; }
00123
00124 DEF_CLASS_TO_BTYP (double, btyp_double);
00125 DEF_CLASS_TO_BTYP (float, btyp_float);
00126 DEF_CLASS_TO_BTYP (Complex, btyp_complex);
00127 DEF_CLASS_TO_BTYP (FloatComplex, btyp_float_complex);
00128 DEF_CLASS_TO_BTYP (octave_int8, btyp_int8);
00129 DEF_CLASS_TO_BTYP (octave_int16, btyp_int16);
00130 DEF_CLASS_TO_BTYP (octave_int32, btyp_int32);
00131 DEF_CLASS_TO_BTYP (octave_int64, btyp_int64);
00132 DEF_CLASS_TO_BTYP (octave_uint8, btyp_uint8);
00133 DEF_CLASS_TO_BTYP (octave_uint16, btyp_uint16);
00134 DEF_CLASS_TO_BTYP (octave_uint32, btyp_uint32);
00135 DEF_CLASS_TO_BTYP (octave_uint64, btyp_uint64);
00136 DEF_CLASS_TO_BTYP (bool, btyp_bool);
00137 DEF_CLASS_TO_BTYP (char, btyp_char);
00138
00139
00140
00141
00142 #define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA \
00143 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2 (OCTAVE_EMPTY_CPP_ARG)
00144
00145 #define DECLARE_OV_BASE_TYPEID_FUNCTIONS_AND_DATA \
00146 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2(virtual)
00147
00148 #define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA2(VIRTUAL) \
00149 public: \
00150 VIRTUAL int type_id (void) const { return t_id; } \
00151 VIRTUAL std::string type_name (void) const { return t_name; } \
00152 VIRTUAL std::string class_name (void) const { return c_name; } \
00153 static int static_type_id (void) { return t_id; } \
00154 static std::string static_type_name (void) { return t_name; } \
00155 static std::string static_class_name (void) { return c_name; } \
00156 static void register_type (void); \
00157 \
00158 private: \
00159 static int t_id; \
00160 static const std::string t_name; \
00161 static const std::string c_name;
00162
00163
00164 #define DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(t, n, c) \
00165 int t::t_id (-1); \
00166 const std::string t::t_name (n); \
00167 const std::string t::c_name (c); \
00168 void t::register_type (void) \
00169 { \
00170 t_id = octave_value_typeinfo::register_type (t::t_name, \
00171 t::c_name, \
00172 octave_value (new t ())); \
00173 }
00174
00175
00176
00177
00178
00179 class
00180 OCTINTERP_API
00181 octave_base_value
00182 {
00183 public:
00184
00185 typedef octave_base_value * (*type_conv_fcn) (const octave_base_value&);
00186
00187
00188 class type_conv_info
00189 {
00190 public:
00191 type_conv_info (type_conv_fcn f = 0, int t = -1) : _fcn (f), _type_id (t) { }
00192
00193 operator type_conv_fcn (void) const { return _fcn; }
00194
00195 octave_base_value * operator () (const octave_base_value &v) const
00196 { return (*_fcn) (v); }
00197
00198 int type_id (void) const { return _type_id; }
00199
00200 private:
00201 type_conv_fcn _fcn;
00202 int _type_id;
00203 };
00204
00205 friend class octave_value;
00206
00207 octave_base_value (void) : count (1) { }
00208
00209 octave_base_value (const octave_base_value&) : count (1) { }
00210
00211 virtual ~octave_base_value (void) { }
00212
00213
00214 virtual octave_base_value *
00215 clone (void) const { return new octave_base_value (*this); }
00216
00217
00218 virtual octave_base_value *
00219 empty_clone (void) const;
00220
00221
00222
00223
00224 virtual octave_base_value *
00225 unique_clone (void) { return clone (); }
00226
00227 virtual type_conv_info
00228 numeric_conversion_function (void) const
00229 { return type_conv_info (); }
00230
00231 virtual type_conv_info
00232 numeric_demotion_function (void) const
00233 { return type_conv_info (); }
00234
00235 virtual octave_value squeeze (void) const;
00236
00237 virtual octave_value full_value (void) const;
00238
00239 virtual octave_base_value *try_narrowing_conversion (void) { return 0; }
00240
00241 virtual void maybe_economize (void) { }
00242
00243 virtual Matrix size (void);
00244
00245 virtual octave_idx_type numel (const octave_value_list&);
00246
00247 virtual octave_value
00248 subsref (const std::string& type,
00249 const std::list<octave_value_list>& idx);
00250
00251 virtual octave_value_list
00252 subsref (const std::string& type,
00253 const std::list<octave_value_list>& idx,
00254 int nargout);
00255
00256 virtual octave_value
00257 subsref (const std::string& type,
00258 const std::list<octave_value_list>& idx,
00259 bool auto_add);
00260
00261 virtual octave_value_list
00262 subsref (const std::string& type,
00263 const std::list<octave_value_list>& idx,
00264 int nargout,
00265 const std::list<octave_lvalue> *lvalue_list);
00266
00267 virtual octave_value
00268 do_index_op (const octave_value_list& idx, bool resize_ok = false);
00269
00270 virtual octave_value_list
00271 do_multi_index_op (int nargout, const octave_value_list& idx);
00272
00273 virtual octave_value_list
00274 do_multi_index_op (int nargout, const octave_value_list& idx,
00275 const std::list<octave_lvalue> *lvalue_list);
00276
00277 virtual void assign (const std::string&, const octave_value&) { }
00278
00279 virtual octave_value
00280 subsasgn (const std::string& type,
00281 const std::list<octave_value_list>& idx,
00282 const octave_value& rhs);
00283
00284 virtual octave_value
00285 undef_subsasgn (const std::string& type,
00286 const std::list<octave_value_list>& idx,
00287 const octave_value& rhs);
00288
00289 virtual idx_vector index_vector (void) const;
00290
00291 virtual dim_vector dims (void) const { return dim_vector (); }
00292
00293 octave_idx_type rows (void) const
00294 {
00295 const dim_vector dv = dims ();
00296
00297 return dv(0);
00298 }
00299
00300 octave_idx_type columns (void) const
00301 {
00302 const dim_vector dv = dims ();
00303
00304 return dv(1);
00305 }
00306
00307 virtual int ndims (void) const
00308 { return dims ().length (); }
00309
00310 virtual octave_idx_type numel (void) const { return dims ().numel (); }
00311
00312 virtual octave_idx_type capacity (void) const { return numel (); }
00313
00314 virtual size_t byte_size (void) const { return 0; }
00315
00316 virtual octave_idx_type nnz (void) const;
00317
00318 virtual octave_idx_type nzmax (void) const;
00319
00320 virtual octave_idx_type nfields (void) const;
00321
00322 virtual octave_value reshape (const dim_vector&) const;
00323
00324 virtual octave_value permute (const Array<int>& vec, bool = false) const;
00325
00326 virtual octave_value resize (const dim_vector&, bool fill = false) const;
00327
00328 virtual MatrixType matrix_type (void) const;
00329
00330 virtual MatrixType matrix_type (const MatrixType& typ) const;
00331
00332 virtual bool is_defined (void) const { return false; }
00333
00334 bool is_empty (void) const { return numel () == 0; }
00335
00336 virtual bool is_cell (void) const { return false; }
00337
00338 virtual bool is_cellstr (void) const { return false; }
00339
00340 virtual bool is_real_scalar (void) const { return false; }
00341
00342 virtual bool is_real_matrix (void) const { return false; }
00343
00344 virtual bool is_real_nd_array (void) const { return false; }
00345
00346 virtual bool is_complex_scalar (void) const { return false; }
00347
00348 virtual bool is_complex_matrix (void) const { return false; }
00349
00350 virtual bool is_bool_scalar (void) const { return false; }
00351
00352 virtual bool is_bool_matrix (void) const { return false; }
00353
00354 virtual bool is_char_matrix (void) const { return false; }
00355
00356 virtual bool is_diag_matrix (void) const { return false; }
00357
00358 virtual bool is_perm_matrix (void) const { return false; }
00359
00360 virtual bool is_string (void) const { return false; }
00361
00362 virtual bool is_sq_string (void) const { return false; }
00363
00364 virtual bool is_range (void) const { return false; }
00365
00366 virtual bool is_map (void) const { return false; }
00367
00368 virtual bool is_object (void) const { return false; }
00369
00370 virtual bool is_cs_list (void) const { return false; }
00371
00372 virtual bool is_magic_colon (void) const { return false; }
00373
00374 virtual bool is_all_va_args (void) const { return false; }
00375
00376 virtual octave_value all (int = 0) const;
00377
00378 virtual octave_value any (int = 0) const;
00379
00380 virtual builtin_type_t builtin_type (void) const { return btyp_unknown; }
00381
00382 virtual bool is_double_type (void) const { return false; }
00383
00384 virtual bool is_single_type (void) const { return false; }
00385
00386 virtual bool is_float_type (void) const { return false; }
00387
00388 virtual bool is_int8_type (void) const { return false; }
00389
00390 virtual bool is_int16_type (void) const { return false; }
00391
00392 virtual bool is_int32_type (void) const { return false; }
00393
00394 virtual bool is_int64_type (void) const { return false; }
00395
00396 virtual bool is_uint8_type (void) const { return false; }
00397
00398 virtual bool is_uint16_type (void) const { return false; }
00399
00400 virtual bool is_uint32_type (void) const { return false; }
00401
00402 virtual bool is_uint64_type (void) const { return false; }
00403
00404 virtual bool is_bool_type (void) const { return false; }
00405
00406 virtual bool is_integer_type (void) const { return false; }
00407
00408 virtual bool is_real_type (void) const { return false; }
00409
00410 virtual bool is_complex_type (void) const { return false; }
00411
00412
00413
00414 virtual bool is_scalar_type (void) const { return false; }
00415
00416 virtual bool is_matrix_type (void) const { return false; }
00417
00418 virtual bool is_numeric_type (void) const { return false; }
00419
00420 virtual bool is_sparse_type (void) const { return false; }
00421
00422 virtual bool is_true (void) const { return false; }
00423
00424 virtual bool is_null_value (void) const { return false; }
00425
00426 virtual bool is_constant (void) const { return false; }
00427
00428 virtual bool is_function_handle (void) const { return false; }
00429
00430 virtual bool is_inline_function (void) const { return false; }
00431
00432 virtual bool is_function (void) const { return false; }
00433
00434 virtual bool is_user_script (void) const { return false; }
00435
00436 virtual bool is_user_function (void) const { return false; }
00437
00438 virtual bool is_user_code (void) const { return false; }
00439
00440 virtual bool is_builtin_function (void) const { return false; }
00441
00442 virtual bool is_dld_function (void) const { return false; }
00443
00444 virtual bool is_mex_function (void) const { return false; }
00445
00446 virtual void erase_subfunctions (void) { }
00447
00448 virtual short int short_value (bool = false, bool = false) const;
00449
00450 virtual unsigned short int ushort_value (bool = false, bool = false) const;
00451
00452 virtual int int_value (bool = false, bool = false) const;
00453
00454 virtual unsigned int uint_value (bool = false, bool = false) const;
00455
00456 virtual int nint_value (bool = false) const;
00457
00458 virtual long int long_value (bool = false, bool = false) const;
00459
00460 virtual unsigned long int ulong_value (bool = false, bool = false) const;
00461
00462 virtual double double_value (bool = false) const;
00463
00464 virtual float float_value (bool = false) const;
00465
00466 virtual double scalar_value (bool frc_str_conv = false) const
00467 { return double_value (frc_str_conv); }
00468
00469 virtual float float_scalar_value (bool frc_str_conv = false) const
00470 { return float_value (frc_str_conv); }
00471
00472 virtual Cell cell_value (void) const;
00473
00474 virtual Matrix matrix_value (bool = false) const;
00475
00476 virtual FloatMatrix float_matrix_value (bool = false) const;
00477
00478 virtual NDArray array_value (bool = false) const;
00479
00480 virtual FloatNDArray float_array_value (bool = false) const;
00481
00482 virtual Complex complex_value (bool = false) const;
00483
00484 virtual FloatComplex float_complex_value (bool = false) const;
00485
00486 virtual ComplexMatrix complex_matrix_value (bool = false) const;
00487
00488 virtual FloatComplexMatrix float_complex_matrix_value (bool = false) const;
00489
00490 virtual ComplexNDArray complex_array_value (bool = false) const;
00491
00492 virtual FloatComplexNDArray float_complex_array_value (bool = false) const;
00493
00494 virtual bool bool_value (bool = false) const;
00495
00496 virtual boolMatrix bool_matrix_value (bool = false) const;
00497
00498 virtual boolNDArray bool_array_value (bool = false) const;
00499
00500 virtual charMatrix char_matrix_value (bool force = false) const;
00501
00502 virtual charNDArray char_array_value (bool = false) const;
00503
00504 virtual SparseMatrix sparse_matrix_value (bool = false) const;
00505
00506 virtual SparseComplexMatrix sparse_complex_matrix_value (bool = false) const;
00507
00508 virtual SparseBoolMatrix sparse_bool_matrix_value (bool = false) const;
00509
00510 virtual DiagMatrix diag_matrix_value (bool = false) const;
00511
00512 virtual FloatDiagMatrix float_diag_matrix_value (bool = false) const;
00513
00514 virtual ComplexDiagMatrix complex_diag_matrix_value (bool = false) const;
00515
00516 virtual FloatComplexDiagMatrix float_complex_diag_matrix_value (bool = false) const;
00517
00518 virtual PermMatrix perm_matrix_value (void) const;
00519
00520 virtual octave_int8 int8_scalar_value (void) const;
00521
00522 virtual octave_int16 int16_scalar_value (void) const;
00523
00524 virtual octave_int32 int32_scalar_value (void) const;
00525
00526 virtual octave_int64 int64_scalar_value (void) const;
00527
00528 virtual octave_uint8 uint8_scalar_value (void) const;
00529
00530 virtual octave_uint16 uint16_scalar_value (void) const;
00531
00532 virtual octave_uint32 uint32_scalar_value (void) const;
00533
00534 virtual octave_uint64 uint64_scalar_value (void) const;
00535
00536 virtual int8NDArray int8_array_value (void) const;
00537
00538 virtual int16NDArray int16_array_value (void) const;
00539
00540 virtual int32NDArray int32_array_value (void) const;
00541
00542 virtual int64NDArray int64_array_value (void) const;
00543
00544 virtual uint8NDArray uint8_array_value (void) const;
00545
00546 virtual uint16NDArray uint16_array_value (void) const;
00547
00548 virtual uint32NDArray uint32_array_value (void) const;
00549
00550 virtual uint64NDArray uint64_array_value (void) const;
00551
00552 virtual string_vector all_strings (bool pad = false) const;
00553
00554 virtual std::string string_value (bool force = false) const;
00555
00556 virtual Array<std::string> cellstr_value (void) const;
00557
00558 virtual Range range_value (void) const;
00559
00560 virtual octave_map map_value (void) const;
00561
00562 virtual octave_scalar_map scalar_map_value (void) const;
00563
00564 virtual string_vector map_keys (void) const;
00565
00566 virtual size_t nparents (void) const;
00567
00568 virtual std::list<std::string> parent_class_name_list (void) const;
00569
00570 virtual string_vector parent_class_names (void) const;
00571
00572 virtual octave_base_value *find_parent_class (const std::string&)
00573 { return 0; }
00574
00575 virtual octave_base_value *unique_parent_class (const std::string&)
00576 { return 0; }
00577
00578 virtual octave_function *function_value (bool silent = false);
00579
00580 virtual octave_user_function *user_function_value (bool silent = false);
00581
00582 virtual octave_user_script *user_script_value (bool silent = false);
00583
00584 virtual octave_user_code *user_code_value (bool silent = false);
00585
00586 virtual octave_fcn_handle *fcn_handle_value (bool silent = false);
00587
00588 virtual octave_fcn_inline *fcn_inline_value (bool silent = false);
00589
00590 virtual octave_value_list list_value (void) const;
00591
00592 virtual octave_value convert_to_str (bool pad = false, bool force = false,
00593 char type = '\'') const;
00594 virtual octave_value
00595 convert_to_str_internal (bool pad, bool force, char type) const;
00596
00597 virtual void convert_to_row_or_column_vector (void);
00598
00599 virtual bool print_as_scalar (void) const { return false; }
00600
00601 virtual void print (std::ostream& os, bool pr_as_read_syntax = false) const;
00602
00603 virtual void
00604 print_raw (std::ostream& os, bool pr_as_read_syntax = false) const;
00605
00606 virtual bool
00607 print_name_tag (std::ostream& os, const std::string& name) const;
00608
00609 virtual void
00610 print_with_name (std::ostream& output_buf, const std::string& name,
00611 bool print_padding = true);
00612
00613 virtual void print_info (std::ostream& os, const std::string& prefix) const;
00614
00615 virtual bool save_ascii (std::ostream& os);
00616
00617 virtual bool load_ascii (std::istream& is);
00618
00619 virtual bool save_binary (std::ostream& os, bool& save_as_floats);
00620
00621 virtual bool load_binary (std::istream& is, bool swap,
00622 oct_mach_info::float_format fmt);
00623
00624 #if defined (HAVE_HDF5)
00625 virtual bool
00626 save_hdf5 (hid_t loc_id, const char *name, bool save_as_floats);
00627
00628 virtual bool
00629 load_hdf5 (hid_t loc_id, const char *name);
00630 #endif
00631
00632 virtual int
00633 write (octave_stream& os, int block_size,
00634 oct_data_conv::data_type output_type, int skip,
00635 oct_mach_info::float_format flt_fmt) const;
00636
00637 virtual void *mex_get_data (void) const { return 0; }
00638
00639 virtual octave_idx_type *mex_get_ir (void) const { return 0; }
00640
00641 virtual octave_idx_type *mex_get_jc (void) const { return 0; }
00642
00643 virtual mxArray *as_mxArray (void) const;
00644
00645 virtual octave_value diag (octave_idx_type k = 0) const;
00646
00647 virtual octave_value sort (octave_idx_type dim = 0,
00648 sortmode mode = ASCENDING) const;
00649 virtual octave_value sort (Array<octave_idx_type> &sidx,
00650 octave_idx_type dim = 0,
00651 sortmode mode = ASCENDING) const;
00652
00653 virtual sortmode is_sorted (sortmode mode = UNSORTED) const;
00654
00655 virtual Array<octave_idx_type>
00656 sort_rows_idx (sortmode mode = ASCENDING) const;
00657
00658 virtual sortmode is_sorted_rows (sortmode mode = UNSORTED) const;
00659
00660 virtual void lock (void);
00661
00662 virtual void unlock (void);
00663
00664 virtual bool islocked (void) const { return false; }
00665
00666 virtual void dump (std::ostream& os) const;
00667
00668
00669 enum unary_mapper_t
00670 {
00671 umap_abs,
00672 umap_acos,
00673 umap_acosh,
00674 umap_angle,
00675 umap_arg,
00676 umap_asin,
00677 umap_asinh,
00678 umap_atan,
00679 umap_atanh,
00680 umap_cbrt,
00681 umap_ceil,
00682 umap_conj,
00683 umap_cos,
00684 umap_cosh,
00685 umap_erf,
00686 umap_erfinv,
00687 umap_erfc,
00688 umap_erfcx,
00689 umap_exp,
00690 umap_expm1,
00691 umap_finite,
00692 umap_fix,
00693 umap_floor,
00694 umap_gamma,
00695 umap_imag,
00696 umap_isinf,
00697 umap_isna,
00698 umap_isnan,
00699 umap_lgamma,
00700 umap_log,
00701 umap_log2,
00702 umap_log10,
00703 umap_log1p,
00704 umap_real,
00705 umap_round,
00706 umap_roundb,
00707 umap_signum,
00708 umap_sin,
00709 umap_sinh,
00710 umap_sqrt,
00711 umap_tan,
00712 umap_tanh,
00713 umap_xisalnum,
00714 umap_xisalpha,
00715 umap_xisascii,
00716 umap_xiscntrl,
00717 umap_xisdigit,
00718 umap_xisgraph,
00719 umap_xislower,
00720 umap_xisprint,
00721 umap_xispunct,
00722 umap_xisspace,
00723 umap_xisupper,
00724 umap_xisxdigit,
00725 umap_xtoascii,
00726 umap_xtolower,
00727 umap_xtoupper,
00728 umap_unknown,
00729 num_unary_mappers = umap_unknown
00730 };
00731
00732 virtual octave_value map (unary_mapper_t) const;
00733
00734
00735
00736
00737
00738
00739 virtual octave_value
00740 fast_elem_extract (octave_idx_type n) const;
00741
00742
00743
00744
00745 virtual bool
00746 fast_elem_insert (octave_idx_type n, const octave_value& x);
00747
00748
00749
00750
00751 virtual bool
00752 fast_elem_insert_self (void *where, builtin_type_t btyp) const;
00753
00754 protected:
00755
00756
00757
00758 octave_value numeric_assign (const std::string& type,
00759 const std::list<octave_value_list>& idx,
00760 const octave_value& rhs);
00761
00762 void reset_indent_level (void) const
00763 { curr_print_indent_level = 0; }
00764
00765 void increment_indent_level (void) const
00766 { curr_print_indent_level += 2; }
00767
00768 void decrement_indent_level (void) const
00769 { curr_print_indent_level -= 2; }
00770
00771 int current_print_indent_level (void) const
00772 { return curr_print_indent_level; }
00773
00774 void indent (std::ostream& os) const;
00775
00776 void newline (std::ostream& os) const;
00777
00778 void reset (void) const;
00779
00780
00781
00782
00783
00784 octave_refcount<octave_idx_type> count;
00785
00786 private:
00787
00788 static const char *get_umap_name (unary_mapper_t);
00789
00790 static int curr_print_indent_level;
00791 static bool beginning_of_line;
00792
00793 DECLARE_OV_BASE_TYPEID_FUNCTIONS_AND_DATA
00794 };
00795
00796
00797
00798 extern OCTINTERP_API bool Vsparse_auto_mutate;
00799
00800 #endif