3 #ifndef VISR_LIBEFL_VECTOR_FUNCTIONS_REFERENCE_IMPL_HPP_INCLUDED 4 #define VISR_LIBEFL_VECTOR_FUNCTIONS_REFERENCE_IMPL_HPP_INCLUDED 14 #pragma warning(disable: 4996) 32 std::fill( &dest[0], &dest[0] + numElements, static_cast<T>(0) );
40 std::fill( &dest[0], &dest[0] + numElements, value );
46 bool startInclusive,
bool endInclusive, std::size_t alignment )
50 std::size_t
const numSteps = numElements + 1 - (startInclusive ? 1 : 0) - (endInclusive ? 1 : 0);
51 T
const step = (endVal - startVal) / static_cast<T>(numSteps);
52 std::size_t calcIdx( startInclusive ? 0 : 1 );
53 std::generate( dest, dest + numElements, [&] {
return startVal +
static_cast<T
>(calcIdx++) * step; } );
58 ErrorCode vectorCopy( T
const *
const source, T *
const dest, std::size_t numElements, std::size_t alignment )
62 std::copy( &source[0], &source[0] + numElements, &dest[0] );
70 std::size_t numElements,
71 std::size_t alignment )
76 std::transform( op1, op1+numElements, op2, result, [&](T
const & a, T
const& b){
return a+b;} );
85 std::size_t numElements,
86 std::size_t alignment )
90 for( std::size_t idx( 0 ); idx < numElements; ++idx )
92 op2Result[idx] += op1[idx];
101 std::size_t numElements,
102 std::size_t alignment )
107 std::transform(op, op + numElements, result, [=](T
const & x){
return x + constantValue; });
115 std::size_t numElements,
116 std::size_t alignment )
119 std::for_each( opResult, opResult + numElements,
120 [=](T
const & x){
return x + constantValue;} );
126 T
const *
const minuend,
128 std::size_t numElements,
129 std::size_t alignment )
135 std::transform( subtrahend, subtrahend + numElements, minuend, result, [=]( T x, T y ) {
return x + y; } );
141 T *
const subtrahendResult,
142 std::size_t numElements,
143 std::size_t alignment )
147 for( std::size_t idx( 0 ); idx < numElements; ++idx )
149 subtrahendResult[idx] -= minuend[idx];
156 T
const *
const subtrahend,
158 std::size_t numElements,
159 std::size_t alignment )
163 std::transform( subtrahend, subtrahend + numElements, result, [=]( T x ) {
return x - constantMinuend; } );
169 T *
const subtrahendResult,
170 std::size_t numElements,
171 std::size_t alignment )
174 std::for_each( subtrahendResult, subtrahendResult + numElements, [=]( T& x ) { x -= constantMinuend; } );
180 T
const *
const factor2,
182 std::size_t numElements,
183 std::size_t alignment )
188 for( std::size_t idx( 0 ); idx < numElements; ++idx )
190 result[idx] = factor1[idx] * factor2[idx];
197 T *
const factor2Result,
198 std::size_t numElements,
199 std::size_t alignment )
203 for( std::size_t idx( 0 ); idx < numElements; ++idx )
205 factor2Result[idx] *= factor1[idx];
212 T
const *
const factor,
214 std::size_t numElements,
215 std::size_t alignment )
219 for( std::size_t idx( 0 ); idx < numElements; ++idx )
221 result[idx] = constantValue * factor[idx];
228 T *
const factorResult,
229 std::size_t numElements,
230 std::size_t alignment )
233 for( std::size_t idx( 0 ); idx < numElements; ++idx )
235 factorResult[idx] *= constantValue;
242 T
const *
const factor2,
243 T
const *
const addend,
245 std::size_t numElements,
246 std::size_t alignment )
252 for( std::size_t idx( 0 ); idx < numElements; ++idx )
254 result[idx] = addend[idx] + factor1[idx] * factor2[idx];
261 T
const *
const factor2,
262 T *
const accumulator,
263 std::size_t numElements,
264 std::size_t alignment )
269 for( std::size_t idx( 0 ); idx < numElements; ++idx )
271 accumulator[idx] += factor1[idx] * factor2[idx];
278 T
const *
const factor,
279 T
const *
const addend,
281 std::size_t numElements,
282 std::size_t alignment )
287 for( std::size_t idx( 0 ); idx < numElements; ++idx )
289 result[idx] = addend[idx] + constFactor * factor[idx];
296 T
const *
const factor,
297 T *
const accumulator,
298 std::size_t numElements,
299 std::size_t alignment )
303 for( std::size_t idx( 0 ); idx < numElements; ++idx )
305 accumulator[idx] += constFactor * factor[idx];
314 #endif // #ifndef VISR_LIBEFL_VECTOR_FUNCTIONS_REFERENCE_IMPL_HPP_INCLUDED template ErrorCode vectorMultiplyConstantAdd(float, float const *const, float const *const, float *const, std::size_t, std::size_t)
template ErrorCode vectorMultiplyAddInplace(float const *const, float const *const, float *const, std::size_t, std::size_t)
template ErrorCode vectorSubtract(float const *const, float const *const, float *const, std::size_t, std::size_t)
ErrorCode vectorAddConstantInplace(T constantValue, T *const opResult, std::size_t numElements, std::size_t alignment=0)
Definition: vector_functions_reference_impl.hpp:113
template ErrorCode vectorSubtractInplace(float const *const, float *const, std::size_t, std::size_t)
ErrorCode vectorAdd(T const *const op1, T const *const op2, T *const result, std::size_t numElements, std::size_t alignment=0)
Definition: vector_functions_reference_impl.hpp:67
template ErrorCode vectorMultiplyConstant(float, float const *const, float *const, std::size_t, std::size_t)
ErrorCode vectorZero(T *const dest, std::size_t numElements, std::size_t alignment)
Definition: vector_functions_reference_impl.hpp:29
bool checkAlignment(T const *ptr, std::size_t alignment)
Definition: alignment.hpp:45
template ErrorCode vectorSubtractConstant(float, float const *const, float *const, std::size_t, std::size_t)
Definition: error_codes.hpp:15
ErrorCode vectorAddConstant(T constantValue, T const *const op, T *const result, std::size_t numElements, std::size_t alignment=0)
Definition: vector_functions_reference_impl.hpp:98
template ErrorCode vectorMultiplyConstantAddInplace(float, float const *const, float *const, std::size_t, std::size_t)
Definition: error_codes.hpp:18
Definition: options.cpp:10
ErrorCode vectorFill(const T value, T *const dest, std::size_t numElements, std::size_t alignment)
Definition: vector_functions_reference_impl.hpp:37
ErrorCode vectorAddInplace(T const *const op1, T *const op2Result, std::size_t numElements, std::size_t alignment=0)
Definition: vector_functions_reference_impl.hpp:83
Definition: error_codes.hpp:16
template ErrorCode vectorRamp(float *const, std::size_t, float, float, bool, bool, std::size_t)
template ErrorCode vectorMultiplyAdd(float const *const, float const *const, float const *const, float *const, std::size_t, std::size_t)
template ErrorCode vectorSubConstantInplace(float, float *const, std::size_t, std::size_t)
template ErrorCode vectorMultiplyConstantInplace(float, float *const, std::size_t, std::size_t)
ErrorCode
Definition: error_codes.hpp:13
template ErrorCode vectorMultiplyInplace(float const *const, float *const, std::size_t, std::size_t)
template ErrorCode vectorMultiply(float const *const, float const *const, float *const, std::size_t, std::size_t)
ErrorCode vectorCopy(T const *const source, T *const dest, std::size_t numElements, std::size_t alignment)
Definition: vector_functions_reference_impl.hpp:58