28 namespace astrotypes {
30 template<
typename SliceType,
typename ExcludedDim, std::size_t RankT,
typename Dimension,
typename... Dimensions>
31 struct has_exact_dimensions<multiarray::ReducedRankSlice<SliceType, ExcludedDim, RankT>, Dimension, Dimensions...>
32 :
public std::is_same<typename multiarray::ReducedRankSlice<SliceType, ExcludedDim, RankT>::DimensionTuple, std::tuple<Dimension, Dimensions...>>::type
36 template<
typename SliceType,
typename ExcludedDim, std::size_t RankT,
typename Dimension,
typename... Dimensions,
template<
typename>
class SliceMixin>
37 struct has_exact_dimensions<SliceMixin<multiarray::ReducedRankSlice<SliceType, ExcludedDim, RankT>>, Dimension, Dimensions...>
38 :
public has_exact_dimensions<multiarray::ReducedRankSlice<SliceType, ExcludedDim, RankT>, Dimension, Dimensions...>::type
42 namespace multiarray {
44 template<
typename SliceType,
typename ExcludedDim, std::
size_t RankT>
45 template<
typename Dim>
46 typename std::enable_if<std::is_same<Dim, ExcludedDim>::value, std::size_t>::type
52 template<
typename SliceType,
typename ExcludedDim, std::
size_t RankT>
53 template<
typename Dim>
54 typename std::enable_if<!std::is_same<Dim, ExcludedDim>::value
58 static_assert(RankT == 0,
"not yet implemented");
59 return static_cast<BaseT&
>(*this)[dimension];
62 template<
typename SliceType,
typename ExcludedDim, std::
size_t RankT>
63 template<
typename Dim>
64 typename std::enable_if<!std::is_same<Dim, ExcludedDim>::value
68 static_assert(RankT == 0,
"not yet implemented");
69 return static_cast<BaseT const&
>(*this)[dimension];
72 template<
typename SliceType,
typename ExcludedDim, std::
size_t RankT>
75 static_assert(RankT == 0,
"not yet implemented");
76 return BaseT::impl_begin();
79 template<
typename SliceType,
typename ExcludedDim, std::
size_t RankT>
82 static_assert(RankT == 0,
"not yet implemented");
83 return BaseT::impl_begin();
86 template<
typename SliceType,
typename ExcludedDim, std::
size_t RankT>
89 static_assert(RankT == 0,
"not yet implemented");
90 return BaseT::impl_cbegin();
93 template<
typename SliceType,
typename ExcludedDim, std::
size_t RankT>
96 static_assert(RankT == 0,
"not yet implemented");
97 return BaseT::impl_end();
100 template<
typename SliceType,
typename ExcludedDim, std::
size_t RankT>
103 static_assert(RankT == 0,
"not yet implemented");
104 return BaseT::impl_end();
107 template<
typename SliceType,
typename ExcludedDim, std::
size_t RankT>
110 static_assert(RankT == 0,
"not yet implemented");
111 return BaseT::impl_cend();
115 template<
typename SliceType,
typename ExcludedDim>
116 template<
typename Dim>
117 typename std::enable_if<!has_type<typename ReducedRankSlice<SliceType, ExcludedDim, 1>::ExcludeTuple, Dim>::value
121 return *
static_cast<BaseT&
>(*this)[
dimension].begin();
124 template<
typename SliceType,
typename ExcludedDim>
125 template<
typename Dim>
126 typename std::enable_if<!has_type<typename ReducedRankSlice<SliceType, ExcludedDim, 1>::ExcludeTuple, Dim>::value
130 return *
static_cast<BaseT const&
>(*this)[
dimension].begin();
133 template<
typename SliceType,
typename ExcludedDim>
136 return BaseT::impl_begin();
139 template<
typename SliceType,
typename ExcludedDim>
142 return BaseT::impl_begin();
145 template<
typename SliceType,
typename ExcludedDim>
148 return BaseT::impl_cbegin();
151 template<
typename SliceType,
typename ExcludedDim>
154 return BaseT::impl_end();
157 template<
typename SliceType,
typename ExcludedDim>
160 return BaseT::impl_end();
163 template<
typename SliceType,
typename ExcludedDim>
166 return BaseT::impl_cend();
169 template<
typename SliceType,
typename ExcludedDim>
170 template<
typename Dim>
171 typename std::enable_if<std::is_same<Dim, ExcludedDim>::value, std::size_t>::type
A tagged dimensionIndex variable.
SliceIteratorHelper< ReducedRankSlice, typename SliceType::iterator >::type iterator
iterator begin()
iterator pointing to the first element in the slice
std::enable_if<!std::is_same< Dim, ExcludedDim >::value, ReducedRankSlice< typename SliceMixinRemover< typename SliceType::template OperatorSliceType< Dim >::type >::type, ExcludedDim > >::type operator[](DimensionIndex< Dim >)
return true if the Dimensions provided match exactly those of the structure T (including order) ...
const_iterator cbegin() const
static std::enable_if< std::is_same< Dim, ExcludedDim >::value, std::size_t >::type dimension()
the width of the slice in this dimesnion has been reduced to 1
iterator end()
iterator pointing to just after the last element
SliceIteratorHelper< ReducedRankSlice, typename SliceType::const_iterator >::type const_iterator
const_iterator cend() const