# HG changeset patch # User jwe # Date 1091809098 0 # Node ID e63617efbd3f968e01313c673b24845f7ff518ed # Parent 4fc993a4e0726a90e634549537195c74bc62d43f [project @ 2004-08-06 16:18:17 by jwe] diff -r 4fc993a4e072 -r e63617efbd3f src/ChangeLog --- a/src/ChangeLog Fri Aug 06 03:17:13 2004 +0000 +++ b/src/ChangeLog Fri Aug 06 16:18:18 2004 +0000 @@ -1,3 +1,16 @@ +2004-08-06 David Bateman + + * OPERATORS/op-struct.cc: New file. + * ov-struct.h (octave_struct::resize (const dim_vector&)): + New function. + * oct-map.h (Octave_map::resize (const dim_vector&)): New function. + * ov-map.cc (Octave_map::reshape): + Correct return for same sized reshape. + (Octave_map::resize (const dim_vector&)): New function. + (concat (const Octave_map&, const Octave_map&, const Array&)): + Complete concatenation function. + * Makefile.in (OP_XSRC): Include op-struct.cc in the list. + 2004-08-05 John W. Eaton * pt-stmt.h (tree_statement::set_command, diff -r 4fc993a4e072 -r e63617efbd3f src/Makefile.in --- a/src/Makefile.in Fri Aug 06 03:17:13 2004 +0000 +++ b/src/Makefile.in Fri Aug 06 16:18:18 2004 +0000 @@ -112,7 +112,7 @@ op-fil-rec.cc op-fil-str.cc op-list.cc op-m-cm.cc \ op-m-cs.cc op-m-m.cc op-m-s.cc op-range.cc op-s-cm.cc \ op-s-cs.cc op-s-m.cc op-s-s.cc op-str-m.cc \ - op-str-s.cc op-str-str.cc op-streamoff.cc \ + op-str-s.cc op-str-str.cc op-streamoff.cc op-struct.cc \ $(INTTYPE_OP_XSRC) OP_SRC := $(addprefix OPERATORS/, $(OP_XSRC)) diff -r 4fc993a4e072 -r e63617efbd3f src/oct-map.cc --- a/src/oct-map.cc Fri Aug 06 03:17:13 2004 +0000 +++ b/src/oct-map.cc Fri Aug 06 16:18:18 2004 +0000 @@ -66,8 +66,10 @@ for (const_iterator p = begin (); p != end (); p++) retval.assign (key(p), contents(p).reshape (new_dims)); - dimensions = new_dims; + retval.dimensions = new_dims; } + else + retval = *this; return retval; } @@ -88,13 +90,51 @@ return retval; } +Octave_map +Octave_map::resize (const dim_vector& dv) const +{ + Octave_map retval; + + if (dv != dims ()) + { + for (const_iterator p = begin (); p != end (); p++) + { + Cell tmp = contents(p); + tmp.resize(dv); + retval.assign (key(p), tmp); + } + + retval.dimensions = dv; + } + else + retval = *this; + + + return retval; +} + Octave_map concat (const Octave_map& ra, const Octave_map& rb, const Array& ra_idx) { - // XXX FIXME XXX + if (ra.length() != rb.length()) + { + error ("field name mismatch in structure concatenation"); + return Octave_map (); + } + Octave_map retval; - //Octave_map retval (ra); - //::concat_ra (retval, rb, dim) + for (Octave_map::const_iterator pa = ra.begin (); pa != ra.end (); pa++) + { + Octave_map::const_iterator pb = rb.seek (ra.key(pa)); + if (pa == rb.end()) + { + error ("field name mismatch in structure concatenation"); + return Octave_map (); + } + + retval.assign (ra.key(pa), ra.contents(pa).insert(rb.contents(pb), + ra_idx)); + } return retval; } diff -r 4fc993a4e072 -r e63617efbd3f src/oct-map.h --- a/src/oct-map.h Fri Aug 06 03:17:13 2004 +0000 +++ b/src/oct-map.h Fri Aug 06 16:18:18 2004 +0000 @@ -116,6 +116,8 @@ Octave_map reshape (const dim_vector& new_dims) const; + Octave_map resize (const dim_vector& dv) const; + int numel (void) const; friend Octave_map concat (const Octave_map& ra, const Octave_map& rb, diff -r 4fc993a4e072 -r e63617efbd3f src/ov-struct.h --- a/src/ov-struct.h Fri Aug 06 03:17:13 2004 +0000 +++ b/src/ov-struct.h Fri Aug 06 16:18:18 2004 +0000 @@ -93,6 +93,9 @@ octave_value reshape (const dim_vector& new_dims) const { return map.reshape (new_dims); } + octave_value resize (const dim_vector& dv) const + { return map.resize (dv); } + bool is_defined (void) const { return true; } bool is_constant (void) const { return true; }