# HG changeset patch # User jwe # Date 1191422328 0 # Node ID 10c7a803b4093b3db1344455309561f1ea855a01 # Parent 6bbf56a9718a708b262ca057b601b88c9c9d47a7 [project @ 2007-10-03 14:38:48 by jwe] diff -r 6bbf56a9718a -r 10c7a803b409 src/ChangeLog --- a/src/ChangeLog Tue Oct 02 20:47:23 2007 +0000 +++ b/src/ChangeLog Wed Oct 03 14:38:48 2007 +0000 @@ -1,3 +1,12 @@ +2007-10-03 John W. Eaton + + * oct-map.cc (Octave_map::Octave_map (const dim_vector&, + const string_vector&)): Delete. + (Octave_map::Octave_map (const dim_vector&, const Cell&)): + New function. + * ov-struct.cc (Fstruct): Allow creation of empty struct arrays + with field names. + 2007-10-01 Shai Ayal * graphics.cc ((color_property::color_property (const diff -r 6bbf56a9718a -r 10c7a803b409 src/oct-map.cc --- a/src/oct-map.cc Tue Oct 02 20:47:23 2007 +0000 +++ b/src/oct-map.cc Wed Oct 03 14:38:48 2007 +0000 @@ -31,18 +31,22 @@ #include "oct-map.h" #include "utils.h" -Octave_map::Octave_map (const dim_vector& dv, - const string_vector& key_list_arg) +Octave_map::Octave_map (const dim_vector& dv, const Cell& keys) : map (), key_list (), dimensions (dv) { Cell c (dv); - for (octave_idx_type i = 0; i < key_list_arg.length (); i++) + if (keys.is_cellstr ()) { - std::string k = key_list_arg[i]; - map[k] = c; - key_list.push_back (k); + for (octave_idx_type i = 0; i < keys.numel (); i++) + { + std::string k = keys(i).string_value (); + map[k] = c; + key_list.push_back (k); + } } + else + error ("Octave_map: expecting keys to be cellstr"); } Cell& diff -r 6bbf56a9718a -r 10c7a803b409 src/oct-map.h --- a/src/oct-map.h Tue Oct 02 20:47:23 2007 +0000 +++ b/src/oct-map.h Wed Oct 03 14:38:48 2007 +0000 @@ -47,7 +47,7 @@ // Warning! You should always use at least two dimensions. Octave_map (const dim_vector& dv = dim_vector (0, 0), - const string_vector& key_list_arg = string_vector ()); + const Cell& keys = Cell ()); Octave_map (const std::string& k, const octave_value& value) : map (), key_list (), dimensions (1, 1) diff -r 6bbf56a9718a -r 10c7a803b409 src/ov-struct.cc --- a/src/ov-struct.cc Tue Oct 02 20:47:23 2007 +0000 +++ b/src/ov-struct.cc Wed Oct 03 14:38:48 2007 +0000 @@ -560,7 +560,7 @@ array with the specified field names.\n\ @end deftypefn") { - octave_value_list retval; + octave_value retval; int nargin = args.length (); @@ -572,8 +572,23 @@ // Note that struct () creates a 1x1 struct with no fields for // compatibility with Matlab. - if (nargin == 1 && args(0).is_empty () && args(0).is_real_matrix ()) - return octave_value (Octave_map (args(0).dims ())); + if ((nargin == 1 || nargin == 2) + && args(0).is_empty () && args(0).is_real_matrix ()) + { + Cell fields; + + if (nargin == 2) + { + if (args(1).is_cellstr ()) + retval = Octave_map (args(0).dims (), args(1).cell_value ()); + else + error ("struct: expecting cell array of field names as second argument"); + } + else + retval = Octave_map (args(0).dims ()); + + return retval; + } // Check for "field", VALUE pairs. @@ -658,7 +673,7 @@ if (error_state) return retval; } - + return octave_value (map); }