diff liboctave/Array.h @ 9812:f80c566bc751

improve unary mapper system
author Jaroslav Hajek <highegg@gmail.com>
date Thu, 12 Nov 2009 15:47:58 +0100
parents ef4c4186cb47
children c0b54271904b
line wrap: on
line diff
--- a/liboctave/Array.h	Wed Nov 11 17:43:45 2009 -0800
+++ b/liboctave/Array.h	Thu Nov 12 15:47:58 2009 +0100
@@ -666,16 +666,36 @@
     Array<U> result (dims ());
     U *p = result.fortran_vec ();
 
-    for (octave_idx_type i = 0; i < len; i++)
+    octave_idx_type i;
+    for (i = 0; i < len - 3; i += 4)
       {
 	OCTAVE_QUIT;
 
-	p[i] = fcn (m[i]);
+        p[i] = fcn (m[i]);
+        p[i+1] = fcn (m[i+1]);
+        p[i+2] = fcn (m[i+2]);
+        p[i+3] = fcn (m[i+3]);
       }
 
+    OCTAVE_QUIT;
+
+    for (; i < len; i++)
+      p[i] = fcn (m[i]);
+
     return result;
   }
 
+  // Overloads for function references.
+  template <class U>
+  Array<U>
+  map (U (&fcn) (T)) const
+  { return map<U, U (&) (T)> (fcn); }
+
+  template <class U>
+  Array<U>
+  map (U (&fcn) (const T&)) const
+  { return map<U, U (&) (const T&)> (fcn); }
+
   template <class U> friend class Array;
 
 private: