38template <
int num_dimensions,
typename T>
39inline BasicCoordinate<num_dimensions, int>
40get_min_indices_help(is_not_1d,
const Array<num_dimensions, T>& a)
42 if (a.get_min_index() <= a.get_max_index())
48 BasicCoordinate<num_dimensions, int> tmp(0);
54inline BasicCoordinate<1, int>
55get_min_indices_help(is_1d,
const Array<1, T>& a)
57 BasicCoordinate<1, int> result;
58 result[1] = a.get_min_index();
62template <
int num_dimensions2,
typename T>
64next_help(is_1d, BasicCoordinate<1, int>& index,
const Array<num_dimensions2, T>& a)
66 if (a.get_min_index() > a.get_max_index())
68 assert(index[1] >= a.get_min_index());
69 assert(index[1] <= a.get_max_index());
71 return index[1] <= a.get_max_index();
74template <
typename T,
int num_dimensions,
int num_dimensions2>
76next_help(is_not_1d, BasicCoordinate<num_dimensions, int>& index,
const Array<num_dimensions2, T>& a)
78 if (a.get_min_index() > a.get_max_index())
81 assert(index[num_dimensions] >=
get(a, upper_index).get_min_index());
82 assert(index[num_dimensions] <=
get(a, upper_index).get_max_index());
83 index[num_dimensions]++;
84 if (index[num_dimensions] <=
get(a, upper_index).get_max_index())
86 if (!
next(upper_index, a))
88 index =
join(upper_index,
get(a, upper_index).get_min_index());
98template <
int num_dimensions,
typename T>
99inline BasicCoordinate<num_dimensions, int>
105template <
int num_dimensions,
typename T,
int num_dimensions2>
112template <
int num_dimensions,
int num_dimensions2,
typename elemT>
113inline const Array<num_dimensions - num_dimensions2, elemT>&
119template <
int num_dimensions,
typename elemT>
125template <
int num_dimensions,
typename elemT>
126inline const Array<num_dimensions - 1, elemT>&
127get(
const Array<num_dimensions, elemT>& a,
const BasicCoordinate<1, int>& c)
This class defines multi-dimensional (numeric) arrays.
Definition Array.h:78
class BasicCoordinate<int num_dimensions, typename coordT> defines num_dimensions -dimensional coordi...
Definition BasicCoordinate.h:57
BasicCoordinate< num_dimensions+1, coordT > join(const coordT &a, const BasicCoordinate< num_dimensions, coordT > &c)
make a longer BasicCoordinate, by prepending c with the single coordT
Definition BasicCoordinate.inl:447
BasicCoordinate< num_dimensions - 1, coordT > cut_last_dimension(const BasicCoordinate< num_dimensions, coordT > &c)
make a shorter BasicCoordinate, by cutting the last element from c
Definition BasicCoordinate.inl:458
BasicCoordinate< num_dimensions - 1, coordT > cut_first_dimension(const BasicCoordinate< num_dimensions, coordT > &c)
make a shorter BasicCoordinate, by cutting the first element from c
Definition BasicCoordinate.inl:477
BasicCoordinate< num_dimensions, int > get_min_indices(const Array< num_dimensions, T > &a)
Get the first multi-dimensional index of the array.
Definition array_index_functions.inl:100
const Array< num_dimensions - num_dimensions2, elemT > & get(const Array< num_dimensions, elemT > &a, const BasicCoordinate< num_dimensions2, int > &c)
an alternative for array indexing using BasicCoordinate objects
Definition array_index_functions.inl:114
bool next(BasicCoordinate< num_dimensions, int > &indices, const Array< num_dimensions2, T > &a)
Given an index into an array, increment it to the next one.
Definition array_index_functions.inl:107
a templated class used to check if it's a 1D array or not This class only exists to allow a work-arou...
Definition test_if_1d.h:71
Classes for use in implementation of stir::Array, stir::BasicCoordinate etc to test if it's a 1D arra...