Mercurial > octave
changeset 22464:1d2960b5efe6
Add new MEX fcns mxCreateUninitNumericArray, mxCreateUninitNumericMatrix.
* NEWS: Announce new functions.
* mexproto.h: Add prototypes for new functions.
* mxarray.in.h: Add 5th input (bool init = true) to mxArray constructors that
map to mxCreateNumericArray and mxCreateNumericMatrix.
* mex.cc (mxCreateUninitNumericArray): New function. Calls
constructor mxArray (class_id, ndims, dims, flag, false), i.e., with
init = false.
* mex.cc (mxCreateUninitNumericArray): New function. Calls
constructor mxArray (class_id, m, n, flag, false), i.e., with init = false.
* mex.cc (mxArray::mxArray): Change constructors to pass init flag to constructors
for mxArray_number.
* mex.cc (mxArray_number): Change constructors to use init flag to decide
whether calloc (init = true) or malloc (init = false) is used to get memory
for the elements in the array.
author | Rik <rik@octave.org> |
---|---|
date | Sun, 11 Sep 2016 07:58:42 -0700 |
parents | 913e812ef11d |
children | 6149f6b34cbc |
files | NEWS libinterp/corefcn/mex.cc libinterp/corefcn/mexproto.h libinterp/corefcn/mxarray.in.h |
diffstat | 4 files changed, 56 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS Sat Sep 10 07:51:22 2016 -0700 +++ b/NEWS Sun Sep 11 07:58:42 2016 -0700 @@ -148,7 +148,7 @@ when the '-g' option is given to mex() or mkoctfile(). ** Other new MEX API functions include mexEvalStringWithTrap, - mxIsScalar. + mxIsScalar, mxCreateUninitNumericArray, mxCreateUninitNumericMatrix. ** Other new functions added in 4.2:
--- a/libinterp/corefcn/mex.cc Sat Sep 10 07:51:22 2016 -0700 +++ b/libinterp/corefcn/mex.cc Sun Sep 11 07:58:42 2016 -0700 @@ -998,12 +998,18 @@ public: mxArray_number (mxClassID id_arg, mwSize ndims_arg, const mwSize *dims_arg, - mxComplexity flag = mxREAL) + mxComplexity flag = mxREAL, bool init = true) : mxArray_matlab (id_arg, ndims_arg, dims_arg), - pr (mxArray::calloc (get_number_of_elements (), get_element_size ())), - pi (flag == mxCOMPLEX ? mxArray::calloc (get_number_of_elements (), - get_element_size ()) - : 0) { } + pr (init ? mxArray::calloc (get_number_of_elements (), + get_element_size ()) + : mxArray::malloc (get_number_of_elements () + * get_element_size ())), + pi (flag == mxCOMPLEX + ? (init ? mxArray::calloc (get_number_of_elements (), + get_element_size ()) + : mxArray::malloc (get_number_of_elements () + * get_element_size ())) + : 0) { } mxArray_number (mxClassID id_arg, const dim_vector& dv, mxComplexity flag = mxREAL) @@ -1011,15 +1017,23 @@ pr (mxArray::calloc (get_number_of_elements (), get_element_size ())), pi (flag == mxCOMPLEX ? mxArray::calloc (get_number_of_elements (), get_element_size ()) - : 0) { } + : 0) + { } mxArray_number (mxClassID id_arg, mwSize m, mwSize n, - mxComplexity flag = mxREAL) + mxComplexity flag = mxREAL, bool init = true) : mxArray_matlab (id_arg, m, n), - pr (mxArray::calloc (get_number_of_elements (), get_element_size ())), - pi (flag == mxCOMPLEX ? mxArray::calloc (get_number_of_elements (), - get_element_size ()) - : 0) { } + pr (init ? mxArray::calloc (get_number_of_elements (), + get_element_size ()) + : mxArray::malloc (get_number_of_elements () + * get_element_size ())), + pi (flag == mxCOMPLEX + ? (init ? mxArray::calloc (get_number_of_elements (), + get_element_size ()) + : mxArray::malloc (get_number_of_elements () + * get_element_size ())) + : 0) + { } mxArray_number (mxClassID id_arg, double val) : mxArray_matlab (id_arg, 1, 1), @@ -1907,14 +1921,15 @@ : rep (new mxArray_octave_value (ov)), name (0) { } mxArray::mxArray (mxClassID id, mwSize ndims, const mwSize *dims, - mxComplexity flag) - : rep (new mxArray_number (id, ndims, dims, flag)), name (0) { } + mxComplexity flag, bool init) + : rep (new mxArray_number (id, ndims, dims, flag, init)), name (0) { } mxArray::mxArray (mxClassID id, const dim_vector& dv, mxComplexity flag) : rep (new mxArray_number (id, dv, flag)), name (0) { } -mxArray::mxArray (mxClassID id, mwSize m, mwSize n, mxComplexity flag) - : rep (new mxArray_number (id, m, n, flag)), name (0) { } +mxArray::mxArray (mxClassID id, mwSize m, mwSize n, + mxComplexity flag, bool init) + : rep (new mxArray_number (id, m, n, flag, init)), name (0) { } mxArray::mxArray (mxClassID id, double val) : rep (new mxArray_number (id, val)), name (0) { } @@ -2520,6 +2535,20 @@ } mxArray * +mxCreateUninitNumericArray (mwSize ndims, const mwSize *dims, + mxClassID class_id, mxComplexity flag) +{ + return maybe_mark_array (new mxArray (class_id, ndims, dims, flag, false)); +} + +mxArray * +mxCreateUninitNumericMatrix (mwSize m, mwSize n, mxClassID class_id, + mxComplexity flag) +{ + return maybe_mark_array (new mxArray (class_id, m, n, flag, false)); +} + +mxArray * mxCreateSparse (mwSize m, mwSize n, mwSize nzmax, mxComplexity flag) { return maybe_mark_array (new mxArray (mxDOUBLE_CLASS, m, n, nzmax, flag));
--- a/libinterp/corefcn/mexproto.h Sat Sep 10 07:51:22 2016 -0700 +++ b/libinterp/corefcn/mexproto.h Sun Sep 11 07:58:42 2016 -0700 @@ -160,6 +160,14 @@ extern OCTINTERP_API mxArray *mxCreateNumericMatrix (mwSize m, mwSize n, mxClassID class_id, mxComplexity flag); +extern OCTINTERP_API mxArray *mxCreateUninitNumericArray (mwSize ndims, + const mwSize *dims, + mxClassID class_id, + mxComplexity flag); +extern OCTINTERP_API mxArray *mxCreateUninitNumericMatrix (mwSize m, mwSize n, + mxClassID class_id, + mxComplexity flag); + extern OCTINTERP_API mxArray *mxCreateSparse (mwSize m, mwSize n, mwSize nzmax, mxComplexity flag); extern OCTINTERP_API mxArray *mxCreateSparseLogicalMatrix (mwSize m, mwSize n,
--- a/libinterp/corefcn/mxarray.in.h Sat Sep 10 07:51:22 2016 -0700 +++ b/libinterp/corefcn/mxarray.in.h Sun Sep 11 07:58:42 2016 -0700 @@ -310,11 +310,12 @@ mxArray (const octave_value& ov); mxArray (mxClassID id, mwSize ndims, const mwSize *dims, - mxComplexity flag = mxREAL); + mxComplexity flag = mxREAL, bool init = true); mxArray (mxClassID id, const dim_vector& dv, mxComplexity flag = mxREAL); - mxArray (mxClassID id, mwSize m, mwSize n, mxComplexity flag = mxREAL); + mxArray (mxClassID id, mwSize m, mwSize n, + mxComplexity flag = mxREAL, bool init = true); mxArray (mxClassID id, double val);