26#if defined (HAVE_CONFIG_H)
43#if defined (OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR)
44# include <memory_resource>
81 extern OCTINTERP_API
const mxArray *
121 mxClassID class_id, mxComplexity flag);
128 mxCreateSparse (mwSize m, mwSize n, mwSize nzmax, mxComplexity flag);
173 mxClassID class_id, mxComplexity flag);
201 int num_keys,
const char **keys);
225 extern OCTINTERP_API mxComplexInt8 * mxGetComplexInt8s (
const mxArray *p);
226 extern OCTINTERP_API mxComplexInt16 * mxGetComplexInt16s (
const mxArray *p);
227 extern OCTINTERP_API mxComplexInt32 * mxGetComplexInt32s (
const mxArray *p);
228 extern OCTINTERP_API mxComplexInt64 * mxGetComplexInt64s (
const mxArray *p);
229 extern OCTINTERP_API mxComplexUint8 * mxGetComplexUint8s (
const mxArray *p);
230 extern OCTINTERP_API mxComplexUint16 * mxGetComplexUint16s (
const mxArray *p);
231 extern OCTINTERP_API mxComplexUint32 * mxGetComplexUint32s (
const mxArray *p);
232 extern OCTINTERP_API mxComplexUint64 * mxGetComplexUint64s (
const mxArray *p);
253 extern OCTINTERP_API
int mxSetComplexInt8s (
mxArray *p, mxComplexInt8 *
d);
254 extern OCTINTERP_API
int mxSetComplexInt16s (
mxArray *p, mxComplexInt16 *
d);
255 extern OCTINTERP_API
int mxSetComplexInt32s (
mxArray *p, mxComplexInt32 *
d);
256 extern OCTINTERP_API
int mxSetComplexInt64s (
mxArray *p, mxComplexInt64 *
d);
257 extern OCTINTERP_API
int mxSetComplexUint8s (
mxArray *p, mxComplexUint8 *
d);
258 extern OCTINTERP_API
int mxSetComplexUint16s (
mxArray *p, mxComplexUint16 *
d);
259 extern OCTINTERP_API
int mxSetComplexUint32s (
mxArray *p, mxComplexUint32 *
d);
260 extern OCTINTERP_API
int mxSetComplexUint64s (
mxArray *p, mxComplexUint64 *
d);
273 std::cerr <<
"xmalloc (" << n <<
") = " << ptr << std::endl;
282 void *newptr = std::realloc (ptr, n);
285 std::cerr <<
"xrealloc (" << ptr <<
", " << n <<
") = " << newptr
296 std::cerr <<
"xfree (" << ptr <<
")" << std::endl;
307 for (mwSize i = 0; i < m; i++)
309 mwSize tmp =
strlen (str[i]);
341#if defined (OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR)
343class mx_deleting_memory_resource :
public std::pmr::memory_resource
347 void * do_allocate (std::size_t bytes,
size_t )
352 throw std::bad_alloc ();
357 void do_deallocate (
void* ptr, std::size_t ,
363 bool do_is_equal (
const std::pmr::memory_resource& other)
const noexcept
365 return this ==
dynamic_cast<const mx_deleting_memory_resource *
> (&other);
369class mx_preserving_memory_resource :
public std::pmr::memory_resource
373 void * do_allocate (std::size_t bytes,
size_t )
378 throw std::bad_alloc ();
383 void do_deallocate (
void* , std::size_t ,
387 bool do_is_equal (
const std::pmr::memory_resource& other)
const noexcept
389 return this ==
dynamic_cast<const mx_preserving_memory_resource *
> (&other);
395static mx_deleting_memory_resource the_mx_deleting_memory_resource;
396static mx_preserving_memory_resource the_mx_preserving_memory_resource;
398static std::pmr::memory_resource *current_mx_memory_resource = &the_mx_deleting_memory_resource;
405 : m_interleaved (interleaved)
410 mwSize nsubs,
const mwIndex *subs)
427 mwSize n = (nsubs <= ndims ? nsubs : ndims);
432 retval = dims[n] * retval + subs[n];
455#define VOID_MUTATION_METHOD(FCN_NAME, ARG_LIST) \
456 void FCN_NAME ARG_LIST { request_mutation (); }
458#define CONST_VOID_MUTATION_METHOD(FCN_NAME, ARG_LIST) \
459 void FCN_NAME ARG_LIST const { request_mutation (); }
461#define MUTATION_METHOD(RET_TYPE, FCN_NAME, ARG_LIST, RET_VAL) \
462 RET_TYPE FCN_NAME ARG_LIST { request_mutation (); return RET_VAL; }
464#define CONST_MUTATION_METHOD(RET_TYPE, FCN_NAME, ARG_LIST, RET_VAL) \
465 RET_TYPE FCN_NAME ARG_LIST const { request_mutation (); return RET_VAL; }
467#define GET_DATA_METHOD(RT, FCN_NAME, ID, COMPLEXITY) \
468 RT * FCN_NAME (void) const { return get_data<RT> (ID, COMPLEXITY); }
586 for (mwIndex i =
m_ndims - 1; i > 0; i--)
603 for (mwIndex i = 0; i <
m_ndims; i++)
637 m_id = mxUNKNOWN_CLASS;
642 m_id = mxDOUBLE_CLASS;
643 else if (cn ==
"single")
644 m_id = mxSINGLE_CLASS;
645 else if (cn ==
"char")
647 else if (cn ==
"logical")
648 m_id = mxLOGICAL_CLASS;
649 else if (cn ==
"cell")
651 else if (cn ==
"struct")
652 m_id = mxSTRUCT_CLASS;
653 else if (cn ==
"function_handle")
654 m_id = mxFUNCTION_CLASS;
655 else if (cn ==
"int8")
657 else if (cn ==
"uint8")
658 m_id = mxUINT8_CLASS;
659 else if (cn ==
"int16")
660 m_id = mxINT16_CLASS;
661 else if (cn ==
"uint16")
662 m_id = mxUINT16_CLASS;
663 else if (cn ==
"int32")
664 m_id = mxINT32_CLASS;
665 else if (cn ==
"uint32")
666 m_id = mxUINT32_CLASS;
667 else if (cn ==
"int64")
668 m_id = mxINT64_CLASS;
669 else if (cn ==
"uint64")
670 m_id = mxUINT64_CLASS;
733 if (m_data ==
nullptr)
737 return *
static_cast<const bool *
> (m_data);
739 return *
static_cast<const double *
> (m_data);
741 return *
static_cast<const double *
> (m_data);
763 template <
typename T>
764 T *
get_data (mxClassID class_id, mxComplexity complexity)
const
770 T *retval =
static_cast<T *
> (ptr);
810 GET_DATA_METHOD (mxComplexInt16 *, get_complex_int16s, (
void),
nullptr);
812 GET_DATA_METHOD (mxComplexInt32 *, get_complex_int32s, (
void),
nullptr);
814 GET_DATA_METHOD (mxComplexInt64 *, get_complex_int64s, (
void),
nullptr);
816 GET_DATA_METHOD (mxComplexUint8 *, get_complex_uint8s, (
void),
nullptr);
818 GET_DATA_METHOD (mxComplexUint16 *, get_complex_uint16s, (
void),
nullptr);
820 GET_DATA_METHOD (mxComplexUint32 *, get_complex_uint32s, (
void),
nullptr);
822 GET_DATA_METHOD (mxComplexUint64 *, get_complex_uint64s, (
void),
nullptr);
827 void *retval =
nullptr;
922 const char *p = tmp.
data ();
924 for (mwIndex i = 0; i < nel; i++)
951 const char *p = tmp.
data ();
953 for (mwIndex i = 0; i < nel; i++)
978 case mxCELL_CLASS:
return sizeof (
mxArray *);
979 case mxSTRUCT_CLASS:
return sizeof (
mxArray *);
980 case mxLOGICAL_CLASS:
return sizeof (mxLogical);
981 case mxCHAR_CLASS:
return sizeof (mxChar);
992 case mxFUNCTION_CLASS:
return 0;
1025 for (mwIndex i = 0; i <
m_ndims; i++)
1087 return (
m_id == mxDOUBLE_CLASS ||
m_id == mxSINGLE_CLASS
1088 ||
m_id == mxINT8_CLASS ||
m_id == mxUINT8_CLASS
1089 ||
m_id == mxINT16_CLASS ||
m_id == mxUINT16_CLASS
1090 ||
m_id == mxINT32_CLASS ||
m_id == mxUINT32_CLASS
1091 ||
m_id == mxINT64_CLASS ||
m_id == mxUINT64_CLASS);
1111 &&
static_cast<mxLogical *
> (
get_data ())[0] != 0);
1120 for (mwSize i =
m_ndims - 1 ; i > 0 ; i--)
1148 for (
int i = 0; i <
m_ndims; i++)
1162 mwSize retval =
m_dims[0];
1164 for (mwIndex i = 1; i <
m_ndims; i++)
1183 case mxDOUBLE_CLASS:
return "double";
1184 case mxSINGLE_CLASS:
return "single";
1185 case mxCHAR_CLASS:
return "char";
1186 case mxLOGICAL_CLASS:
return "logical";
1187 case mxCELL_CLASS:
return "cell";
1188 case mxSTRUCT_CLASS:
return "struct";
1189 case mxFUNCTION_CLASS:
return "function_handle";
1190 case mxINT8_CLASS:
return "int8";
1191 case mxUINT8_CLASS:
return "uint8";
1192 case mxINT16_CLASS:
return "int16";
1193 case mxUINT16_CLASS:
return "uint16";
1194 case mxINT32_CLASS:
return "int32";
1195 case mxUINT32_CLASS:
return "uint32";
1196 case mxINT64_CLASS:
return "int64";
1197 case mxUINT64_CLASS:
return "uint64";
1198 case mxUNKNOWN_CLASS:
return "unknown";
1200 default:
return "unknown";
1293 mxComplexInt8 * get_complex_int8s (
void)
const
1298 mxComplexInt16 * get_complex_int16s (
void)
const
1303 mxComplexInt32 * get_complex_int32s (
void)
const
1308 mxComplexInt64 * get_complex_int64s (
void)
const
1313 mxComplexUint8 * get_complex_uint8s (
void)
const
1318 mxComplexUint16 * get_complex_uint16s (
void)
const
1323 mxComplexUint32 * get_complex_uint32s (
void)
const
1328 mxComplexUint64 * get_complex_uint64s (
void)
const
1406 int set_complex_int8s (mxComplexInt8 *)
1411 int set_complex_int16s (mxComplexInt16 *)
1416 int set_complex_int32s (mxComplexInt32 *)
1421 int set_complex_int64s (mxComplexInt64 *)
1426 int set_complex_uint8s (mxComplexUint8 *)
1431 int set_complex_uint16s (mxComplexUint16 *)
1436 int set_complex_uint32s (mxComplexUint32 *)
1441 int set_complex_uint64s (mxComplexUint64 *)
1537 case mxCELL_CLASS:
return sizeof (
mxArray *);
1538 case mxSTRUCT_CLASS:
return sizeof (
mxArray *);
1539 case mxLOGICAL_CLASS:
return sizeof (mxLogical);
1540 case mxCHAR_CLASS:
return sizeof (mxChar);
1551 case mxFUNCTION_CLASS:
return 0;
1568 m_ndims (ndims < 2 ? 2 : ndims),
1582 for (mwIndex i = 0; i < ndims; i++)
1585 for (mwIndex i =
m_ndims - 1; i > 1; i--)
1599 for (mwIndex i = 0; i <
m_ndims; i++)
1602 for (mwIndex i =
m_ndims - 1; i > 1; i--)
1624 for (mwIndex i = 0; i <
m_ndims; i++)
1638 for (mwIndex i = 0; i < nd; i++)
1662 const mwSize *dims,
bool init =
true)
1682 double *dpr =
static_cast<double *
> (
m_pr);
1690 mxLogical *lpr =
static_cast<mxLogical *
> (
m_pr);
1696 str ? (
strlen (str) ? 1 : 0) : 0,
1700 mxChar *cpr =
static_cast<mxChar *
> (
m_pr);
1702 for (mwIndex i = 0; i < nel; i++)
1711 mxChar *cpr =
static_cast<mxChar *
> (
m_pr);
1717 for (mwIndex j = 0; j < m; j++)
1719 const char *ptr = str[j];
1721 std::size_t tmp_len =
strlen (ptr);
1723 for (std::size_t i = 0; i < tmp_len; i++)
1724 cpr[m*i+j] =
static_cast<mxChar
> (ptr[i]);
1726 for (std::size_t i = tmp_len; i < static_cast<std::size_t> (nc); i++)
1727 cpr[m*i+j] =
static_cast<mxChar
> (
' ');
1754 case mxDOUBLE_CLASS:
1755 retval = *(
static_cast<double *
> (
m_pr));
1758 case mxSINGLE_CLASS:
1759 retval = *(
static_cast<float *
> (
m_pr));
1763 retval = *(
static_cast<mxChar *
> (
m_pr));
1766 case mxLOGICAL_CLASS:
1767 retval = *(
static_cast<bool *
> (
m_pr));
1771 retval = *(
static_cast<int8_t *
> (
m_pr));
1775 retval = *(
static_cast<uint8_t *
> (
m_pr));
1779 retval = *(
static_cast<int16_t *
> (
m_pr));
1782 case mxUINT16_CLASS:
1783 retval = *(
static_cast<uint16_t *
> (
m_pr));
1787 retval = *(
static_cast<int32_t *
> (
m_pr));
1790 case mxUINT32_CLASS:
1791 retval = *(
static_cast<uint32_t *
> (
m_pr));
1795 retval = *(
static_cast<int64_t *
> (
m_pr));
1798 case mxUINT64_CLASS:
1799 retval = *(
static_cast<uint64_t *
> (
m_pr));
1820 return static_cast<mxDouble *
> (
m_pr);
1825 return static_cast<mxSingle *
> (
m_pr);
1830 return static_cast<mxInt8 *
> (
m_pr);
1835 return static_cast<mxInt16 *
> (
m_pr);
1840 return static_cast<mxInt32 *
> (
m_pr);
1845 return static_cast<mxInt64 *
> (
m_pr);
1850 return static_cast<mxUint8 *
> (
m_pr);
1855 return static_cast<mxUint16 *
> (
m_pr);
1860 return static_cast<mxUint32 *
> (
m_pr);
1865 return static_cast<mxUint64 *
> (
m_pr);
1870 return static_cast<mxComplexDouble *
> (
m_pr);
1875 return static_cast<mxComplexSingle *
> (
m_pr);
1881 int get_complex_int8s (mxComplexInt8 *
d)
1887 int get_complex_int16s (mxComplexInt16 *
d)
1893 int get_complex_int32s (mxComplexInt32 *
d)
1899 int get_complex_int64s (mxComplexInt64 *
d)
1905 int get_complex_uint8s (mxComplexUint8 *
d)
1911 int get_complex_uint16s (mxComplexUint16 *
d)
1917 int get_complex_uint32s (mxComplexUint32 *
d)
1923 int get_complex_uint64s (mxComplexUint64 *
d)
2005 int set_complex_int8s (mxComplexInt8 *
d)
2011 int set_complex_int16s (mxComplexInt16 *
d)
2017 int set_complex_int32s (mxComplexInt32 *
d)
2023 int set_complex_int64s (mxComplexInt64 *
d)
2029 int set_complex_uint8s (mxComplexUint8 *
d)
2035 int set_complex_uint16s (mxComplexUint16 *
d)
2041 int set_complex_uint32s (mxComplexUint32 *
d)
2047 int set_complex_uint64s (mxComplexUint64 *
d)
2060 if (! (nel < buflen))
2069 mxChar *ptr =
static_cast<mxChar *
> (
m_pr);
2071 for (mwIndex i = 0; i < nel; i++)
2072 buf[i] =
static_cast<char> (ptr[i]);
2090 mxChar *ptr =
static_cast<mxChar *
> (
m_pr);
2092 for (mwIndex i = 0; i < nel; i++)
2093 buf[i] =
static_cast<char> (ptr[i]);
2109 case mxDOUBLE_CLASS:
2111 ? fp_to_ov<Complex> (dv) : fp_to_ov<double> (dv));
2113 case mxSINGLE_CLASS:
2115 ? fp_to_ov<FloatComplex> (dv) : fp_to_ov<float> (dv));
2118 return int_to_ov<mxChar, charNDArray, char> (dv);
2120 case mxLOGICAL_CLASS:
2121 return int_to_ov<mxLogical, boolNDArray, bool> (dv);
2124 return int_to_ov<int8_t, int8NDArray, octave_int8> (dv);
2127 return int_to_ov<uint8_t, uint8NDArray, octave_uint8> (dv);
2130 return int_to_ov<int16_t, int16NDArray, octave_int16> (dv);
2132 case mxUINT16_CLASS:
2133 return int_to_ov<uint16_t, uint16NDArray, octave_uint16> (dv);
2136 return int_to_ov<int32_t, int32NDArray, octave_int32> (dv);
2138 case mxUINT32_CLASS:
2139 return int_to_ov<uint32_t, uint32NDArray, octave_uint32> (dv);
2142 return int_to_ov<int64_t, int64NDArray, octave_int64> (dv);
2144 case mxUINT64_CLASS:
2145 return int_to_ov<uint64_t, uint64NDArray, octave_uint64> (dv);
2164 template <
typename ELT_T>
2170 ELT_T *ppr =
static_cast<ELT_T *
> (
m_pr);
2172#if defined (OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR)
2174 if (current_mx_memory_resource == &the_mx_deleting_memory_resource)
2194 for (mwIndex i = 0; i < nel; i++)
2202 template <
typename ELT_T,
typename ARRAY_T,
typename ARRAY_ELT_T>
2207 error (
"complex integer types are not supported");
2209 ELT_T *ppr =
static_cast<ELT_T *
> (
m_pr);
2211#if 0 && defined (OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR)
2218 return ARRAY_T (ppr, dv, current_mx_memory_resource);
2227 ARRAY_ELT_T *ptr = val.fortran_vec ();
2231 for (mwIndex i = 0; i < nel; i++)
2252 mxComplexity flag = mxREAL,
bool init =
true)
2258 mxComplexity flag = mxREAL)
2264 mxComplexity flag = mxREAL,
bool init =
true)
2319 mxComplexity flag = mxREAL,
bool init =
true)
2321 m_pi (flag == mxCOMPLEX
2327 mxComplexity flag = mxREAL)
2329 m_pi (flag == mxCOMPLEX
2335 mxComplexity flag = mxREAL,
bool init =
true)
2337 m_pi (flag == mxCOMPLEX
2441 case mxDOUBLE_CLASS:
2442 return to_ov<double> (dv);
2444 case mxSINGLE_CLASS:
2445 return to_ov<float> (dv);
2447 case mxLOGICAL_CLASS:
2451 case mxUINT16_CLASS:
2453 case mxUINT32_CLASS:
2455 case mxUINT64_CLASS:
2456 error (
"complex integer types are not supported");
2479 template <
typename T>
2485 T *ppr =
static_cast<T *
> (
m_pr);
2494 T *ppi =
static_cast<T *
> (
m_pi);
2496 for (mwIndex i = 0; i < nel; i++)
2497 ptr[i] = std::complex<T> (ppr[i], ppi[i]);
2516 m_nzmax (nzmax > 0 ? nzmax : 1),
2518 m_jc (static_cast<mwIndex *> (
mxArray::calloc (n + 1, sizeof (mwIndex)))),
2534 memcpy (
m_jc, val.
m_jc, (val.
get_n () + 1) * sizeof (mwIndex));
2567 return static_cast<mxDouble *
> (
m_pr);
2572 return static_cast<mxComplexDouble *
> (
m_pr);
2600 m_nzmax = (nzmax > 0 ? nzmax : 1);
2611 case mxDOUBLE_CLASS:
2612 return is_complex () ? to_ov<Complex> (dv): to_ov<double> (dv);
2614 case mxSINGLE_CLASS:
2615 error (
"single precision sparse data type not supported");
2617 case mxLOGICAL_CLASS:
2618 return to_ov<bool> (dv);
2629 template <
typename ELT_T>
2633 ELT_T *ppr =
static_cast<ELT_T *
> (
m_pr);
2635#if defined (OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR)
2637 if (current_mx_memory_resource == &the_mx_deleting_memory_resource)
2647 ppr,
m_ir,
m_jc, current_mx_memory_resource));
2652 ppr,
m_ir,
m_jc, current_mx_memory_resource));
2663 for (mwIndex i = 0; i <
m_nzmax; i++)
2665 val.
xdata (i) = ppr[i];
2669 for (mwIndex i = 0; i < n + 1; i++)
2695 mxComplexity flag = mxREAL)
2738 mxComplexity flag = mxREAL)
2740 m_pi (flag == mxCOMPLEX
2776 return m_pi !=
nullptr;
2800 case mxDOUBLE_CLASS:
2802 double *ppr =
static_cast<double *
> (
m_pr);
2803 double *ppi =
static_cast<double *
> (
m_pi);
2808 for (mwIndex i = 0; i <
m_nzmax; i++)
2814 for (mwIndex i = 0; i <
get_n () + 1; i++)
2821 case mxSINGLE_CLASS:
2822 error (
"single precision sparse data type not supported");
2844 int num_keys,
const char **keys)
2887 * sizeof (char *)))),
2897 for (mwIndex i = 0; i < nel *
m_nfields; i++)
2900 m_data[i] = (ptr ? ptr->
dup () :
nullptr);
2928 for (mwIndex i = 0; i < ntot; i++)
2952 new_data =
static_cast<mxArray **
>
2961 for (mwIndex i = 0; i < ntot; i++)
2965 new_data[j++] =
nullptr;
2969 new_data[j++] =
m_data[k++];
2985 if (key_num >= 0 && key_num <
m_nfields)
2993 char **new_fields =
static_cast<char **
>
3000 for (
int i = 0; i < key_num; i++)
3003 for (
int i = key_num + 1; i <
m_nfields; i++)
3006 if (new_nfields > 0)
3012 for (mwIndex i = 0; i < ntot; i++)
3017 new_data[j++] =
m_data[k++];
3036 return key_num >= 0 && key_num <
m_nfields
3086 for (mwIndex j = i; j < ntot; j +=
m_nfields)
3137 for (mwIndex i = 0; i < nel; i++)
3140 m_data[i] = (ptr ? ptr->
dup () :
nullptr);
3157 for (mwIndex i = 0; i < nel; i++)
3184 for (mwIndex i = 0; i < nel; i++)
3198 : m_rep (create_rep (interleaved, ov)), m_name (nullptr)
3202 const mwSize *dims, mxComplexity flag,
bool init)
3203 : m_rep (create_rep (interleaved, id, ndims, dims, flag, init)),
3209 : m_rep (create_rep (interleaved, id, dv, flag)), m_name (nullptr)
3213 mxComplexity flag,
bool init)
3214 : m_rep (create_rep (interleaved, id, m, n, flag, init)), m_name (nullptr)
3218 : m_rep (create_rep (interleaved, id, val)), m_name (nullptr)
3222 : m_rep (create_rep (interleaved, id, val)), m_name (nullptr)
3226 : m_rep (create_rep (interleaved, str)), m_name (nullptr)
3230 : m_rep (create_rep (interleaved, m, str)), m_name (nullptr)
3234 mwSize nzmax, mxComplexity flag)
3235 : m_rep (create_rep (interleaved, id, m, n, nzmax, flag)), m_name (nullptr)
3241 : m_rep (new
mxArray_struct (interleaved, ndims, dims, num_keys, keys)),
3253 : m_rep (new
mxArray_struct (interleaved, m, n, num_keys, keys)),
3258 : m_rep (new
mxArray_cell (interleaved, ndims, dims)), m_name (nullptr)
3262 : m_rep (new
mxArray_cell (interleaved, dv)), m_name (nullptr)
3266 : m_rep (new
mxArray_cell (interleaved, m, n)), m_name (nullptr)
3307 const mwSize *dims, mxComplexity flag,
bool init)
3327 mxComplexity flag,
bool init)
3373 mwSize nzmax, mxComplexity flag)
3396 new_val->
m_rep =
nullptr;
3448 octave::tree_evaluator& tw
3455 std::string nm = fcn->
name ();
3473 error (
"%s: failed to allocate %zd bytes of memory",
3497 memset (ptr, 0, n*t);
3570 warning (
"mxFree: skipping memory not allocated by mxMalloc, mxCalloc, or mxRealloc");
3652 bool inlist =
false;
3664 warning (
"mex::free_value: skipping memory not allocated by mex::make_value");
3778template <
typename T>
3791 if (key_num >= 0 && key_num <
m_nfields)
3829 return std::numeric_limits<double>::epsilon ();
3990 mxClassID class_id, mxComplexity flag)
3997 mxClassID class_id, mxComplexity flag)
4018 mxClassID class_id, mxComplexity flag)
4026 mxClassID class_id, mxComplexity flag)
4034 mxClassID class_id, mxComplexity flag)
4086 int num_keys,
const char **keys)
4283 return ptr->
get_m ();
4289 return ptr->
get_n ();
4335 return static_cast<double *
> (ptr->
get_data ());
4348 return static_cast<mxChar *
> (ptr->
get_data ());
4356 return static_cast<mxLogical *
> (ptr->
get_data ());
4439mxComplexInt8 * mxGetComplexInt8s (
const mxArray *ptr)
4441 return ptr->get_complex_int8s ();
4444mxComplexInt16 * mxGetComplexInt16s (
const mxArray *ptr)
4446 return ptr->get_complex_int16s ();
4449mxComplexInt32 * mxGetComplexInt32s (
const mxArray *ptr)
4451 return ptr->get_complex_int32s ();
4454mxComplexInt64 * mxGetComplexInt64s (
const mxArray *ptr)
4456 return ptr->get_complex_int64s ();
4459mxComplexUint8 * mxGetComplexUint8s (
const mxArray *ptr)
4461 return ptr->get_complex_uint8s ();
4464mxComplexUint16 * mxGetComplexUint16s (
const mxArray *ptr)
4466 return ptr->get_complex_uint16s ();
4469mxComplexUint32 * mxGetComplexUint32s (
const mxArray *ptr)
4471 return ptr->get_complex_uint32s ();
4474mxComplexUint64 * mxGetComplexUint64s (
const mxArray *ptr)
4476 return ptr->get_complex_uint64s ();
4555int mxSetComplexInt8s (
mxArray *ptr, mxComplexInt8 *data)
4560int mxSetComplexInt16s (
mxArray *ptr, mxComplexInt16 *data)
4565int mxSetComplexInt32s (
mxArray *ptr, mxComplexInt32 *data)
4570int mxSetComplexInt64s (
mxArray *ptr, mxComplexInt64 *data)
4575int mxSetComplexUint8s (
mxArray *ptr, mxComplexUint8 *data)
4580int mxSetComplexUint16s (
mxArray *ptr, mxComplexUint16 *data)
4585int mxSetComplexUint32s (
mxArray *ptr, mxComplexUint32 *data)
4590int mxSetComplexUint64s (
mxArray *ptr, mxComplexUint64 *data)
4629 const mxArray *property_value)
4631 ptr->
set_property (idx, property_name, property_value);
4786 volatile int nargout = nargout_arg;
4788 int nargin = args.
length ();
4790 for (
int i = 0; i < nargin; i++)
4793 int nout = (nargout == 0 ? 1 : nargout);
4795 for (
int i = 0; i < nout; i++)
4796 argout[i] =
nullptr;
4801 mex context (mex_fcn);
4803 for (
int i = 0; i < nargin; i++)
4814 F77_INT tmp_nargout = nargout;
4817 fcn (tmp_nargout, argout, tmp_nargin, argin);
4823 fcn (nargout, argout, nargin, argin);
4830 if (nargout == 0 && argout[0])
4842 for (
int i = 0; i < nargout; i++)
4867#if defined (OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR)
4875 upv (current_mx_memory_resource, &the_mx_preserving_memory_resource);
4879 for (
int i = 0; i < nargin; i++)
4887 mxArray *argin[],
const char *fname)
4893 bool execution_error =
false;
4899 octave::tree_evaluator& tw = interp.get_evaluator ();
4902 ([&tw] (
const std::list<octave::octave_lvalue> *lvl)
4904 tw.set_lvalue_list (lvl);
4905 }, tw.lvalue_list ());
4907 tw.set_lvalue_list (
nullptr);
4911 catch (
const octave::execution_exception&)
4919 interp.recover_from_exception ();
4921 execution_error =
true;
4932 int num_to_copy = retval.
length ();
4934 if (nargout < retval.
length ())
4935 num_to_copy = nargout;
4937 for (
int i = 0; i < num_to_copy; i++)
4946 while (num_to_copy < nargout)
4947 argout[num_to_copy++] =
nullptr;
4949 return execution_error ? 1 : 0;
4954 mxArray *argin[],
const char *fname)
4962 const char *field_names[] = {
"identifier",
"message",
"case",
"stack"};
4965 std::string msg =
"mexCallMATLABWithTrap: function call <"
4966 + std::string (fname) +
"> failed";
4991 bool execution_error =
false;
4997 ret = interp.eval_string (std::string (s),
false, parse_status, 0);
4999 catch (
const octave::execution_exception&)
5001 interp.recover_from_exception ();
5003 execution_error =
true;
5006 if (parse_status || execution_error)
5020 bool execution_error =
false;
5026 ret = interp.eval_string (std::string (s),
false, parse_status, 0);
5028 catch (
const octave::execution_exception&)
5030 interp.recover_from_exception ();
5032 execution_error =
true;
5035 if (parse_status || execution_error)
5037 const char *field_names[] = {
"identifier",
"message",
"case",
"stack"};
5040 std::string msg =
"mexEvalStringWithTrap: eval of <"
5041 + std::string (s) +
"> failed";
5057 if (s[
len - 1] ==
'\n')
5059 std::string s_tmp (s,
len - 1);
5076 if (fmt &&
strlen (fmt) > 0)
5081 sprintf (tmpfmt,
"%s: %s", fname, fmt);
5083 va_start (args, fmt);
5102 if (s[
len - 1] ==
'\n')
5104 std::string s_tmp (s,
len - 1);
5105 warning (
"%s\n", s_tmp.c_str ());
5124 if (fmt &&
strlen (fmt) > 0)
5129 sprintf (tmpfmt,
"%s: %s", fname, fmt);
5131 va_start (args, fmt);
5142 va_start (args, fmt);
5157 if (!
strcmp (space,
"global"))
5158 val = interp.global_varval (
name);
5165 bool caller = !
strcmp (space,
"caller");
5166 bool base = !
strcmp (space,
"base");
5175 octave::tree_evaluator& tw = interp.get_evaluator ();
5177 frame.
add (&octave::tree_evaluator::restore_frame, &tw,
5178 tw.current_call_stack_frame_number ());
5180 tw.goto_base_frame ();
5183 val = interp.varval (
name);
5186 mexErrMsgTxt (
"mexGetVariable: symbol table does not exist");
5214 if (
name[0] ==
'\0')
5222 if (!
strcmp (space,
"global"))
5224#if defined (OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR)
5232 upv (current_mx_memory_resource, &the_mx_preserving_memory_resource);
5243 bool caller = !
strcmp (space,
"caller");
5244 bool base = !
strcmp (space,
"base");
5253 octave::tree_evaluator& tw = interp.get_evaluator ();
5255 frame.
add (&octave::tree_evaluator::restore_frame, &tw,
5256 tw.current_call_stack_frame_number ());
5258 tw.goto_base_frame ();
5261#if defined (OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR)
5269 upv (current_mx_memory_resource,
5270 &the_mx_preserving_memory_resource);
5276 mexErrMsgTxt (
"mexPutVariable: symbol table does not exist");
5352 retval = interp.mislocked (fname);
5381#if defined (OCTAVE_HAVE_STD_PMR_POLYMORPHIC_ALLOCATOR)
5389 upv (current_mx_memory_resource, &the_mx_preserving_memory_resource);
5396 return (ret ? 0 : 1);
5414 octave::interpreter& interp
5417 interp.munlock (fname);
N Dimensional Array with copy-on-write semantics.
const T * data(void) const
Size of the specified dimension.
OCTARRAY_API T * fortran_vec(void)
Size of the specified dimension.
octave_idx_type * xridx(void)
octave_idx_type * xcidx(void)
Vector representing the dimensions (size) of an Array.
void resize(int n, int fill_value=0)
static const bool is_complex
std::set< void * > m_foreign_memlist
mex(octave_mex_function &f)
void unmark_array(mxArray *ptr)
octave_mex_function & m_curr_mex_fcn
mxArray * make_value(const octave_value &ov)
void * malloc(std::size_t n)
static std::set< void * > s_global_memlist
mxArray * mark_array(mxArray *ptr)
void * malloc_unmarked(std::size_t n)
mex & operator=(const mex &)=delete
void global_unmark(void *ptr)
bool free_value(mxArray *ptr)
std::set< mxArray * > m_arraylist
void * realloc(void *ptr, std::size_t n)
void global_mark(void *ptr)
std::set< void * > m_memlist
void mark_foreign(void *ptr)
octave_mex_function & current_mex_function(void) const
void * calloc(std::size_t n, std::size_t t)
const char * function_name(void) const
void * calloc_unmarked(std::size_t n, std::size_t t)
void unmark_foreign(void *ptr)
mxInt16 * get_int16s(void) const
mxArray_base_full & operator=(const mxArray_base_full &)
int set_complex_doubles(mxComplexDouble *d)
int set_uint16s(mxUint16 *d)
mxInt32 * get_int32s(void) const
mxArray_base_full(bool interleaved, mxClassID id, mwSize m, mwSize n, bool init=true)
mxArray_base_full(bool interleaved, mwSize m, const char **str)
void * get_data(void) const
int set_doubles(mxDouble *d)
int set_int32s(mxInt32 *d)
mxArray_base_full(bool interleaved, const char *str)
int set_complex_singles(mxComplexSingle *d)
mxInt8 * get_int8s(void) const
int set_uint64s(mxUint64 *d)
mxInt64 * get_int64s(void) const
char * array_to_string(void) const
int set_uint32s(mxUint32 *d)
mxComplexSingle * get_complex_singles(void) const
int set_int16s(mxInt16 *d)
mxArray_base_full(bool interleaved, mxClassID id, mxLogical val)
mxUint16 * get_uint16s(void) const
octave_value fp_to_ov(const dim_vector &dv) const
mxArray_base_full(bool interleaved, mxClassID id, double val)
octave_value as_octave_value(void) const
int set_int64s(mxInt64 *d)
mxComplexDouble * get_complex_doubles(void) const
mxUint64 * get_uint64s(void) const
int set_uint8s(mxUint8 *d)
mxDouble * get_doubles(void) const
int set_singles(mxSingle *d)
mxArray_base * dup(void) const
octave_value int_to_ov(const dim_vector &dv) const
double get_scalar(void) const
mxUint8 * get_uint8s(void) const
mxArray_base_full(const mxArray_base_full &val)
mxArray_base_full(bool interleaved, mxClassID id, const dim_vector &dv)
int get_string(char *buf, mwSize buflen) const
mxArray_base_full(bool interleaved, mxClassID id, mwSize ndims, const mwSize *dims, bool init=true)
mxUint32 * get_uint32s(void) const
mxSingle * get_singles(void) const
octave_value to_ov(const dim_vector &dv) const
int set_complex_doubles(mxComplexDouble *d)
int set_doubles(mxDouble *d)
void set_nzmax(mwSize nzmax)
mxComplexDouble * get_complex_doubles(void) const
mwSize get_nzmax(void) const
mxArray_base_sparse(const mxArray_base_sparse &val)
mxArray_base * dup(void) const
int is_sparse(void) const
mwIndex * get_ir(void) const
mxDouble * get_doubles(void) const
mwIndex * get_jc(void) const
void * get_data(void) const
~mxArray_base_sparse(void)
mxArray_base_sparse & operator=(const mxArray_base_sparse &)
mxArray_base_sparse(bool interleaved, mxClassID id, mwSize m, mwSize n, mwSize nzmax)
octave_value as_octave_value(void) const
OCTAVE_NORETURN void err_invalid_type(const char *op) const
OCTINTERP_API mxArray_base(bool interleaved)
virtual mxArray * mutate(void) const
virtual int is_logical_scalar(void) const
std::size_t get_numeric_element_size(std::size_t size) const
virtual bool is_octave_value(void) const
virtual octave_value as_octave_value(void) const =0
mxArray_cell & operator=(const mxArray_cell &)
mxArray_cell(bool interleaved, mwSize m, mwSize n)
mxArray_base * dup(void) const
void * get_data(void) const
mxArray_cell(const mxArray_cell &val)
mxArray * get_cell(mwIndex idx) const
void set_data(void *data)
void set_cell(mwIndex idx, mxArray *val)
mxArray_cell(bool interleaved, mwSize ndims, const mwSize *dims)
octave_value as_octave_value(void) const
mxArray_cell(bool interleaved, const dim_vector &dv)
mxArray_interleaved_full(const char *str)
mxArray_interleaved_full(mxClassID id, mxLogical val)
mxArray_interleaved_full(mxClassID id, mwSize m, mwSize n, mxComplexity flag=mxREAL, bool init=true)
int is_complex(void) const
mxArray_interleaved_full(const mxArray_interleaved_full &val)
void * get_imag_data(void) const
mxArray_interleaved_full(mxClassID id, double val)
mxArray_base * dup(void) const
mxArray_interleaved_full & operator=(const mxArray_interleaved_full &)
mxArray_interleaved_full(mwSize m, const char **str)
mxArray_interleaved_full(mxClassID id, mwSize ndims, const mwSize *dims, mxComplexity flag=mxREAL, bool init=true)
~mxArray_interleaved_full(void)=default
void set_imag_data(void *)
mxArray_interleaved_full(mxClassID id, const dim_vector &dv, mxComplexity flag=mxREAL)
void * get_imag_data(void) const
mxArray_interleaved_sparse(const mxArray_interleaved_sparse &val)
mxArray_base * dup(void) const
int is_complex(void) const
mxArray_interleaved_sparse & operator=(const mxArray_interleaved_sparse &)
mxArray_interleaved_sparse(mxClassID id, mwSize m, mwSize n, mwSize nzmax, mxComplexity flag=mxREAL)
void set_imag_data(void *)
~mxArray_interleaved_sparse(void)=default
void set_cell(mwIndex, mxArray *)
const char * get_class_name(void) const
void set_field_by_number(mwIndex, int, mxArray *)
int set_complex_singles(mxComplexSingle *)
mxUint8 * get_uint8s(void) const
int set_doubles(mxDouble *)
int add_field(const char *)
int set_uint16s(mxUint16 *)
mxClassID get_class_id(void) const
mwIndex * get_jc(void) const
bool is_scalar(void) const
mxArray * get_cell(mwIndex) const
mwIndex * get_ir(void) const
mxArray * get_field_by_number(mwIndex, int) const
int set_dimensions(mwSize *dims, mwSize ndims)
int set_int64s(mxInt64 *)
mxComplexSingle * get_complex_singles(void) const
int get_number_of_fields(void) const
mxComplexDouble * get_complex_doubles(void) const
mxInt8 * get_int8s(void) const
mwIndex calc_single_subscript(mwSize nsubs, mwIndex *subs) const
char * array_to_string(void) const
int is_numeric(void) const
mxArray_matlab(const mxArray_matlab &val)
int set_uint64s(mxUint64 *)
mxInt64 * get_int64s(void) const
int is_complex(void) const
mxUint32 * get_uint32s(void) const
mxArray_matlab(bool interleaved, mxClassID id=mxUNKNOWN_CLASS)
mxArray_matlab & operator=(const mxArray_matlab &)
int is_logical_scalar_true(void) const
mxUint64 * get_uint64s(void) const
const char * get_field_name_by_number(int) const
int is_double(void) const
int is_logical(void) const
int is_struct(void) const
int get_field_number(const char *) const
void * get_imag_data(void) const
mxDouble * get_doubles(void) const
mxUint16 * get_uint16s(void) const
int is_function_handle(void) const
mxArray_matlab(bool interleaved, mxClassID id, const dim_vector &dv)
int set_int16s(mxInt16 *)
mxArray_matlab(bool interleaved, mxClassID id, mwSize ndims, const mwSize *dims)
mxInt32 * get_int32s(void) const
int is_uint32(void) const
int is_single(void) const
void set_class_name(const char *name)
mwSize * get_dimensions(void) const
mwSize get_number_of_dimensions(void) const
int set_uint32s(mxUint32 *)
mwSize get_nzmax(void) const
mxInt16 * get_int16s(void) const
double get_scalar(void) const
int is_sparse(void) const
mxArray_matlab(bool interleaved, mxClassID id, mwSize m, mwSize n)
int is_uint64(void) const
int set_singles(mxSingle *)
void set_imag_data(void *)
int get_string(char *, mwSize) const
std::size_t get_element_size(void) const
int set_complex_doubles(mxComplexDouble *)
void * get_data(void) const
int is_uint16(void) const
int set_int32s(mxInt32 *)
mxSingle * get_singles(void) const
dim_vector dims_to_dim_vector(void) const
mwSize get_number_of_elements(void) const
int set_uint8s(mxUint8 *)
int is_sparse(void) const
int set_uint16s(mxUint16 *)
bool mutation_needed(void) const
int set_dimensions(mwSize *, mwSize)
mxArray_base * dup(void) const
T * get_data(mxClassID class_id, mxComplexity complexity) const
mxClassID get_class_id(void) const
int is_uint16(void) const
int add_field(const char *)
void * get_imag_data(void) const
octave_value as_octave_value(void) const
mxInt32 * get_int32s(void) const
mwSize get_number_of_elements(void) const
void * get_data(void) const
mxSingle * get_singles(void) const
int set_doubles(mxDouble *)
void set_cell(mwIndex, mxArray *)
const char * get_field_name_by_number(int) const
mxArray * mutate(void) const
mxArray_octave_value & operator=(const mxArray_octave_value &)=delete
int set_singles(mxSingle *)
int set_uint32s(mxUint32 *)
mxUint32 * get_uint32s(void) const
int is_logical(void) const
~mxArray_octave_value(void)
int set_int64s(mxInt64 *)
std::size_t get_element_size(void) const
mxArray * get_cell(mwIndex) const
mxArray_octave_value(const mxArray_octave_value &arg)
int is_uint64(void) const
int set_uint8s(mxUint8 *)
mxArray * get_field_by_number(mwIndex, int) const
mxUint16 * get_uint16s(void) const
mwIndex * get_ir(void) const
mwIndex * get_jc(void) const
mxUint64 * get_uint64s(void) const
mxComplexSingle * get_complex_singles(void) const
mwSize * get_dimensions(void) const
int set_uint64s(mxUint64 *)
int set_complex_doubles(mxComplexDouble *)
void set_class_name(const char *)
mxInt16 * get_int16s(void) const
int is_numeric(void) const
char * array_to_string(void) const
mxDouble * get_doubles(void) const
void set_imag_data(void *)
mxComplexDouble * get_complex_doubles(void) const
int get_field_number(const char *) const
void set_property(mwIndex idx, const char *pname, const mxArray *pval)
bool is_scalar(void) const
int get_number_of_fields(void) const
int set_int32s(mxInt32 *)
mwIndex calc_single_subscript(mwSize nsubs, mwIndex *subs) const
mxInt8 * get_int8s(void) const
bool is_octave_value(void) const
mxArray_octave_value(bool interleaved, const octave_value &ov)
mxArray * as_mxArray(void) const
mxUint8 * get_uint8s(void) const
int is_complex(void) const
int set_int16s(mxInt16 *)
mwSize get_nzmax(void) const
int is_double(void) const
void request_mutation(void) const
int is_uint32(void) const
mxInt64 * get_int64s(void) const
int is_single(void) const
int get_string(char *buf, mwSize buflen) const
int set_complex_singles(mxComplexSingle *)
double get_scalar(void) const
const char * get_class_name(void) const
mwSize get_number_of_dimensions(void) const
void set_field_by_number(mwIndex, int, mxArray *)
int is_logical_scalar_true(void) const
int is_function_handle(void) const
mxArray * get_property(mwIndex idx, const char *pname) const
int is_struct(void) const
mxInt16 * get_int16s(void) const
mxArray_separate_full(const mxArray_separate_full &val)
mxComplexInt64 * get_complex_int64s(void) const
mxArray_separate_full(const char *str)
int set_complex_uint32s(mxComplexUint32 *)
mxComplexUint16 * get_complex_uint16s(void) const
mxArray_separate_full(mxClassID id, mwSize m, mwSize n, mxComplexity flag=mxREAL, bool init=true)
int is_complex(void) const
mxInt64 * get_int64s(void) const
mxComplexInt32 * get_complex_int32s(void) const
void set_imag_data(void *pi)
mxDouble * get_doubles(void) const
mxUint16 * get_uint16s(void) const
mxComplexUint8 * get_complex_uint8s(void) const
int set_complex_int16s(mxComplexInt16 *)
mxInt32 * get_int32s(void) const
mxComplexInt16 * get_complex_int16s(void) const
int set_uint64s(mxUint64 *)
int set_int16s(mxInt16 *)
int set_int32s(mxInt32 *)
int set_uint8s(mxUint8 *)
mxArray_separate_full(mxClassID id, mwSize ndims, const mwSize *dims, mxComplexity flag=mxREAL, bool init=true)
mxArray_separate_full(mxClassID id, mxLogical val)
int set_complex_int32s(mxComplexInt32 *)
mxInt8 * get_int8s(void) const
int set_complex_uint64s(mxComplexUint64 *)
mxComplexInt8 * get_complex_int8s(void) const
octave_value as_octave_value(void) const
mxArray_separate_full & operator=(const mxArray_separate_full &)
int set_complex_int8s(mxComplexInt8 *)
int set_int64s(mxInt64 *)
~mxArray_separate_full(void)
int set_doubles(mxDouble *)
mxArray_base * dup(void) const
mxSingle * get_singles(void) const
mxUint64 * get_uint64s(void) const
int set_singles(mxSingle *)
octave_value to_ov(const dim_vector &dv) const
int set_uint32s(mxUint32 *)
int set_complex_int64s(mxComplexInt64 *)
int set_complex_doubles(mxComplexDouble *)
mxComplexUint64 * get_complex_uint64s(void) const
int set_complex_singles(mxComplexSingle *)
mxArray_separate_full(mxClassID id, const dim_vector &dv, mxComplexity flag=mxREAL)
mxArray_separate_full(mwSize m, const char **str)
mxComplexSingle * get_complex_singles(void) const
int set_complex_uint16s(mxComplexUint16 *)
mxComplexUint32 * get_complex_uint32s(void) const
void * get_imag_data(void) const
mxArray_separate_full(mxClassID id, double val)
int set_uint16s(mxUint16 *)
mxUint8 * get_uint8s(void) const
mxUint32 * get_uint32s(void) const
int set_complex_uint8s(mxComplexUint8 *)
mxComplexDouble * get_complex_doubles(void) const
void * get_imag_data(void) const
mxArray_separate_sparse & operator=(const mxArray_separate_sparse &)
mxComplexDouble * get_complex_doubles(void) const
mxDouble * get_doubles(void) const
void set_imag_data(void *pi)
int is_complex(void) const
int set_doubles(mxDouble *)
mxArray_separate_sparse(mxClassID id, mwSize m, mwSize n, mwSize nzmax, mxComplexity flag=mxREAL)
mxArray_separate_sparse(const mxArray_separate_sparse &val)
mxArray_base * dup(void) const
octave_value as_octave_value(void) const
int set_complex_doubles(mxComplexDouble *)
~mxArray_separate_sparse(void)
mxArray_struct(bool interleaved, mwSize ndims, const mwSize *dims, int num_keys, const char **keys)
mxArray_struct & operator=(const mxArray_struct &val)
int get_number_of_fields(void) const
octave_value as_octave_value(void) const
void * get_data(void) const
mxArray_struct(bool interleaved, const dim_vector &dv, int num_keys, const char **keys)
void remove_field(int key_num)
mxArray_struct(const mxArray_struct &val)
int get_field_number(const char *key) const
mxArray_struct(bool interleaved, mwSize m, mwSize n, int num_keys, const char **keys)
mxArray_base * dup(void) const
const char * get_field_name_by_number(int key_num) const
void set_data(void *data)
mxArray * get_field_by_number(mwIndex index, int key_num) const
int add_field(const char *key)
void init(const char **keys)
void set_field_by_number(mwIndex index, int key_num, mxArray *val)
mxArray * get_field_by_number(mwIndex index, int key_num) const
int set_uint8s(mxUint8 *data)
mxClassID get_class_id(void) const
int is_single(void) const
int set_complex_singles(mxComplexSingle *data)
mxUint8 * get_uint8s(void) const
mxUint32 * get_uint32s(void) const
mxSingle * get_singles(void) const
OCTINTERP_API void maybe_mutate(void) const
int set_uint32s(mxUint32 *data)
mxComplexDouble * get_complex_doubles(void) const
OCTINTERP_API void set_name(const char *name)
mxUint64 * get_uint64s(void) const
int is_logical_scalar_true(void) const
int is_uint32(void) const
mwIndex * get_jc(void) const
OCTINTERP_API ~mxArray(void)
void set_property(mwIndex idx, const char *pname, const mxArray *pval)
mxUint16 * get_uint16s(void) const
int set_singles(mxSingle *data)
mxArray * get_property(mwIndex idx, const char *pname) const
int set_uint16s(mxUint16 *data)
static OCTINTERP_API void * alloc(bool init, std::size_t n, std::size_t t)
int set_uint64s(mxUint64 *data)
mwIndex * get_ir(void) const
mxArray * dup(void) const
mwIndex calc_single_subscript(mwSize nsubs, mwIndex *subs) const
static char * strsave(const char *str)
const char * get_name(void) const
int is_function_handle(void) const
int set_dimensions(mwSize *dims_arg, mwSize ndims_arg)
int is_uint64(void) const
int is_struct(void) const
static OCTINTERP_API void * calloc(std::size_t n, std::size_t t)
OCTINTERP_API mxArray(bool interleaved, const octave_value &ov)
int set_complex_doubles(mxComplexDouble *data)
int get_field_number(const char *key) const
std::size_t get_element_size(void) const
int add_field(const char *key)
int get_number_of_fields(void) const
int is_sparse(void) const
void * get_data(void) const
int is_double(void) const
mwSize get_nzmax(void) const
static OCTINTERP_API octave_value as_octave_value(const mxArray *ptr, bool null_is_empty=true)
int set_int32s(mxInt32 *data)
bool is_scalar(void) const
int set_int64s(mxInt64 *data)
int set_doubles(mxDouble *data)
void set_nzmax(mwSize nzmax)
mxInt8 * get_int8s(void) const
int is_logical(void) const
const char * get_field_name_by_number(int key_num) const
double get_scalar(void) const
mwSize get_number_of_dimensions(void) const
int set_int16s(mxInt16 *data)
mwSize * get_dimensions(void) const
mxArray * get_cell(mwIndex idx) const
int is_numeric(void) const
mwSize get_number_of_elements(void) const
mxDouble * get_doubles(void) const
int get_string(char *buf, mwSize buflen) const
int is_class(const char *name_arg) const
int set_int8s(mxInt8 *data)
void set_class_name(const char *name_arg)
int is_complex(void) const
int is_uint16(void) const
void set_field_by_number(mwIndex index, int key_num, mxArray *val)
void set_cell(mwIndex idx, mxArray *val)
static OCTINTERP_API mxArray_base * create_rep(bool interleaved, const octave_value &ov)
int is_logical_scalar(void) const
static OCTINTERP_API void * malloc(std::size_t n)
OCTINTERP_API octave_value as_octave_value(void) const
void * get_imag_data(void) const
void set_imag_data(void *pi)
char * array_to_string(void) const
mxInt16 * get_int16s(void) const
void remove_field(int key_num)
mxComplexSingle * get_complex_singles(void) const
const char * get_class_name(void) const
mxInt64 * get_int64s(void) const
mxInt32 * get_int32s(void) const
void add(F &&fcn, Args &&... args)
octave_value get_property(octave_idx_type idx, const std::string &name) const
void set_property(octave_idx_type idx, const std::string &name, const octave_value &pval)
std::string name(void) const
void assign(const std::string &k, const Cell &val)
void atexit(void(*fcn)(void))
bool use_interleaved_complex(void) const
void * mex_fcn_ptr(void) const
void resize(octave_idx_type n, const octave_value &rfv=octave_value())
octave_idx_type length(void) const
bool is_classdef_object(void) const
OCTINTERP_API const void * mex_get_data(mxClassID class_id=mxUNKNOWN_CLASS, mxComplexity complexity=mxREAL) const
bool issparse(void) const
bool is_uint16_type(void) const
bool is_int8_type(void) const
octave_idx_type rows(void) const
bool isnumeric(void) const
octave_idx_type numel(void) const
const octave_idx_type * mex_get_ir(void) const
bool is_string(void) const
bool is_defined(void) const
charNDArray char_array_value(bool frc_str_conv=false) const
bool is_double_type(void) const
bool is_function_handle(void) const
std::string class_name(void) const
bool is_uint32_type(void) const
bool is_int64_type(void) const
const octave_idx_type * mex_get_jc(void) const
bool isstruct(void) const
OCTINTERP_API octave_classdef * classdef_object_value(bool silent=false) const
double scalar_value(bool frc_str_conv=false) const
octave_idx_type nfields(void) const
bool is_int32_type(void) const
bool is_uint64_type(void) const
octave_idx_type nzmax(void) const
bool is_int16_type(void) const
mxArray * as_mxArray(bool interleaved=false) const
bool is_range(void) const
bool is_single_type(void) const
bool is_uint8_type(void) const
bool iscomplex(void) const
bool islogical(void) const
dim_vector dims(void) const
void warning(const char *fmt,...)
void vwarning_with_id(const char *id, const char *fmt, va_list args)
void verror_with_id(const char *id, const char *fmt, va_list args)
void error(const char *fmt,...)
#define panic_impossible()
octave_f77_int_type F77_INT
bool set_property_in_handle(double handle, const std::string &property, const octave_value &arg, const std::string &func)
octave_value get_property_from_handle(double handle, const std::string &property, const std::string &func)
double lo_ieee_inf_value(void)
double lo_ieee_nan_value(void)
#define lo_ieee_isfinite(x)
F77_RET_T(F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL, F77_CONST_CHAR_ARG_DECL, const F77_INT &, const F77_INT &, const F77_INT &, F77_INT &, F77_INT &, F77_DBLE *, const F77_INT &, F77_DBLE *, const F77_INT &, F77_DBLE *, F77_DBLE *, F77_DBLE *, const F77_INT &, F77_DBLE *, const F77_INT &, F77_DBLE *, const F77_INT &, F77_DBLE *, F77_INT *, F77_INT &F77_CHAR_ARG_LEN_DECL F77_CHAR_ARG_LEN_DECL F77_CHAR_ARG_LEN_DECL)
F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE * d
F77_RET_T const F77_DBLE const F77_DBLE * f
static char * strsave(const char *s)
void mxSetIr(mxArray *ptr, mwIndex *ir)
OCTINTERP_API mxUint16 * mxGetUint16s(const mxArray *p)
static void * xmalloc(size_t n)
void mxSetCell(mxArray *ptr, mwIndex idx, mxArray *val)
bool mxIsUint16(const mxArray *ptr)
static T * maybe_unmark(T *ptr)
mxArray * mxDuplicateArray(const mxArray *ptr)
std::size_t mxGetM(const mxArray *ptr)
const char * mexFunctionName(void)
OCTINTERP_API int mxSetDoubles(mxArray *p, mxDouble *d)
static void maybe_disown_ptr(void *ptr)
OCTINTERP_API mxDouble * mxGetDoubles(const mxArray *p)
void mexWarnMsgIdAndTxt(const char *id, const char *fmt,...)
OCTINTERP_API int mxSetUint8s(mxArray *p, mxUint8 *d)
#define CONST_MUTATION_METHOD(RET_TYPE, FCN_NAME, ARG_LIST, RET_VAL)
mwIndex mxCalcSingleSubscript(const mxArray *ptr, mwSize nsubs, mwIndex *subs)
OCTINTERP_API int mxSetInt16s(mxArray *p, mxInt16 *d)
OCTINTERP_API mxInt64 * mxGetInt64s(const mxArray *p)
bool mxIsFunctionHandle(const mxArray *ptr)
bool mxIsStruct(const mxArray *ptr)
int mxGetFieldNumber(const mxArray *ptr, const char *key)
static mxArray * maybe_mark_array(mxArray *ptr)
static mxArray * maybe_unmark_array(mxArray *ptr)
void mexErrMsgTxt(const char *s)
void mxSetField(mxArray *ptr, mwIndex index, const char *key, mxArray *val)
OCTINTERP_API mxArray * mxCreateCellMatrix_interleaved(mwSize m, mwSize n)
void(* cmex_fptr)(int nlhs, mxArray **plhs, int nrhs, mxArray **prhs)
bool mxIsUint32(const mxArray *ptr)
void mxSetProperty(mxArray *ptr, mwIndex idx, const char *property_name, const mxArray *property_value)
OCTINTERP_API int mxSetComplexDoubles(mxArray *p, mxComplexDouble *d)
OCTINTERP_API mxUint64 * mxGetUint64s(const mxArray *p)
bool mxIsComplex(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateCharArray_interleaved(mwSize ndims, const mwSize *dims)
OCTINTERP_API mxComplexDouble * mxGetComplexDoubles(const mxArray *p)
OCTINTERP_API mxArray * mxCreateString(const char *str)
OCTINTERP_API mxArray * mxCreateSparseLogicalMatrix_interleaved(mwSize m, mwSize n, mwSize nzmax)
char * mxArrayToString(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateCellArray(mwSize ndims, const mwSize *dims)
OCTINTERP_API int mxSetUint32s(mxArray *p, mxUint32 *d)
OCTINTERP_API int mxSetInt8s(mxArray *p, mxInt8 *d)
OCTINTERP_API mxArray * mxCreateNumericMatrix(mwSize m, mwSize n, mxClassID class_id, mxComplexity flag)
mxArray * mexEvalStringWithTrap(const char *s)
int mexAtExit(void(*f)(void))
OCTINTERP_API int mxSetUint16s(mxArray *p, mxUint16 *d)
bool mxIsFinite(const double v)
OCTINTERP_API mxSingle * mxGetSingles(const mxArray *p)
bool mxIsScalar(const mxArray *ptr)
bool mxIsFromGlobalWS(const mxArray *)
const char * mxGetClassName(const mxArray *ptr)
void mxSetFieldByNumber(mxArray *ptr, mwIndex index, int key_num, mxArray *val)
bool mxIsLogicalScalarTrue(const mxArray *ptr)
OCTINTERP_API int mxSetInt32s(mxArray *p, mxInt32 *d)
OCTINTERP_API mxArray * mxCreateSparse(mwSize m, mwSize n, mwSize nzmax, mxComplexity flag)
static octave_value_list mx_to_ov_args(int nargin, mxArray *argin[])
OCTINTERP_API mxArray * mxCreateStructArray(mwSize ndims, const mwSize *dims, int num_keys, const char **keys)
OCTINTERP_API void * mxGetImagData(const mxArray *ptr)
mxClassID mxGetClassID(const mxArray *ptr)
bool mxIsLogical(const mxArray *ptr)
double * mxGetPr(const mxArray *ptr)
void * mxCalloc(std::size_t n, std::size_t size)
std::map< std::string, int > mex_lock_count
void mexWarnMsgTxt(const char *s)
OCTINTERP_API mxInt16 * mxGetInt16s(const mxArray *p)
mwIndex * mxGetIr(const mxArray *ptr)
void mxSetData(mxArray *ptr, void *pr)
mxLogical * mxGetLogicals(const mxArray *ptr)
OCTINTERP_API int mxSetUint64s(mxArray *p, mxUint64 *d)
OCTINTERP_API mxInt8 * mxGetInt8s(const mxArray *p)
bool mxIsInt64(const mxArray *ptr)
int mxSetDimensions(mxArray *ptr, const mwSize *dims, mwSize ndims)
std::size_t mxGetNumberOfElements(const mxArray *ptr)
octave_value_list call_mex(octave_mex_function &mex_fcn, const octave_value_list &args, int nargout_arg)
int mexPrintf(const char *fmt,...)
bool mxIsChar(const mxArray *ptr)
bool mxIsInf(const double v)
bool mxIsUint8(const mxArray *ptr)
void mxDestroyArray(mxArray *ptr)
void mxSetNzmax(mxArray *ptr, mwSize nzmax)
mxChar * mxGetChars(const mxArray *ptr)
bool mxIsSingle(const mxArray *ptr)
void mexErrMsgIdAndTxt(const char *id, const char *fmt,...)
F77_RET_T(* fmex_fptr)(F77_INT &nlhs, mxArray **plhs, F77_INT &nrhs, mxArray **prhs)
int mxAddField(mxArray *ptr, const char *key)
void mexMakeMemoryPersistent(void *ptr)
bool mxIsInt8(const mxArray *ptr)
OCTINTERP_API mxComplexSingle * mxGetComplexSingles(const mxArray *p)
std::size_t mxGetElementSize(const mxArray *ptr)
OCTINTERP_API void mxSetImagData(mxArray *ptr, void *pi)
OCTINTERP_API mxArray * mxCreateLogicalArray(mwSize ndims, const mwSize *dims)
int mexCallMATLAB(int nargout, mxArray *argout[], int nargin, mxArray *argin[], const char *fname)
bool mxIsNaN(const double v)
OCTINTERP_API mxArray * mxCreateCharArray(mwSize ndims, const mwSize *dims)
OCTINTERP_API mxUint8 * mxGetUint8s(const mxArray *p)
void mxSetPr(mxArray *ptr, double *pr)
bool mxIsClass(const mxArray *ptr, const char *name)
void * mxMalloc(std::size_t n)
OCTINTERP_API mxArray * mxCreateString_interleaved(const char *str)
OCTINTERP_API mxInt32 * mxGetInt32s(const mxArray *p)
OCTINTERP_API mxArray * mxCreateUninitNumericMatrix_interleaved(mwSize m, mwSize n, mxClassID class_id, mxComplexity flag)
mxArray * mexCallMATLABWithTrap(int nargout, mxArray *argout[], int nargin, mxArray *argin[], const char *fname)
static mwSize max_str_len(mwSize m, const char **str)
int mxGetNumberOfFields(const mxArray *ptr)
#define GET_DATA_METHOD(RT, FCN_NAME, ID, COMPLEXITY)
mxArray * mxGetProperty(const mxArray *ptr, mwIndex idx, const char *property_name)
OCTINTERP_API mxArray * mxCreateCellArray_interleaved(mwSize ndims, const mwSize *dims)
OCTINTERP_API mxArray * mxCreateNumericArray_interleaved(mwSize ndims, const mwSize *dims, mxClassID class_id, mxComplexity flag)
int mexPutVariable(const char *space, const char *name, const mxArray *ptr)
void mxSetN(mxArray *ptr, mwSize n)
OCTINTERP_API mxArray * mxCreateNumericArray(mwSize ndims, const mwSize *dims, mxClassID class_id, mxComplexity flag)
OCTINTERP_API int mxSetInt64s(mxArray *p, mxInt64 *d)
OCTINTERP_API mxArray * mxCreateSparseLogicalMatrix(mwSize m, mwSize n, mwSize nzmax)
bool mxIsInt32(const mxArray *ptr)
mxArray * mxGetFieldByNumber(const mxArray *ptr, mwIndex index, int key_num)
OCTINTERP_API double * mxGetPi(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateCharMatrixFromStrings_interleaved(mwSize m, const char **str)
void * mxRealloc(void *ptr, std::size_t size)
int mexIsGlobal(const mxArray *ptr)
const mwSize * mxGetDimensions(const mxArray *ptr)
void mxSetJc(mxArray *ptr, mwIndex *jc)
bool mxIsInt16(const mxArray *ptr)
OCTINTERP_API int mxSetComplexSingles(mxArray *p, mxComplexSingle *d)
OCTINTERP_API mxArray * mxCreateCellMatrix(mwSize m, mwSize n)
int mexEvalString(const char *s)
void mexSetTrapFlag(int flag)
mwSize mxGetNzmax(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateLogicalScalar(mxLogical val)
void mxSetClassName(mxArray *ptr, const char *name)
void * mxGetData(const mxArray *ptr)
OCTINTERP_API mxUint32 * mxGetUint32s(const mxArray *p)
bool mxIsNumeric(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateSparse_interleaved(mwSize m, mwSize n, mwSize nzmax, mxComplexity flag)
OCTINTERP_API mxArray * mxCreateDoubleMatrix(mwSize nr, mwSize nc, mxComplexity flag)
bool mxIsCell(const mxArray *ptr)
static void * xrealloc(void *ptr, size_t n)
void mexMakeArrayPersistent(mxArray *ptr)
mwIndex * mxGetJc(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateCharMatrixFromStrings(mwSize m, const char **str)
double mxGetScalar(const mxArray *ptr)
#define VOID_MUTATION_METHOD(FCN_NAME, ARG_LIST)
void mxRemoveField(mxArray *ptr, int key_num)
int mxGetString(const mxArray *ptr, char *buf, mwSize buflen)
OCTINTERP_API mxArray * mxCreateStructMatrix(mwSize rows, mwSize cols, int num_keys, const char **keys)
const mxArray * mexGet(double handle, const char *property)
mxArray * mxGetField(const mxArray *ptr, mwIndex index, const char *key)
bool mxIsLogicalScalar(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateDoubleScalar(double val)
OCTINTERP_API mxArray * mxCreateUninitNumericArray(mwSize ndims, const mwSize *dims, mxClassID class_id, mxComplexity flag)
static void xfree(void *ptr)
std::size_t mxGetN(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateNumericMatrix_interleaved(mwSize m, mwSize n, mxClassID class_id, mxComplexity flag)
mwSize mxGetNumberOfDimensions(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateUninitNumericMatrix(mwSize m, mwSize n, mxClassID class_id, mxComplexity flag)
OCTINTERP_API int mxMakeArrayComplex(mxArray *ptr)
int mexSet(double handle, const char *property, mxArray *val)
#define MUTATION_METHOD(RET_TYPE, FCN_NAME, ARG_LIST, RET_VAL)
OCTINTERP_API mxArray * mxCreateStructMatrix_interleaved(mwSize rows, mwSize cols, int num_keys, const char **keys)
bool mxIsEmpty(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateLogicalArray_interleaved(mwSize ndims, const mwSize *dims)
OCTINTERP_API mxArray * mxCreateLogicalMatrix_interleaved(mwSize m, mwSize n)
const mxArray * mexGetVariablePtr(const char *space, const char *name)
mxArray * mexGetVariable(const char *space, const char *name)
OCTINTERP_API int mxMakeArrayReal(mxArray *ptr)
OCTINTERP_API const mxArray * mexGet_interleaved(double handle, const char *property)
bool mxIsSparse(const mxArray *ptr)
bool mxIsUint64(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateDoubleScalar_interleaved(double val)
bool mxIsDouble(const mxArray *ptr)
OCTINTERP_API mxArray * mxCreateStructArray_interleaved(mwSize ndims, const mwSize *dims, int num_keys, const char **keys)
OCTINTERP_API mxArray * mxCreateLogicalScalar_interleaved(mxLogical val)
OCTINTERP_API void mxSetPi(mxArray *ptr, double *pi)
OCTINTERP_API mxArray * mxCreateUninitNumericArray_interleaved(mwSize ndims, const mwSize *dims, mxClassID class_id, mxComplexity flag)
mxArray * mxGetCell(const mxArray *ptr, mwIndex idx)
OCTINTERP_API int mxSetSingles(mxArray *p, mxSingle *d)
void mxSetM(mxArray *ptr, mwSize m)
OCTINTERP_API mxArray * mxCreateLogicalMatrix(mwSize m, mwSize n)
static mwIndex calc_single_subscript_internal(mwSize ndims, const mwSize *dims, mwSize nsubs, const mwIndex *subs)
const char * mxGetFieldNameByNumber(const mxArray *ptr, int key_num)
OCTINTERP_API mxArray * mxCreateDoubleMatrix_interleaved(mwSize nr, mwSize nc, mxComplexity flag)
static void * maybe_mark_foreign(void *ptr)
OCTAVE_API bool strcmp(const T &str_a, const T &str_b)
True if strings are the same.
OCTINTERP_API octave_value_list feval(const char *name, const octave_value_list &args=octave_value_list(), int nargout=0)
interpreter & __get_interpreter__(const std::string &who)
tree_evaluator & __get_evaluator__(const std::string &who)
std::complex< double > Complex
std::complex< float > FloatComplex
#define OCTAVE_LOCAL_BUFFER(T, buf, size)
T::size_type strlen(const typename T::value_type *str)
return octave_value(v1.char_array_value() . concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string()) ? '\'' :'"'))
std::size_t vformat(std::ostream &os, const char *fmt, va_list args)