Next: , Previous: Character Strings in Oct-Files, Up: Oct-Files


A.1.4 Cell Arrays in Oct-Files

Octave's cell type is equally accessible within oct-files. A cell array is just an array of octave_values, and so each element of the cell array can then be treated just like any other octave_value. A simple example is

     /*
     
     Copyright (C) 2006, 2007 John W. Eaton
     
     This file is part of Octave.
     
     Octave is free software; you can redistribute it and/or 
     modify it under the terms of the GNU General Public License 
     as published by the Free Software Foundation; either
     version 3  of the License, or (at your option) any later 
     version.
     
     Octave is distributed in the hope that it will be useful, 
     but WITHOUT ANY WARRANTY; without even the implied warranty
     of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
     See the GNU General Public License for more details.
     
     You should have received a copy of the GNU General Public 
     License along with Octave; see the file COPYING.  If not,
     see <http://www.gnu.org/licenses/>.
     
     */
     
     #include <octave/oct.h>
     #include <octave/Cell.h>
     
     DEFUN_DLD (celldemo, args, , "Cell Demo") 
     {
       octave_value_list retval;
       int nargin = args.length ();
     
       if (nargin != 1)
         print_usage ();
       else
         {
           Cell c = args (0).cell_value ();
           if (! error_state)
             for (octave_idx_type i = 0; i < c.nelem (); i++)
               retval(i) = c.elem (i);
         }
       return retval;
     }

Note that cell arrays are used less often in standard oct-files and so the Cell.h header file must be explicitly included. The rest of this example extracts the octave_values one by one from the cell array and returns be as individual return arguments. For example consider

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