Mercurial > hg > octave-lyh
diff src/ov-struct.cc @ 5900:c20eb7330d13
[project @ 2006-07-22 08:31:16 by jwe]
author | jwe |
---|---|
date | Sat, 22 Jul 2006 08:31:17 +0000 |
parents | 84ca47e311b3 |
children | cdef72fcd206 |
line wrap: on
line diff
--- a/src/ov-struct.cc +++ b/src/ov-struct.cc @@ -1275,6 +1275,37 @@ #endif +mxArray * +octave_struct::as_mxArray (void) const +{ + int nf = nfields (); + string_vector kv = map_keys (); + const char **f = static_cast<const char **> (mxArray::malloc (nf * sizeof (const char *))); + for (int i = 0; i < nf; i++) + f[i] = mxArray::strsave (kv[i].c_str ()); + + mxArray *retval = new mxArray (dims (), nf, f); + + mxArray **elts = static_cast<mxArray **> (retval->get_data ()); + + int nel = numel (); + + int ntot = nf * nel; + + for (int i = 0; i < nf; i++) + { + Cell c = map.contents (kv[i]); + + const octave_value *p = c.data (); + + int k = 0; + for (int j = i; j < ntot; j += nf) + elts[j] = new mxArray (p[k++]); + } + + return retval; +} + /* ;;; Local Variables: *** ;;; mode: C++ ***