64 lines
1.6 KiB
C++
64 lines
1.6 KiB
C++
#include "ctmatutils.h"
|
|
#include "clib/ctfunc.h"
|
|
#include "clib/ct.h"
|
|
|
|
void funcmethods(int nlhs, mxArray* plhs[],
|
|
int nrhs, const mxArray* prhs[])
|
|
{
|
|
int job = getInt(prhs[1]);
|
|
int nn;
|
|
double* ptr = 0;
|
|
|
|
// constructor
|
|
if (job == 0) {
|
|
int type = getInt(prhs[2]);
|
|
int n = getInt(prhs[3]);
|
|
if (type < 20) {
|
|
ptr = mxGetPr(prhs[4]);
|
|
size_t msize = mxGetM(prhs[4]);
|
|
size_t nsize = mxGetN(prhs[4]);
|
|
size_t lenp = msize*nsize;
|
|
nn = func_new(type, n, lenp, ptr);
|
|
} else if (type < 45) {
|
|
int m = getInt(prhs[4]);
|
|
nn = func_new(type, n, m, ptr);
|
|
} else {
|
|
ptr = mxGetPr(prhs[4]);
|
|
nn = func_new(type, n, 0, ptr);
|
|
}
|
|
plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL);
|
|
double* h = mxGetPr(plhs[0]);
|
|
*h = double(nn);
|
|
if (nn < 0) {
|
|
reportError();
|
|
}
|
|
return;
|
|
}
|
|
|
|
else {
|
|
int nn = 0;
|
|
double t;
|
|
double v = 0.0;
|
|
int i = getInt(prhs[2]);
|
|
if (job == 1) {
|
|
nn = func_del(i);
|
|
if (nn < 0) {
|
|
reportError();
|
|
}
|
|
v = double(nn);
|
|
} else if (job == 2) {
|
|
t = getDouble(prhs[3]);
|
|
v = func_value(i, t);
|
|
if (v == Undef) {
|
|
reportError();
|
|
}
|
|
} else {
|
|
mexErrMsgTxt("unknown job parameter");
|
|
}
|
|
plhs[0] = mxCreateNumericMatrix(1,1,mxDOUBLE_CLASS,mxREAL);
|
|
double* h = mxGetPr(plhs[0]);
|
|
*h = v;
|
|
return;
|
|
}
|
|
}
|
|
|