10#ifndef Shards_SimpleArrayOps_hpp
11#define Shards_SimpleArrayOps_hpp
28template<
unsigned n ,
unsigned i = 0 >
30 enum { N =
n , I =
i };
48template<
unsigned n ,
unsigned i = 0 >
50 enum { N =
n , I =
i };
68template<
unsigned n ,
unsigned i = 0 >
70 enum { N =
n , I =
i };
82template<
unsigned n ,
unsigned i = 0 >
84 enum { N =
n , I =
i };
97template<
unsigned n ,
unsigned i = 0 >
99 enum { N =
n , I =
i };
112template<
unsigned n ,
unsigned i = 0 >
114 enum { N =
n , I =
i };
127template<
unsigned n ,
unsigned i = 0 >
129 enum { N =
n , I =
i };
142template<
unsigned n ,
unsigned i = 0 >
144 enum { N =
n , I =
i };
157template<
unsigned n ,
unsigned i = 0 >
159 enum { N =
n , I =
i };
163 inline static bool equal(
const T *
const x ,
const T *
const y )
173 inline static bool less(
const T *
const x ,
const T *
const y )
187 inline static bool greater(
const T *
const x ,
const T *
const y )
206#ifndef DOXYGEN_COMPILE
212 template<
typename T>
inline Copy( T *
const ,
const T *
const ) {}
213 template<
typename T>
inline Copy( T *
const ,
const T ) {}
220 template<
typename T>
inline Sum( T *
const ,
const T *
const ) {}
221 template<
typename T>
inline Sum( T *
const ,
const T ,
const T *
const ) {}
228 template<
typename T>
inline Prod( T *
const ,
const T *
const ) {}
235 template<
typename T>
inline Max( T *
const ,
const T *
const ) {}
242 template<
typename T>
inline Min( T *
const ,
const T *
const ) {}
249 template<
typename T>
inline BitOr( T *
const ,
const T *
const ) {}
256 template<
typename T>
inline BitAnd( T *
const ,
const T *
const ) {}
260struct InnerProduct<0,i> {
264 inline InnerProduct( T & ,
const T *
const ,
const T *
const ) {}
273 inline static bool equal(
const T *
const ,
const T *
const )
277 inline static bool not_equal(
const T *
const ,
const T *
const )
281 inline static bool less(
const T *
const ,
const T *
const )
285 inline static bool less_equal(
const T *
const ,
const T *
const )
289 inline static bool greater(
const T *
const ,
const T *
const )
293 inline static bool greater_equal(
const T *
const ,
const T *
const )
The preferred multi-dimensional Array interface with compile-time user-defined dimension ordinate...
Bitwise-and into an array.
BitAnd(T *const dst, const T *const src)
dst[0..N-1] &= src[0..N-1]
Bitwise-or into an array.
BitOr(T *const dst, const T *const src)
dst[0..N-1] |= src[0..N-1]
Lexicographical comparison of two arrays.
static bool greater_equal(const T *const x, const T *const y)
First non-equal members satisfies x[k] >= y[k].
static bool equal(const T *const x, const T *const y)
All members are equal.
static bool not_equal(const T *const x, const T *const y)
All members are not equal.
static bool less(const T *const x, const T *const y)
First non-equal members satisfy x[k] < y[k].
static bool greater(const T *const x, const T *const y)
First non-equal members satisfies x[k] > y[k].
static bool less_equal(const T *const x, const T *const y)
First non-equal members satisfies x[k] <= y[k].
Copy(T *const dst, const T src)
dst[0..N-1] = src
Copy(T *const dst, const T *const src)
dst[0..N-1] = src[0..N-1]
Inner product of two arrays.
InnerProduct(T &value, const T *const x, const T *const y)
value += sum[ k = 0..N-1 ]( x[k] * y[k] )
Take maximum value of each member of two arrays.
Max(T *const dst, const T *const src)
dst[0..N-1] = max( dst[0..N-1] , src[0..N-1] )
Take minimum value of each member of two arrays.
Min(T *const dst, const T *const src)
dst[0..N-1] = min( dst[0..N-1] , src[0..N-1] )
Prod(T *const dst, const T *const src)
dst[0..N-1] *= src[0..N-1]
Sum(T *const dst, const T *const src)
dst[0..N-1] += src[0..N-1]
Sum(T *const dst, const T a, const T *const src)
dst[0..N-1] += a * src[0..N-1]