Mercurial > hg > octave-nkf
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 +++ b/liboctave/Array.h @@ -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: