46#ifndef Shards_SimpleArrayOps_hpp
47#define Shards_SimpleArrayOps_hpp
64template<
unsigned n ,
unsigned i = 0 >
66 enum { N =
n , I =
i };
84template<
unsigned n ,
unsigned i = 0 >
86 enum { N =
n , I =
i };
104template<
unsigned n ,
unsigned i = 0 >
106 enum { N =
n , I =
i };
118template<
unsigned n ,
unsigned i = 0 >
120 enum { N =
n , I =
i };
133template<
unsigned n ,
unsigned i = 0 >
135 enum { N =
n , I =
i };
148template<
unsigned n ,
unsigned i = 0 >
150 enum { N =
n , I =
i };
163template<
unsigned n ,
unsigned i = 0 >
165 enum { N =
n , I =
i };
178template<
unsigned n ,
unsigned i = 0 >
180 enum { N =
n , I =
i };
193template<
unsigned n ,
unsigned i = 0 >
195 enum { N =
n , I =
i };
199 inline static bool equal(
const T *
const x ,
const T *
const y )
209 inline static bool less(
const T *
const x ,
const T *
const y )
223 inline static bool greater(
const T *
const x ,
const T *
const y )
242#ifndef DOXYGEN_COMPILE
248 template<
typename T>
inline Copy( T *
const ,
const T *
const ) {}
249 template<
typename T>
inline Copy( T *
const ,
const T ) {}
256 template<
typename T>
inline Sum( T *
const ,
const T *
const ) {}
257 template<
typename T>
inline Sum( T *
const ,
const T ,
const T *
const ) {}
264 template<
typename T>
inline Prod( T *
const ,
const T *
const ) {}
271 template<
typename T>
inline Max( T *
const ,
const T *
const ) {}
278 template<
typename T>
inline Min( T *
const ,
const T *
const ) {}
285 template<
typename T>
inline BitOr( T *
const ,
const T *
const ) {}
292 template<
typename T>
inline BitAnd( T *
const ,
const T *
const ) {}
296struct InnerProduct<0,i> {
300 inline InnerProduct( T & ,
const T *
const ,
const T *
const ) {}
309 inline static bool equal(
const T *
const ,
const T *
const )
313 inline static bool not_equal(
const T *
const ,
const T *
const )
317 inline static bool less(
const T *
const ,
const T *
const )
321 inline static bool less_equal(
const T *
const ,
const T *
const )
325 inline static bool greater(
const T *
const ,
const T *
const )
329 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]