20 template<
class T,
unsigned Length>
28 #ifdef IPPL_USE_FUNKY_VEC_COPIES
35 #ifdef IPPL_USE_MEMBER_TEMPLATES
43 #ifdef IPPL_USE_MEMBER_TEMPLATES
51 static T dot(
const T*,
const T*);
58 #ifdef IPPL_USE_FUNKY_VEC_COPIES
76 template<
unsigned Length,
int Flag>
77 class DivideVecCopyTag {
82 DivideVecCopyTag(
const DivideVecCopyTag<Length,Flag> &) {}
83 DivideVecCopyTag<Length,Flag>&
84 operator=(
const DivideVecCopyTag<Length,Flag> &) {
return *
this; }
94 template<
class T1,
class T2,
unsigned L>
96 divide_vec_copy(T1 *p1, T2 *p2, DivideVecCopyTag<L,4> )
98 divide_vec_copy(p1, p2, DivideVecCopyTag< L/2 , (L>=8 ? 4 : L/2)>());
99 divide_vec_copy(p1+(L/2), p2+(L/2),DivideVecCopyTag<L-L/2,(L>=8?4:L-L/2)>());
105 template<
class T1,
class T2>
107 divide_vec_copy(T1 *p1, T2 *p2, DivideVecCopyTag<3,3> )
114 template<
class T1,
class T2>
116 divide_vec_copy(T1 *p1, T2 *p2, DivideVecCopyTag<2,2> )
122 template<
class T1,
class T2>
124 divide_vec_copy(T1 *p1, T2 *p2, DivideVecCopyTag<1,1> )
129 template<
class T1,
class T2>
131 divide_vec_copy(T1 *,T2 *, DivideVecCopyTag<0,0> )
139 template<
class T,
unsigned L>
143 divide_vec_copy( Ptr , v.
Ptr , DivideVecCopyTag<L,( L>=4 ? 4 : L)>() );
146 template<
class T,
unsigned L>
151 divide_vec_copy( Ptr , v.
Ptr , DivideVecCopyTag<L,( L>=4 ? 4 : L)>() );
155 #endif // IPPL_USE_FUNKY_VEC_COPIES
159 template<
class T,
unsigned Length>
167 template<
class T,
unsigned Length>
176 template<
class T,
unsigned Length>
192 template<
class T,
unsigned Length>
197 for (
int i=1; i<Length; ++i)
Message & getMessage(Message &m)
void getMessage_iter(Message &m, OutputIterator o)
T & operator[](unsigned d)
Message & get_iter(OutputIterator o)
Message & putMessage(Message &m)
const T & operator[](unsigned d) const
Message & put(const T &val)
static T dot(const T *, const T *)