A.1.4 Cell Arrays in Oct-Files

Octave’s cell type is also available from within oct-files. A cell array is just an Array of octave_values, and thus each element of the cell array can be treated like any other octave_value. A simple example is

#include <octave/oct.h>
#include <octave/Cell.h>

DEFUN_DLD (celldemo, args, , "Cell Demo")
  if (args.length () != 1)
    print_usage ();

  Cell c = args(0).cell_value ();

  octave_value_list retval;
  retval.resize (c.numel ());    // faster code by pre-declaring size

  for (octave_idx_type i = 0; i < c.numel (); i++)
      retval(i) = c(i);          // using operator syntax
      //retval(i) = c.elem (i);  // using method syntax

  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 the example extracts the octave_values one by one from the cell array and returns them as individual output arguments. For example:

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

   1   2

b3 = test