User`s manual
Examples of C MEX-Files
2-19
mexErrMsgTxt("Inconsistent data type in above field!");
}
else if(!mxIsChar(tmp) && ((mxIsComplex(tmp) ||
mxGetNumberOfElements(tmp) != 1))) {
mexPrintf("%s%d\t%s%d\n",
"FIELD:", ifield+1, "STRUCT INDEX :", jstruct+1);
mexErrMsgTxt("Numeric data in above field "
"must be scalar and noncomplex!");
}
}
}
}
/* Allocate memory for storing pointers */
fnames = mxCalloc(nfields, sizeof(*fnames));
/* Get field name pointers */
for(ifield = 0; ifield < nfields; ifield++) {
fnames[ifield] = mxGetFieldNameByNumber(prhs[0],ifield);
}
/* Create a 1x1 struct matrix for output */
plhs[0] = mxCreateStructMatrix(1, 1, nfields, fnames);
mxFree(fnames);
ndim = mxGetNumberOfDimensions(prhs[0]);
dims = mxGetDimensions(prhs[0]);
for(ifield = 0; ifield < nfields; ifield++) {
/* Create cell/numeric array */
if(classIDflags[ifield] == mxCHAR_CLASS) {
fout = mxCreateCellArray(ndim, dims);
} else {
fout = mxCreateNumericArray(ndim, dims,
classIDflags[ifield], mxREAL);
pdata = mxGetData(fout);
}
/* Copy data from input structure array */
for(jstruct = 0; jstruct < NStructElems; jstruct++) {
tmp = mxGetFieldByNumber(prhs[0],jstruct,ifield);