57#ifndef __stir_ArrayFunction_H__
58#define __stir_ArrayFunction_H__
78template <
int num_dimensions,
class elemT>
79inline Array<num_dimensions, elemT>&
in_place_log(Array<num_dimensions, elemT>& v);
88template <
int num_dimensions,
class elemT>
89inline Array<num_dimensions, elemT>&
in_place_exp(Array<num_dimensions, elemT>& v);
102template <
int num_dimensions,
class elemT>
103inline Array<num_dimensions, elemT>&
in_place_abs(Array<num_dimensions, elemT>& v);
115template <
class T,
class FUNCTION>
146template <
int num_dim,
typename elemT,
typename FunctionObjectPtr>
158template <
int num_dim,
typename elemT,
typename FunctionObjectPtr>
175#if !defined(__GNUC__) && !defined(_MSC_VER)
176# define ActualFunctionObjectPtrIter VectorWithOffset<shared_ptr<ArrayFunctionObject<1, elemT>>>::const_iterator
185# define ActualFunctionObjectPtrIter shared_ptr<ArrayFunctionObject<1, elemT>> const*
203template <
int num_dim,
typename elemT,
typename FunctionObjectPtrIter>
205 FunctionObjectPtrIter start,
206 FunctionObjectPtrIter stop);
209template <
typename elemT,
typename FunctionObjectPtrIter>
228template <
int num_dim,
typename elemT,
typename FunctionObjectPtrIter>
230 const Array<num_dim, elemT>& in_array,
231 FunctionObjectPtrIter start,
232 FunctionObjectPtrIter stop);
242template <
int num_dim,
typename elemT>
244 const Array<num_dim, elemT>& in_array,
245 ActualFunctionObjectPtrIter start,
246 ActualFunctionObjectPtrIter stop);
252template <
typename elemT>
254 const Array<1, elemT>& in_array,
255 ActualFunctionObjectPtrIter start,
256 ActualFunctionObjectPtrIter stop);
258template <
typename elemT,
typename FunctionObjectPtrIter>
263 const Array<1, elemT>& in_array,
264 FunctionObjectPtrIter start,
265 FunctionObjectPtrIter stop);
267template <
int num_dim,
typename elemT>
268inline void transform_array_to_periodic_indices(Array<num_dim, elemT>& out_array,
const Array<num_dim, elemT>& in_array);
269template <
int num_dim,
typename elemT>
270inline void transform_array_from_periodic_indices(Array<num_dim, elemT>& out_array,
const Array<num_dim, elemT>& in_array);
272template <
typename InputIt,
typename elemT>
273inline void find_unique_values(std::set<elemT>& values, InputIt begin, InputIt end);
290#undef ActualFunctionObjectPtrIter
Declaration of class stir::ArrayFunctionObject.
Implementations for ArrayFunction.h.
defines the stir::Array class for multi-dimensional (numeric) arrays
Array< 1, elemT > & in_place_abs(Array< 1, elemT > &v)
Replace elements by their absolute value, 1D version.
Definition ArrayFunction.inl:83
void in_place_apply_array_function_on_1st_index(Array< num_dim, elemT > &array, FunctionObjectPtr f)
Apply a function object on all possible 1d arrays extracted by keeping all indices fixed,...
Definition ArrayFunction.inl:116
T & in_place_apply_function(T &v, FUNCTION f)
apply any function(object) to each element of the multi-dimensional array
Definition ArrayFunction.inl:102
void apply_array_function_on_1st_index(Array< num_dim, elemT > &out_array, const Array< num_dim, elemT > &in_array, FunctionObjectPtr f)
apply any function(object) to each element of the multi-dimensional array, storing results in a diffe...
Definition ArrayFunction.inl:153
void in_place_apply_array_functions_on_each_index(Array< num_dim, elemT > &array, FunctionObjectPtrIter start, FunctionObjectPtrIter stop)
Apply a sequence of 1d array-function objects on every dimension of the input array.
Definition ArrayFunction.inl:198
void apply_array_functions_on_each_index(Array< num_dim, elemT > &out_array, const Array< num_dim, elemT > &in_array, FunctionObjectPtrIter start, FunctionObjectPtrIter stop)
Apply a sequence of 1d array-function objects on every dimension of the input array,...
Definition ArrayFunction.inl:221
Array< 1, elemT > & in_place_exp(Array< 1, elemT > &v)
Replace elements by their exponentiation, 1D version.
Definition ArrayFunction.inl:65
Array< 1, elemT > & in_place_log(Array< 1, elemT > &v)
Replace elements by their logarithm, 1D version.
Definition ArrayFunction.inl:47
Import of std::shared_ptr, std::dynamic_pointer_cast and std::static_pointer_cast into the stir names...