mexCallMATLAB in conjunction with OOP

1 view (last 30 days)
Yan Shou
Yan Shou on 30 Jul 2014
Commented: Yan Shou on 11 Aug 2014
Dear all,
I am working on some C codes that requires me to call matlab class objects using mexCallMATLAB, the codes runs and I can use the methods to return values, the problem I am currently experiencing is slow run time. To make the class methods to work with the C codes, I had to use mexCallMATLAB to construct the objects (due to the purpose of the program, I had to construct individual objects the same length as an input, so that each object deal with a scalar).
After the group of class objects are constructed, it it passed into another C function to be used to call the object methods using mexCallMATLAB again, with additional scalar inputs. I am able to destroy the inputs and outputs of mexCallMATLAB that are not class objects containing methods.
So my question is, is there anyway to improve my slow runtime? Am I doing the class construction the way it's supposed to? And how can I use mxDestroyArray (or other function?) to free the memory from the class objects?
Thanks for your attention and time,
best regards,
Yan
P.S. Here are parts of my codes:
/*-----------part to construct methods----------------*/
mxArray *initobjout[2], *estimclassout[1], *estimout[m];
for ( i=0; i < m; i++) {
initobjout[0] = mxCreateNumericMatrix(1, 1, mxDOUBLE_CLASS, mxREAL);
initobjout[1] = mxCreateNumericMatrix(1, 1, mxDOUBLE_CLASS, mxREAL);
*mxGetPr(initobjout[0]) = y[i] ;
*mxGetPr(initobjout[1]) = someparameter[0] ;
mexCallMATLAB(1, estimclassout, 2, initobjout, "SomeEstimOut");
// note: SomeEstimOut is a class object m-file
estimout[i] = estimclassout[0] ;
// mxDestroyArray(estimclassout[0]);
mxDestroyArray(initobjout[0]);
mxDestroyArray(initobjout[1]);
}
/*-----------After above part, estimout is passed into another C function to be used in the following part ----------------*/
mxArray *params[3], *xout[2];
double ph, pv;
// only included some variables' types
params[0] = *estimout;
params[1] = mxCreateNumericMatrix(1, 1, mxDOUBLE_CLASS, mxREAL);
params[2] = mxCreateNumericMatrix(1, 1, mxDOUBLE_CLASS, mxREAL);
ph = *w;
pv = *v;
*mxGetPr(params[1]) = ph;
*mxGetPr(params[2]) = pv;
mexCallMATLAB(2, xout, 3, params, "estim");
*zh = *mxGetPr(xout[0]) ;
*zv = *mxGetPr(xout[1]) ;
mxDestroyArray(xout[0]);
mxDestroyArray(xout[1]);
// mxDestroyArray(params[0]);
mxDestroyArray(params[1]);
mxDestroyArray(params[2]);
/*--------------------------------------------------*/

Answers (0)

Categories

Find more on Construct and Work with Object Arrays in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!