Drexel dragonThe Math ForumDonate to the Math Forum



Search All of the Math Forum:

Views expressed in these public forums are not endorsed by Drexel University or The Math Forum.


Math Forum » Discussions » Software » comp.soft-sys.matlab

Topic: Pass structure data using mex
Replies: 2   Last Post: Dec 30, 2012 4:19 PM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View   Messages: [ Previous | Next ]
Bruno Luong

Posts: 8,571
Registered: 7/26/08
Re: Pass structure data using mex
Posted: Dec 29, 2012 3:55 AM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

You have to make deep copy of the field because it belongs to another variable.
Also you do not need to create the fields.

Bruno

#include "mex.h"
#include "matrix.h"

void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
{
const char **fnames;
int ifield, nfields;
mwSize dims[2]={1,1};
mwIndex nstruct=0;
mxArray *tmp_f1, *tmp_f2, *tmp_f3;
const int namedim[2]={1,1};

/* Check for proper number of arguments */
if (nrhs != 1) {
mexErrMsgTxt("One input arguments required.");
} else if (nlhs > 1) {
mexErrMsgTxt("Too many output arguments.");
} else if ((mxIsStruct(prhs[0]) != 1)){
mexErrMsgTxt("Input must be a structure matrix.");
}

nfields = mxGetNumberOfFields(prhs[0]);
fnames = (const char **)mxCalloc(nfields, sizeof(fnames));

for(ifield=0; ifield<nfields; ifield++)
{
fnames[ifield] = mxGetFieldNameByNumber(prhs[0],ifield);
}

plhs[0] = mxCreateStructArray(2, dims, nfields, fnames);

mxFree((void *)fnames);

tmp_f1 = mxDuplicateArray(mxGetFieldByNumber(prhs[0],nstruct,0));
tmp_f2 = mxDuplicateArray(mxGetFieldByNumber(prhs[0],nstruct,1));
tmp_f3 = mxDuplicateArray(mxGetFieldByNumber(prhs[0],nstruct,2));

mxSetFieldByNumber(plhs[0], nstruct, 0, tmp_f1);
mxSetFieldByNumber(plhs[0], nstruct, 1, tmp_f2);
mxSetFieldByNumber(plhs[0], nstruct, 2, tmp_f3);
}



Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© Drexel University 1994-2014. All Rights Reserved.
The Math Forum is a research and educational enterprise of the Drexel University School of Education.