diff liboctave/MDiagArray2.h @ 8366:8b1a2555c4e2

implement diagonal matrix objects * * *
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 03 Dec 2008 13:32:57 +0100
parents 82be108cc558
children 445d27d79f4e
line wrap: on
line diff
--- a/liboctave/MDiagArray2.h
+++ b/liboctave/MDiagArray2.h
@@ -56,6 +56,9 @@
 
   MDiagArray2 (const DiagArray2<T>& a) : DiagArray2<T> (a) { }
 
+  template <class U>
+  MDiagArray2 (const DiagArray2<U>& a) : DiagArray2<T> (a) { }
+
   explicit MDiagArray2 (const Array<T>& a) : DiagArray2<T> (a) { }
 
   ~MDiagArray2 (void) { }
@@ -81,6 +84,23 @@
       return retval;
     }
 
+  octave_idx_type nnz (void) const
+    {
+      octave_idx_type retval = 0;
+
+      const T *d = this->Array<T>::data ();
+
+      octave_idx_type nel = this->Array<T>::numel ();
+
+      for (octave_idx_type i = 0; i < nel; i++)
+	{
+	  if (d[i] != T ())
+	    retval++;
+	}
+
+      return retval;
+    }
+
   MDiagArray2<T> transpose (void) const { return DiagArray2<T>::transpose (); }
   MDiagArray2<T> hermitian (T (*fcn) (const T&) = 0) const { return DiagArray2<T>::hermitian (fcn); }