Cell Arrays in Oct-Files - Untitled
Description: Untitled

Next: Structures in Oct-Files, 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_value`s, and so each element of the cell array can then be treated just like any other `octave_value`. A simple example is

         /*

         Copyright (C) 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_value`s 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