changeset 15936:da4cd4ab36db classdef

Report correct size for object of classdef objects. * libinterp/octave-value/ov-classdef.h (cdef_object_rep::dims): New method. (cdef_object::dims): Likewise. (cdef_object_scalar::dims, cdef_object_array::dims): Likewise. (octave_classdef::dims): Use it. (octave_classdef::print_raw): Report array of objects as such.
author Michael Goffioul <michael.goffioul@gmail.com>
date Sat, 12 Jan 2013 22:41:37 -0500
parents 0cbac4d3a81c
children d19397deff43
files libinterp/octave-value/ov-classdef.h
diffstat 1 files changed, 14 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/octave-value/ov-classdef.h	Sat Jan 12 13:36:15 2013 -0500
+++ b/libinterp/octave-value/ov-classdef.h	Sat Jan 12 22:41:37 2013 -0500
@@ -165,6 +165,8 @@
         destroy ();
     }
 
+  virtual dim_vector dims (void) const { return dim_vector (); }
+
 protected:
   /* reference count */
   octave_refcount<octave_idx_type> refcount;
@@ -228,6 +230,8 @@
   cdef_object empty_clone (void) const
     { return cdef_object (rep->empty_clone ()); }
 
+  dim_vector dims (void) const { return rep->dims (); }
+
   cdef_object make_array (void) const
     { return cdef_object (rep->make_array ()); }
 
@@ -355,6 +359,8 @@
   cdef_object_rep* clone (void) const
     { return new cdef_object_array (*this); }
 
+  dim_vector dims (void) const { return array.dims (); }
+
   bool is_valid (void) const { return true; }
 
   bool is_array (void) const { return true; }
@@ -391,6 +397,8 @@
 
   ~cdef_object_scalar (void) { }
 
+  dim_vector dims (void) const { return dim_vector (1, 1); }
+
   void put (const std::string& pname, const octave_value& val)
     { map.assign (pname, val); }
 
@@ -1234,7 +1242,11 @@
 
   void print_raw(std::ostream& os, bool /* pr_as_read_syntax */ = false) const
     {
-      os << object.class_name () << " object";
+      if (object.is_array ())
+        os << "array (" << object.dims ().str () << ") of "
+          << object.class_name () << " objects";
+      else
+        os << object.class_name () << " object";
     }
 
   octave_value_list subsref (const std::string& type,
@@ -1258,7 +1270,7 @@
 
   string_vector map_keys (void) const { return object.map_keys (); }
 
-  dim_vector dims (void) const { return dim_vector (1, 1); }
+  dim_vector dims (void) const { return object.dims (); }
 
 private:
   cdef_object object;