Next: Sparse Matrices in Oct-Files, Previous: Cell Arrays in Oct-Files, Up: Oct-Files [Contents][Index]
A structure in Octave is a map between a number of fields represented and their
values. The Standard Template Library map
class is used, with the pair
consisting of a std::string
and an Octave Cell
variable.
A simple example demonstrating the use of structures within oct-files is
#include <octave/oct.h> #include <octave/ov-struct.h> DEFUN_DLD (structdemo, args, , "Struct Demo") { if (args.length () != 2) print_usage (); if (! args(0).is_map ()) error ("structdemo: ARG1 must be a struct"); octave_scalar_map arg0 = args(0).scalar_map_value (); //octave_map arg0 = args(0).map_value (); if (! args(1).is_string ()) error ("structdemo: ARG2 must be a character string"); std::string arg1 = args(1).string_value (); octave_value tmp = arg0.contents (arg1); //octave_value tmp = arg0.contents (arg1)(0); if (! tmp.is_defined ()) error ("structdemo: struct does not have a field named '%s'\n", arg1.c_str ()); octave_scalar_map st; st.assign ("selected", tmp); return octave_value (st); }
An example of its use is
x.a = 1; x.b = "test"; x.c = [1, 2]; structdemo (x, "b") ⇒ selected = test
The example above specifically uses the octave_scalar_map
class which is
for representing a single struct. For structure arrays, the octave_map
class is used instead. The commented code shows how the demo could be modified
to handle a structure array. In that case, the contents
method returns
a Cell
which may have more than one element. Therefore, to obtain the
underlying octave_value
in the single struct example we would write
octave_value tmp = arg0.contents (arg1)(0);
where the trailing (0)
is the ()
operator on the Cell
object. If this were a true structure array with multiple elements we could
iterate over the elements using the ()
operator.
Structures are a relatively complex data container and there are more functions
available in oct-map.h which make coding with them easier than relying
on just contents
.
Next: Sparse Matrices in Oct-Files, Previous: Cell Arrays in Oct-Files, Up: Oct-Files [Contents][Index]