GNU Octave  4.4.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
mxarray.in.h
Go to the documentation of this file.
1 // %NO_EDIT_WARNING%
2 /*
3 
4 Copyright (C) 2001-2018 Paul Kienzle
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 /*
25 
26 Part of this code was originally distributed as part of Octave Forge under
27 the following terms:
28 
29 Author: Paul Kienzle
30 I grant this code to the public domain.
31 2001-03-22
32 
33 THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
34 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
35 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
36 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
37 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
38 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
39 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
40 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
41 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
42 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
43 SUCH DAMAGE.
44 
45 */
46 
47 #if ! defined (octave_mxarray_h)
48 #define octave_mxarray_h 1
49 
50 #include "octave-config.h"
51 
52 typedef enum
53 {
71 }
72 mxClassID;
73 
74 typedef enum
75 {
76  mxREAL = 0,
78 }
80 
81 /* Matlab uses a wide char (uint16) internally, but Octave uses plain char. */
82 /* typedef Uint16 mxChar; */
83 typedef char mxChar;
84 
85 typedef unsigned char mxLogical;
86 
87 /*
88  * FIXME: Mathworks says mwSize, mwIndex should be int generally.
89  * But on 64-bit systems, or when mex -largeArrayDims is used, it is size_t.
90  * mwSignedIndex is supposed to be ptrdiff_t. All of this is confusing.
91  * Its better to conform to the same indexing as the rest of Octave.
92  */
93 typedef %OCTAVE_IDX_TYPE% mwSize;
94 typedef %OCTAVE_IDX_TYPE% mwIndex;
95 typedef %OCTAVE_IDX_TYPE% mwSignedIndex;
96 
97 #if ! defined (MXARRAY_TYPEDEFS_ONLY)
98 
99 #include <cstring>
100 #include "error.h"
101 
102 class octave_value;
103 class dim_vector;
104 
105 #define DO_MUTABLE_METHOD(RET_T, METHOD_CALL) \
106  RET_T retval = rep->METHOD_CALL; \
107  \
108  if (rep->mutation_needed ()) \
109  { \
110  maybe_mutate (); \
111  retval = rep->METHOD_CALL; \
112  } \
113  \
114  return retval
115 
116 #define DO_VOID_MUTABLE_METHOD(METHOD_CALL) \
117  rep->METHOD_CALL; \
118  \
119  if (rep->mutation_needed ()) \
120  { \
121  maybe_mutate (); \
122  rep->METHOD_CALL; \
123  }
124 
125 class mxArray;
126 
127 // A class to provide the default implementation of some of the
128 // virtual functions declared in the mxArray class.
129 
131 {
132 protected:
133 
134  mxArray_base (void) { }
135 
136 public:
137 
138  virtual mxArray_base * dup (void) const = 0;
139 
140  virtual mxArray * as_mxArray (void) const { return nullptr; }
141 
142  virtual ~mxArray_base (void) = default;
143 
144  virtual bool is_octave_value (void) const { return false; }
145 
146  virtual int iscell (void) const = 0;
147 
148  virtual int is_char (void) const = 0;
149 
150  virtual int is_class (const char *name_arg) const
151  {
152  int retval = 0;
153 
154  const char *cname = get_class_name ();
155 
156  if (cname && name_arg)
157  retval = ! strcmp (cname, name_arg);
158 
159  return retval;
160  }
161 
162  virtual int is_complex (void) const = 0;
163 
164  virtual int is_double (void) const = 0;
165 
166  virtual int is_function_handle (void) const = 0;
167 
168  virtual int is_int16 (void) const = 0;
169 
170  virtual int is_int32 (void) const = 0;
171 
172  virtual int is_int64 (void) const = 0;
173 
174  virtual int is_int8 (void) const = 0;
175 
176  virtual int is_logical (void) const = 0;
177 
178  virtual int is_numeric (void) const = 0;
179 
180  virtual int is_single (void) const = 0;
181 
182  virtual int is_sparse (void) const = 0;
183 
184  virtual int is_struct (void) const = 0;
185 
186  virtual int is_uint16 (void) const = 0;
187 
188  virtual int is_uint32 (void) const = 0;
189 
190  virtual int is_uint64 (void) const = 0;
191 
192  virtual int is_uint8 (void) const = 0;
193 
194  virtual int is_logical_scalar (void) const
195  {
196  return is_logical () && get_number_of_elements () == 1;
197  }
198 
199  virtual int is_logical_scalar_true (void) const = 0;
200 
201  virtual mwSize get_m (void) const = 0;
202 
203  virtual mwSize get_n (void) const = 0;
204 
205  virtual mwSize * get_dimensions (void) const = 0;
206 
207  virtual mwSize get_number_of_dimensions (void) const = 0;
208 
209  virtual void set_m (mwSize m) = 0;
210 
211  virtual void set_n (mwSize n) = 0;
212 
213  virtual int set_dimensions (mwSize *dims_arg, mwSize ndims_arg) = 0;
214 
215  virtual mwSize get_number_of_elements (void) const = 0;
216 
217  virtual int isempty (void) const = 0;
218 
219  virtual bool is_scalar (void) const = 0;
220 
221  virtual mxClassID get_class_id (void) const = 0;
222 
223  virtual const char * get_class_name (void) const = 0;
224 
225  virtual void set_class_name (const char *name_arg) = 0;
226 
227  // The following functions aren't pure virtual becuase they are only
228  // valid for one type. Making them pure virtual would mean tha they
229  // have to be implemented for all derived types, and all of those
230  // would need to throw errors instead of just doing it once here.
231 
232  virtual mxArray *
233  get_property (mwIndex /*idx*/, const char * /*pname*/) const
234  {
235  return nullptr;
236  }
237 
238  virtual void set_property (mwIndex /*idx*/, const char * /*pname*/,
239  const mxArray * /*pval*/)
240  {
241  err_invalid_type ();
242  }
243 
244  virtual mxArray * get_cell (mwIndex /*idx*/) const
245  {
246  err_invalid_type ();
247  }
248 
249  virtual void set_cell (mwIndex idx, mxArray *val) = 0;
250 
251  virtual double get_scalar (void) const = 0;
252 
253  virtual void * get_data (void) const = 0;
254 
255  virtual void * get_imag_data (void) const = 0;
256 
257  virtual void set_data (void *pr) = 0;
258 
259  virtual void set_imag_data (void *pi) = 0;
260 
261  virtual mwIndex * get_ir (void) const = 0;
262 
263  virtual mwIndex * get_jc (void) const = 0;
264 
265  virtual mwSize get_nzmax (void) const = 0;
266 
267  virtual void set_ir (mwIndex *ir) = 0;
268 
269  virtual void set_jc (mwIndex *jc) = 0;
270 
271  virtual void set_nzmax (mwSize nzmax) = 0;
272 
273  virtual int add_field (const char *key) = 0;
274 
275  virtual void remove_field (int key_num) = 0;
276 
277  virtual mxArray * get_field_by_number (mwIndex index, int key_num) const = 0;
278 
279  virtual void
280  set_field_by_number (mwIndex index, int key_num, mxArray *val) = 0;
281 
282  virtual int get_number_of_fields (void) const = 0;
283 
284  virtual const char * get_field_name_by_number (int key_num) const = 0;
285 
286  virtual int get_field_number (const char *key) const = 0;
287 
288  virtual int get_string (char *buf, mwSize buflen) const = 0;
289 
290  virtual char * array_to_string (void) const = 0;
291 
292  virtual mwIndex calc_single_subscript (mwSize nsubs, mwIndex *subs) const = 0;
293 
294  virtual size_t get_element_size (void) const = 0;
295 
296  virtual bool mutation_needed (void) const { return false; }
297 
298  virtual mxArray * mutate (void) const { return nullptr; }
299 
300  virtual octave_value as_octave_value (void) const = 0;
301 
302 protected:
303 
305 
306  OCTAVE_DEPRECATED (4.2, "use 'err_invalid_type' instead")
307  void invalid_type_error (void) const
308  {
309  error ("invalid type for operation");
310  }
311 
312  OCTAVE_NORETURN void err_invalid_type (void) const
313  {
314  error ("invalid type for operation");
315  }
316 };
317 
318 // The main interface class. The representation can be based on an
319 // octave_value object or a separate object that tries to reproduce
320 // the semantics of mxArray objects in Matlab more directly.
321 
322 class mxArray
323 {
324 public:
325 
326  mxArray (const octave_value& ov);
327 
328  mxArray (mxClassID id, mwSize ndims, const mwSize *dims,
329  mxComplexity flag = mxREAL, bool init = true);
330 
331  mxArray (mxClassID id, const dim_vector& dv, mxComplexity flag = mxREAL);
332 
333  mxArray (mxClassID id, mwSize m, mwSize n,
334  mxComplexity flag = mxREAL, bool init = true);
335 
336  mxArray (mxClassID id, double val);
337 
339 
340  mxArray (const char *str);
341 
342  mxArray (mwSize m, const char **str);
343 
344  mxArray (mxClassID id, mwSize m, mwSize n, mwSize nzmax,
345  mxComplexity flag = mxREAL);
346 
347  mxArray (mwSize ndims, const mwSize *dims, int num_keys, const char **keys);
348 
349  mxArray (const dim_vector& dv, int num_keys, const char **keys);
350 
351  mxArray (mwSize m, mwSize n, int num_keys, const char **keys);
352 
353  mxArray (mwSize ndims, const mwSize *dims);
354 
355  mxArray (const dim_vector& dv);
356 
357  mxArray (mwSize m, mwSize n);
358 
359  mxArray * dup (void) const
360  {
361  mxArray *retval = rep->as_mxArray ();
362 
363  if (retval)
364  retval->set_name (name);
365  else
366  {
367  mxArray_base *new_rep = rep->dup ();
368 
369  retval = new mxArray (new_rep, name);
370  }
371 
372  return retval;
373  }
374 
375  // No copying!
376 
377  mxArray (const mxArray&) = delete;
378 
379  mxArray& operator = (const mxArray&) = delete;
380 
381  ~mxArray (void);
382 
383  bool is_octave_value (void) const { return rep->is_octave_value (); }
384 
385  int iscell (void) const { return rep->iscell (); }
386 
387  int is_char (void) const { return rep->is_char (); }
388 
389  int is_class (const char *name_arg) const { return rep->is_class (name_arg); }
390 
391  int is_complex (void) const { return rep->is_complex (); }
392 
393  int is_double (void) const { return rep->is_double (); }
394 
395  int is_function_handle (void) const { return rep->is_function_handle (); }
396 
397  int is_int16 (void) const { return rep->is_int16 (); }
398 
399  int is_int32 (void) const { return rep->is_int32 (); }
400 
401  int is_int64 (void) const { return rep->is_int64 (); }
402 
403  int is_int8 (void) const { return rep->is_int8 (); }
404 
405  int is_logical (void) const { return rep->is_logical (); }
406 
407  int is_numeric (void) const { return rep->is_numeric (); }
408 
409  int is_single (void) const { return rep->is_single (); }
410 
411  int is_sparse (void) const { return rep->is_sparse (); }
412 
413  int is_struct (void) const { return rep->is_struct (); }
414 
415  int is_uint16 (void) const { return rep->is_uint16 (); }
416 
417  int is_uint32 (void) const { return rep->is_uint32 (); }
418 
419  int is_uint64 (void) const { return rep->is_uint64 (); }
420 
421  int is_uint8 (void) const { return rep->is_uint8 (); }
422 
423  int is_logical_scalar (void) const { return rep->is_logical_scalar (); }
424 
425  int is_logical_scalar_true (void) const
426  { return rep->is_logical_scalar_true (); }
427 
428  mwSize get_m (void) const { return rep->get_m (); }
429 
430  mwSize get_n (void) const { return rep->get_n (); }
431 
432  mwSize * get_dimensions (void) const { return rep->get_dimensions (); }
433 
435  { return rep->get_number_of_dimensions (); }
436 
438 
440 
441  int set_dimensions (mwSize *dims_arg, mwSize ndims_arg)
442  { DO_MUTABLE_METHOD (int, set_dimensions (dims_arg, ndims_arg)); }
443 
445  { return rep->get_number_of_elements (); }
446 
447  int isempty (void) const { return get_number_of_elements () == 0; }
448 
449  bool is_scalar (void) const { return rep->is_scalar (); }
450 
451  const char * get_name (void) const { return name; }
452 
453  void set_name (const char *name_arg);
454 
455  mxClassID get_class_id (void) const { return rep->get_class_id (); }
456 
457  const char * get_class_name (void) const { return rep->get_class_name (); }
458 
459  mxArray * get_property (mwIndex idx, const char *pname) const
460  { return rep->get_property (idx, pname); }
461 
462  void set_property (mwIndex idx, const char *pname, const mxArray *pval)
463  { rep->set_property (idx, pname, pval); }
464 
465  void set_class_name (const char *name_arg)
466  { DO_VOID_MUTABLE_METHOD (set_class_name (name_arg)); }
467 
468  mxArray * get_cell (mwIndex idx) const
469  { DO_MUTABLE_METHOD (mxArray *, get_cell (idx)); }
470 
472  { DO_VOID_MUTABLE_METHOD (set_cell (idx, val)); }
473 
474  double get_scalar (void) const { return rep->get_scalar (); }
475 
476  void * get_data (void) const { DO_MUTABLE_METHOD (void *, get_data ()); }
477 
478  void * get_imag_data (void) const
479  { DO_MUTABLE_METHOD (void *, get_imag_data ()); }
480 
481  void set_data (void *pr) { DO_VOID_MUTABLE_METHOD (set_data (pr)); }
482 
484 
485  mwIndex * get_ir (void) const { DO_MUTABLE_METHOD (mwIndex *, get_ir ()); }
486 
487  mwIndex * get_jc (void) const { DO_MUTABLE_METHOD (mwIndex *, get_jc ()); }
488 
489  mwSize get_nzmax (void) const { return rep->get_nzmax (); }
490 
492 
494 
495  void set_nzmax (mwSize nzmax) { DO_VOID_MUTABLE_METHOD (set_nzmax (nzmax)); }
496 
497  int add_field (const char *key) { DO_MUTABLE_METHOD (int, add_field (key)); }
498 
499  void remove_field (int key_num)
500  { DO_VOID_MUTABLE_METHOD (remove_field (key_num)); }
501 
502  mxArray * get_field_by_number (mwIndex index, int key_num) const
503  { DO_MUTABLE_METHOD (mxArray *, get_field_by_number (index, key_num)); }
504 
505  void set_field_by_number (mwIndex index, int key_num, mxArray *val)
506  { DO_VOID_MUTABLE_METHOD (set_field_by_number (index, key_num, val)); }
507 
508  int get_number_of_fields (void) const { return rep->get_number_of_fields (); }
509 
510  const char * get_field_name_by_number (int key_num) const
511  { DO_MUTABLE_METHOD (const char*, get_field_name_by_number (key_num)); }
512 
513  int get_field_number (const char *key) const
514  { DO_MUTABLE_METHOD (int, get_field_number (key)); }
515 
516  int get_string (char *buf, mwSize buflen) const
517  { return rep->get_string (buf, buflen); }
518 
519  char * array_to_string (void) const { return rep->array_to_string (); }
520 
522  { return rep->calc_single_subscript (nsubs, subs); }
523 
524  size_t get_element_size (void) const { return rep->get_element_size (); }
525 
526  bool mutation_needed (void) const { return rep->mutation_needed (); }
527 
528  mxArray * mutate (void) const { return rep->mutate (); }
529 
530  static void * malloc (size_t n);
531 
532  static void * calloc (size_t n, size_t t);
533 
534  static char * strsave (const char *str)
535  {
536  char *retval = nullptr;
537 
538  if (str)
539  {
540  mwSize sz = sizeof (mxChar) * (strlen (str) + 1);
541  retval = static_cast<char *> (mxArray::malloc (sz));
542  strcpy (retval, str);
543  }
544 
545  return retval;
546  }
547 
548  static octave_value
549  as_octave_value (const mxArray *ptr, bool null_is_empty = true);
550 
551  octave_value as_octave_value (void) const;
552 
553 private:
554 
555  mutable mxArray_base *rep;
556 
557  char *name;
558 
559  mxArray (mxArray_base *r, const char *n)
560  : rep (r), name (mxArray::strsave (n)) { }
561 
562  void maybe_mutate (void) const;
563 };
564 
565 #undef DO_MUTABLE_METHOD
566 #undef DO_VOID_MUTABLE_METHOD
567 
568 #endif
569 #endif
virtual int get_field_number(const char *key) const =0
void set_name(const char *name_arg)
Definition: mex.cc:2069
mxArray(const octave_value &ov)
Definition: mex.cc:2012
virtual mxArray_base * dup(void) const =0
int is_logical(void) const
Definition: mxarray.in.h:405
virtual int is_numeric(void) const =0
virtual mxClassID get_class_id(void) const =0
mxComplexity
Definition: mxarray.in.h:74
virtual void set_property(mwIndex, const char *, const mxArray *)
Definition: mxarray.in.h:238
#define DO_VOID_MUTABLE_METHOD(METHOD_CALL)
Definition: mxarray.in.h:116
void set_field_by_number(mwIndex index, int key_num, mxArray *val)
Definition: mxarray.in.h:505
OCTAVE_IDX_TYPE mwSize
Definition: mxarray.in.h:93
mxArray * dup(void) const
Definition: mxarray.in.h:359
mxClassID get_class_id(void) const
Definition: mxarray.in.h:455
virtual int is_uint32(void) const =0
virtual const char * get_class_name(void) const =0
virtual int is_complex(void) const =0
bool is_scalar(void) const
Definition: mxarray.in.h:449
identity matrix If supplied two scalar respectively For allows like xample val
Definition: data.cc:4986
void set_imag_data(void *pi)
Definition: mxarray.in.h:483
mwSize get_n(void) const
Definition: mxarray.in.h:430
virtual int is_logical_scalar_true(void) const =0
virtual void set_nzmax(mwSize nzmax)=0
virtual void set_m(mwSize m)=0
virtual int get_number_of_fields(void) const =0
mxArray_base(void)
Definition: mxarray.in.h:134
void error(const char *fmt,...)
Definition: error.cc:578
virtual mxArray * mutate(void) const
Definition: mxarray.in.h:298
static void * malloc(size_t n)
Definition: mex.cc:2438
int is_uint8(void) const
Definition: mxarray.in.h:421
virtual int is_logical_scalar(void) const
Definition: mxarray.in.h:194
int is_class(const char *name_arg) const
Definition: mxarray.in.h:389
int is_int8(void) const
Definition: mxarray.in.h:403
char * array_to_string(void) const
Definition: mxarray.in.h:519
void set_property(mwIndex idx, const char *pname, const mxArray *pval)
Definition: mxarray.in.h:462
virtual void set_cell(mwIndex idx, mxArray *val)=0
virtual int is_struct(void) const =0
int is_uint16(void) const
Definition: mxarray.in.h:415
virtual int isempty(void) const =0
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
int is_single(void) const
Definition: mxarray.in.h:409
mwIndex * get_ir(void) const
Definition: mxarray.in.h:485
int get_number_of_fields(void) const
Definition: mxarray.in.h:508
virtual ~mxArray_base(void)=default
int is_function_handle(void) const
Definition: mxarray.in.h:395
void set_nzmax(mwSize nzmax)
Definition: mxarray.in.h:495
virtual int set_dimensions(mwSize *dims_arg, mwSize ndims_arg)=0
int is_struct(void) const
Definition: mxarray.in.h:413
virtual double get_scalar(void) const =0
mxArray & operator=(const mxArray &)=delete
int get_string(char *buf, mwSize buflen) const
Definition: mxarray.in.h:516
virtual mxArray * get_cell(mwIndex) const
Definition: mxarray.in.h:244
virtual void remove_field(int key_num)=0
mxArray * get_property(mwIndex idx, const char *pname) const
Definition: mxarray.in.h:459
virtual int is_uint64(void) const =0
mxClassID
Definition: mxarray.in.h:52
void set_cell(mwIndex idx, mxArray *val)
Definition: mxarray.in.h:471
virtual void set_data(void *pr)=0
char * name
Definition: mxarray.in.h:557
virtual mwSize get_n(void) const =0
virtual int get_string(char *buf, mwSize buflen) const =0
virtual int is_int32(void) const =0
mwSize get_number_of_elements(void) const
Definition: mxarray.in.h:444
void set_ir(mwIndex *ir)
Definition: mxarray.in.h:491
octave_value as_octave_value(void) const
Definition: mex.cc:2086
void * get_data(void) const
Definition: mxarray.in.h:476
virtual void * get_imag_data(void) const =0
int is_int16(void) const
Definition: mxarray.in.h:397
virtual mwIndex * get_ir(void) const =0
virtual int add_field(const char *key)=0
static char * strsave(const char *str)
Definition: mxarray.in.h:534
virtual mxArray * get_property(mwIndex, const char *) const
Definition: mxarray.in.h:233
virtual int is_logical(void) const =0
int is_double(void) const
Definition: mxarray.in.h:393
virtual mwIndex calc_single_subscript(mwSize nsubs, mwIndex *subs) const =0
static void * calloc(size_t n, size_t t)
Definition: mex.cc:2444
bool strcmp(const T &str_a, const T &str_b)
True if strings are the same.
Definition: oct-string.cc:112
std::string str
Definition: hash.cc:118
virtual mwSize get_nzmax(void) const =0
idx subs
Definition: ov.cc:3065
octave_value retval
Definition: data.cc:6246
void set_class_name(const char *name_arg)
Definition: mxarray.in.h:465
virtual octave_value as_octave_value(void) const =0
void set_jc(mwIndex *jc)
Definition: mxarray.in.h:493
mwSize get_m(void) const
Definition: mxarray.in.h:428
int set_dimensions(mwSize *dims_arg, mwSize ndims_arg)
Definition: mxarray.in.h:441
virtual void set_ir(mwIndex *ir)=0
double get_scalar(void) const
Definition: mxarray.in.h:474
sz
Definition: data.cc:5264
virtual int is_sparse(void) const =0
bool is_octave_value(void) const
Definition: mxarray.in.h:383
size_t get_element_size(void) const
Definition: mxarray.in.h:524
bool mutation_needed(void) const
Definition: mxarray.in.h:526
virtual void set_jc(mwIndex *jc)=0
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
T::size_type strlen(const typename T::value_type *str)
Definition: oct-string.cc:75
int is_uint64(void) const
Definition: mxarray.in.h:419
virtual size_t get_element_size(void) const =0
mwIndex calc_single_subscript(mwSize nsubs, mwIndex *subs) const
Definition: mxarray.in.h:521
std::string pname
Definition: graphics.cc:11810
mxArray * mutate(void) const
Definition: mxarray.in.h:528
int add_field(const char *key)
Definition: mxarray.in.h:497
void maybe_mutate(void) const
Definition: mex.cc:2092
virtual mwSize get_number_of_elements(void) const =0
virtual bool mutation_needed(void) const
Definition: mxarray.in.h:296
virtual bool is_scalar(void) const =0
virtual mwSize * get_dimensions(void) const =0
virtual mwSize get_m(void) const =0
int is_int32(void) const
Definition: mxarray.in.h:399
OCTAVE_IDX_TYPE mwSignedIndex
Definition: mxarray.in.h:95
virtual int iscell(void) const =0
int is_complex(void) const
Definition: mxarray.in.h:391
OCTAVE_NORETURN void err_invalid_type(void) const
Definition: mxarray.in.h:312
const char * get_field_name_by_number(int key_num) const
Definition: mxarray.in.h:510
virtual int is_uint16(void) const =0
#define DO_MUTABLE_METHOD(RET_T, METHOD_CALL)
Definition: mxarray.in.h:105
mxArray_base * rep
Definition: mxarray.in.h:555
char mxChar
Definition: mxarray.in.h:83
virtual mwIndex * get_jc(void) const =0
mwSize get_nzmax(void) const
Definition: mxarray.in.h:489
virtual void set_class_name(const char *name_arg)=0
void set_data(void *pr)
Definition: mxarray.in.h:481
int is_uint32(void) const
Definition: mxarray.in.h:417
virtual int is_class(const char *name_arg) const
Definition: mxarray.in.h:150
void set_m(mwSize m)
Definition: mxarray.in.h:437
virtual char * array_to_string(void) const =0
virtual int is_uint8(void) const =0
mwSize * get_dimensions(void) const
Definition: mxarray.in.h:432
mxArray * get_field_by_number(mwIndex index, int key_num) const
Definition: mxarray.in.h:502
const char * get_class_name(void) const
Definition: mxarray.in.h:457
virtual int is_function_handle(void) const =0
virtual int is_int16(void) const =0
mxArray(mxArray_base *r, const char *n)
Definition: mxarray.in.h:559
int get_field_number(const char *key) const
Definition: mxarray.in.h:513
virtual void set_imag_data(void *pi)=0
virtual int is_single(void) const =0
int is_sparse(void) const
Definition: mxarray.in.h:411
virtual void set_field_by_number(mwIndex index, int key_num, mxArray *val)=0
~mxArray(void)
Definition: mex.cc:2061
virtual int is_int64(void) const =0
mxArray_base(const mxArray_base &)
Definition: mxarray.in.h:304
int isempty(void) const
Definition: mxarray.in.h:447
unsigned char mxLogical
Definition: mxarray.in.h:85
int iscell(void) const
Definition: mxarray.in.h:385
int is_logical_scalar_true(void) const
Definition: mxarray.in.h:425
virtual void * get_data(void) const =0
int is_int64(void) const
Definition: mxarray.in.h:401
int is_logical_scalar(void) const
Definition: mxarray.in.h:423
int is_char(void) const
Definition: mxarray.in.h:387
int is_numeric(void) const
Definition: mxarray.in.h:407
virtual const char * get_field_name_by_number(int key_num) const =0
OCTAVE_IDX_TYPE mwIndex
Definition: mxarray.in.h:94
mxArray * get_cell(mwIndex idx) const
Definition: mxarray.in.h:468
mwIndex * get_jc(void) const
Definition: mxarray.in.h:487
virtual void set_n(mwSize n)=0
virtual int is_int8(void) const =0
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:87
mwSize get_number_of_dimensions(void) const
Definition: mxarray.in.h:434
void remove_field(int key_num)
Definition: mxarray.in.h:499
virtual bool is_octave_value(void) const
Definition: mxarray.in.h:144
const char * get_name(void) const
Definition: mxarray.in.h:451
void invalid_type_error(void) const
Definition: mxarray.in.h:307
dim_vector dv
Definition: sub2ind.cc:263
void set_n(mwSize n)
Definition: mxarray.in.h:439
virtual int is_char(void) const =0
void * get_imag_data(void) const
Definition: mxarray.in.h:478
virtual mwSize get_number_of_dimensions(void) const =0
virtual int is_double(void) const =0
static const double pi
Definition: lo-specfun.cc:1996
virtual mxArray * as_mxArray(void) const
Definition: mxarray.in.h:140
virtual mxArray * get_field_by_number(mwIndex index, int key_num) const =0