(octave.info)Cell Arrays with Mex-Files


Next: Structures with Mex-Files Prev: Character Strings in Mex-Files Up: Mex-Files
Enter node , (file) or (file)node

A.2.4 Cell Arrays with Mex-Files
--------------------------------

One can perform exactly the same operations on Cell arrays in mex-files
as in oct-files.  An example that duplicates the function of the
‘celldemo.cc’ oct-file in a mex-file is given by ‘mycell.c’ as shown
below.

     #include "mex.h"
     
     void
     mexFunction (int nlhs, mxArray *plhs[],
                  int nrhs, const mxArray *prhs[])
     {
       mwSize n;
       mwIndex i;
     
       if (nrhs != 1 || ! mxIsCell (prhs[0]))
         mexErrMsgTxt ("ARG1 must be a cell");
     
       n = mxGetNumberOfElements (prhs[0]);
       n = (n > nlhs ? nlhs : n);
     
       for (i = 0; i < n; i++)
         plhs[i] = mxDuplicateArray (mxGetCell (prhs[0], i));
     }

The output is identical to the oct-file version as well.

     [b1, b2, b3] = mycell ({1, [1, 2], "test"})
     ⇒
     b1 =  1
     b2 =

        1   2

     b3 = test

   Note in the example the use of the ‘mxDuplicateArray’ function.  This
is needed as the ‘mxArray’ pointer returned by ‘mxGetCell’ might be
deallocated.  The inverse function to ‘mxGetCell’, used for setting Cell
values, is ‘mxSetCell’ and is defined as

     void mxSetCell (mxArray *ptr, int idx, mxArray *val);

   Finally, to create a cell array or matrix, the appropriate functions
are

     mxArray *mxCreateCellArray (int ndims, const int *dims);
     mxArray *mxCreateCellMatrix (int m, int n);


automatically generated by info2www version 1.2.2.9