diff liboctave/Array.cc @ 9878:ead4f9c82a9a

implement Array<T>::nnz
author Jaroslav Hajek <highegg@gmail.com>
date Fri, 27 Nov 2009 09:10:21 +0100
parents c0b54271904b
children cddd5c3d5f04
line wrap: on
line diff
--- a/liboctave/Array.cc
+++ b/liboctave/Array.cc
@@ -2425,6 +2425,20 @@
 }
 
 template <class T>
+octave_idx_type 
+Array<T>::nnz (void) const
+{
+  const T *src = data ();
+  octave_idx_type nel = nelem (), retval = 0;
+  const T zero = T ();
+  for (octave_idx_type i = 0; i < nel; i++)
+    if (src[i] != zero)
+      retval++;
+
+  return retval;
+}
+
+template <class T>
 Array<octave_idx_type> 
 Array<T>::find (octave_idx_type n, bool backward) const
 {
@@ -2693,6 +2707,10 @@
 template <> Array<bool>  \
 Array<T>::lookupb (const Array<T>&, sortmode) const \
 { return Array<bool> (); } \
+ \
+template <> octave_idx_type \
+Array<T>::nnz (void) const\
+{ return 0; } \
 template <> Array<octave_idx_type> \
 Array<T>::find (octave_idx_type, bool) const\
 { return Array<octave_idx_type> (); } \