changeset 23679:ece6f43304e5

new function to convert dim_vector to Array<octave_idx_type> * dim-vector.h, dim-vector.cc (dim_vector::as_array): New function. * oct-refcount.h (refcount::value): New function.
author John W. Eaton <jwe@octave.org>
date Thu, 22 Jun 2017 15:20:46 -0400
parents dcba41788495
children ef71711f6d64
files liboctave/array/dim-vector.cc liboctave/array/dim-vector.h liboctave/util/oct-refcount.h
diffstat 3 files changed, 24 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/array/dim-vector.cc	Thu Jun 22 15:10:57 2017 -0400
+++ b/liboctave/array/dim-vector.cc	Thu Jun 22 15:20:46 2017 -0400
@@ -29,6 +29,7 @@
 #include <new>
 #include <sstream>
 
+#include "Array.h"
 #include "dim-vector.h"
 
 octave_idx_type *
@@ -309,3 +310,16 @@
       return retval;
     }
 }
+
+Array<octave_idx_type>
+dim_vector::as_array (void) const
+{
+  octave_idx_type nd = ndims ();
+
+  Array<octave_idx_type> retval (dim_vector (1, nd));
+
+  for (octave_idx_type i = 0; i < nd; i++)
+    retval(i) = elem (i);
+
+  return retval;
+}
--- a/liboctave/array/dim-vector.h	Thu Jun 22 15:10:57 2017 -0400
+++ b/liboctave/array/dim-vector.h	Thu Jun 22 15:20:46 2017 -0400
@@ -34,6 +34,8 @@
 
 #include "oct-refcount.h"
 
+template <typename T> class Array;
+
 //! Vector representing the dimensions (size) of an Array.
 /*!
   A dim_vector is used to represent dimensions of an Array.  It is used
@@ -548,6 +550,8 @@
   }
 
   friend bool operator == (const dim_vector& a, const dim_vector& b);
+
+  Array<octave_idx_type> as_array (void) const;
 };
 
 inline bool
--- a/liboctave/util/oct-refcount.h	Thu Jun 22 15:10:57 2017 -0400
+++ b/liboctave/util/oct-refcount.h	Thu Jun 22 15:20:46 2017 -0400
@@ -101,9 +101,14 @@
       return OCTAVE_ATOMIC_POST_DECREMENT (&count);
     }
 
+    count_type value (void) const
+    {
+      return static_cast<count_type const volatile&> (count);
+    }
+
     operator count_type (void) const
     {
-      return static_cast<count_type const volatile&> (count);
+      return value ();
     }
 
     count_type * get (void)