29 namespace astrotypes {
32 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
33 struct has_dimension<
Slice<is_const, SliceTraitsT, SliceMixin, Dimension>, Dimension> :
public std::true_type
36 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension1,
typename Dimension>
37 struct has_dimension<
Slice<is_const, SliceTraitsT, SliceMixin, Dimension1>, Dimension> :
public has_dimension<typename Slice<is_const, SliceTraitsT, SliceMixin, Dimension1>::Parent, Dimension>
40 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
41 struct has_dimension<
Slice<is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...>, Dimension> :
public std::true_type
45 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension1,
typename Dimension,
typename... Dimensions>
46 struct has_dimension<
Slice<is_const, SliceTraitsT, SliceMixin, Dimension1, Dimensions...>, Dimension>
47 :
public has_dimension<Slice<is_const, SliceTraitsT, SliceMixin, Dimensions...>, Dimension>
51 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
52 struct has_dimension<SliceMixin<
Slice<is_const, SliceTraitsT, SliceMixin, Dimensions...>>, Dimension> :
public has_dimension<Slice<is_const, SliceTraitsT, SliceMixin, Dimensions...>, Dimension>
56 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename D1,
typename D2,
typename... Dimensions>
57 struct has_exact_dimensions<
Slice<is_const, SliceTraitsT, SliceMixin, D1, D2, Dimensions...>, D1, D2, Dimensions...> :
public std::true_type
61 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
66 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
71 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename D1,
typename D2,
typename... Dimensions>
72 struct has_exact_dimensions<SliceMixin<
Slice<is_const, SliceTraitsT, SliceMixin, D1, D2, Dimensions...>>, D1, D2, Dimensions...> :
public has_exact_dimensions<Slice<is_const, SliceTraitsT, SliceMixin, D1, D2, Dimensions...>, D1, D2, Dimensions...>::type
77 template<
typename Dim,
typename SliceType>
80 template<
typename Dim,
typename SliceType>
84 template<
typename Dim,
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
85 struct OperatorSliceTypeHelper<Dim, SliceMixin<
Slice<is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...>>> :
public OperatorSliceTypeHelper<Dim, Slice<is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...>>
91 template<
typename Dim,
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
92 struct ConstOperatorSliceTypeHelper<Dim, SliceMixin<
Slice<is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...>>> :
public ConstOperatorSliceTypeHelper<Dim, Slice<is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...>>
97 template<
typename Dim,
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
100 typedef typename std::conditional<is_const,
107 template<
typename Dim,
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename... Dimensions>
109 typedef typename std::conditional<is_const,
111 ,
typename Slice<is_const, SliceTraitsT, SliceMixin, Dim, Dimensions...>::ReducedSliceType
115 template<
typename Dim,
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin>
120 template<
typename Dim,
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
126 template<
typename Dim,
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename... Dimensions>
128 typedef typename Slice<is_const, SliceTraitsT, SliceMixin, Dim, Dimensions...>::ConstReducedSliceType
type;
131 template<
typename Dim,
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin>
137 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
138 template<
typename Dim>
144 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
145 template<
typename Dim>
151 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
152 template<
typename Dim>
158 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
159 template<
typename Dim>
160 struct Slice<is_const, SliceTraitsT, SliceMixin, Dimension>::ConstOperatorSliceType
165 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
166 template<
typename Dim,
typename... Dims>
174 , _ptr(parent.begin() + static_cast<
std::size_t>(_span.start()) *
BaseT::_base_span)
179 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
180 template<
typename Dim,
typename... Dims>
188 , _ptr(parent.begin())
194 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
195 template<
typename... Dims>
202 , _base_span(copy._base_span)
208 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
209 template<
typename... Dims>
216 , _base_span(copy._base_span)
221 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
222 template<
typename... Dims>
231 , _base_span(copy._base_span)
232 , _ptr(copy._ptr + static_cast<
std::size_t>(
239 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
240 template<
typename... Dims>
247 , _base_span(copy._base_span)
251 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
252 template<
typename... Dims>
258 , _base_span(parent.template size<Dimension>() *
BaseT::_base_span)
262 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
263 template<
typename... Dims>
269 , _base_span(parent.template size<Dimension>() *
BaseT::_base_span)
273 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
276 _ptr=it +
static_cast<std::size_t
>(_span.start()) * BaseT::_base_span;
277 return BaseT::offset(_ptr);
280 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
283 return static_cast<std::size_t
>(BaseT::_base_span * (_span.span() - 1)) + BaseT::base_span();
286 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
289 return static_cast<std::size_t
>(BaseT::_base_span) * (_span.span() - 1);
292 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
295 return BaseT::contiguous_span();
298 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
301 return BaseT::base_ptr();
304 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
307 return BaseT::base_ptr();
310 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
313 return _span.span() * BaseT::data_size();;
316 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
317 template<
typename Dim>
324 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
325 template<
typename Dim>
326 typename std::enable_if<!std::is_same<Dim, Dimension>::value,
DimensionSize<Dim>>::type
329 return BaseT::template size<Dim>();
332 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
333 template<
typename Dim>
340 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
341 template<
typename Dim>
342 typename std::enable_if<!std::is_same<Dim, Dimension>::value,
DimensionSize<Dim>>::type
345 return BaseT::template dimension<Dim>();
348 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
349 typename Slice<is_const, Parent, SliceMixin, Dimension, Dimensions...>::template OperatorSliceType<Dimension>::type
353 return ReducedSliceType(static_cast<BaseT const&>(*
this)) +=
static_cast<std::size_t
>(offset);
356 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
357 typename Slice<is_const, Parent, SliceMixin, Dimension, Dimensions...>::template ConstOperatorSliceType<Dimension>::type
361 return SliceType(reinterpret_cast<SliceType const&>(*
this)) +=
static_cast<std::size_t
>(offset);
364 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
365 template<
typename Dim>
366 typename std::enable_if<
arg_helper<Dim, Dimensions...>::value
367 && !std::is_same<Dim, Dimension>::value,
typename Slice<is_const, Parent
368 , SliceMixin, Dimension, Dimensions...>::template OperatorSliceType<Dim>::type>::type
374 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
375 template<
typename Dim>
376 typename std::enable_if<
arg_helper<Dim, Dimensions...>::value
377 && !std::is_same<Dim, Dimension>::value,
typename Slice<is_const, Parent
378 , SliceMixin, Dimension, Dimensions...>::template ConstOperatorSliceType<Dim>::type>::type
381 typedef Slice<
true, Parent, SliceMixin, Dimension, Dimensions...>
SliceType;
387 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
390 _ptr += (offset * _base_span);
395 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
398 _ptr += (offset * BaseT::_base_span);
403 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
404 template<
typename... Dims>
405 typename std::enable_if<
arg_helper<Dimension, Dims...>::value,
typename Slice<is_const, Parent, SliceMixin, Dimension, Dimensions...>::SliceType>::type
411 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
412 template<
typename... Dims>
413 typename std::enable_if<!
arg_helper<Dimension, Dims...>::value,
typename Slice<is_const, Parent, SliceMixin, Dimension, Dimensions...>::SliceType>::type
420 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
421 template<
typename... Dims>
422 typename std::enable_if<
arg_helper<Dimension, Dims...>::value,
Slice<
true, Parent, SliceMixin, Dimension, Dimensions...>>::type
428 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
429 template<
typename... Dims>
430 typename std::enable_if<!
arg_helper<Dimension, Dims...>::value, Slice<
true, Parent, SliceMixin, Dimension, Dimensions...>>::type
436 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
442 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
448 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
454 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
457 return iterator::create_end(*
this);
460 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
463 return const_iterator::create_end(*
this);
466 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
469 return const_iterator::create_end(*
this);
472 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
475 return BaseT::parent();
478 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
484 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
490 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
496 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
499 return impl_iterator::create_end(*
this);
502 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
505 return impl_const_iterator::create_end(*
this);
508 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
511 return impl_const_iterator::create_end(*
this);
514 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
515 template<
typename IteratorT>
518 if(!BaseT::increment_it(current, pos)) {
519 current -= BaseT::diff_base_span();
520 if(++pos.
index < _span.span())
522 current += BaseT::_base_span;
532 template<
bool is_const,
typename Parent,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
533 template<
typename IteratorDifferenceT>
536 if(diff < (IteratorDifferenceT)BaseT::_base_span) {
537 return BaseT::diff_it(diff);
540 return IteratorDifferenceT(diff/BaseT::_base_span) * BaseT::data_size() + BaseT::diff_it(diff%BaseT::_base_span);
544 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension,
typename... Dimensions>
545 template<
bool const_type>
549 && std::equal(s.
cbegin(), s.
cend(), cbegin());
553 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
556 , _base_span(parent.template size<Dimension>())
558 , _ptr(parent.begin() + static_cast<
std::size_t>(_span.start()))
562 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
565 , _base_span(copy._base_span)
566 , _parent(copy._parent)
571 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
572 template<
typename... Dims>
577 , _base_span(parent.template size<Dimension>())
583 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
584 template<
typename... Dims>
589 , _base_span(parent.template size<Dimension>())
594 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
595 template<
typename... Dims>
600 , _base_span(copy._base_span)
601 , _parent(copy._parent)
605 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
606 template<
typename... Dims>
613 , _base_span(copy._base_span)
614 , _parent(copy._parent)
618 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
621 _ptr = it +
static_cast<std::size_t
>(_span.start());
625 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
630 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
634 _base_span = copy._base_span;
635 _parent = copy._parent;
640 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
646 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
647 template<
typename Dim>
653 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
654 template<
typename Dim>
660 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
661 template<
typename Dim>
663 typename std::enable_if<((!std::is_same<Dim, Dimension>::value)
670 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
671 template<
typename Dim>
673 typename std::enable_if<(!std::is_same<Dim, Dimension>::value)
680 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
681 template<
typename Dim>
683 typename std::enable_if<((!std::is_same<Dim, Dimension>::value)
690 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
691 template<
typename Dim>
693 typename std::enable_if<(!std::is_same<Dim, Dimension>::value)
700 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
703 parent_iterator ptr = (_ptr + p);
707 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
710 return *(_ptr +
static_cast<std::size_t
>(p));
713 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
717 _ptr +=
static_cast<std::size_t
>(_span.start());
719 r._span.span(span.
span());
723 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
727 _ptr +=
static_cast<std::size_t
>(_span.start());
729 r._span.span(span.
span());
733 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
736 return static_cast<std::size_t
>(_span.span());
739 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
742 return static_cast<std::size_t
>(_span.span());
745 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
748 return static_cast<std::size_t
>(_span.span());
751 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
757 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
763 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
766 _ptr +=
static_cast<std::size_t
>(
offset) * _base_span;
770 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
773 _ptr += offset * _base_span;
777 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
783 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
789 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
795 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
798 return _ptr +
static_cast<std::size_t
>(_span.span());
801 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
804 return _ptr +
static_cast<std::size_t
>(_span.span());
807 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
810 return _ptr +
static_cast<std::size_t
>(_span.span());
813 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
819 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
820 template<
typename IteratorT>
824 if(++pos.
index < _span.span())
832 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
833 template<
typename IteratorDifferenceT>
839 template<
bool is_const,
typename SliceTraitsT,
template<
typename>
class SliceMixin,
typename Dimension>
840 template<
bool is_const_>
Slice< is_const, SliceTraitsT, SliceMixin, Dim, Dimensions...>::ConstReducedSliceType type
iterator end()
iterator pointing to just after the last element
A tagged dimensionIndex variable.
iterator begin()
iterator pointing to the first element in the slice
bool operator==(Slice< const_type, SliceTraitsT, SliceMixin, Dimension, Dimensions...> const &) const
compare two arrays
ConstOperatorSliceTypeHelper< Dim, Slice >::type type
Defines a contiguous range over dimension in index.
SliceMixin< Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...> > SliceType
parent_iterator const & offset(parent_iterator const &)
OperatorSliceTypeHelper< Dim, Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...> >::type type
OperatorSliceTypeHelper< Dim, Slice >::type type
ConstOperatorSliceTypeHelper< Dim, Slice >::type type
std::size_t contiguous_span() const
OperatorSliceTypeHelper< Dim, Slice >::type type
SliceMixin< BaseT > ReducedSliceType
Representation of a Slice through a Data Array.
impl_iterator impl_begin()
iterator pointing to the first element in the slice
std::enable_if< std::is_same< Dim, Dimension >::value, DimensionSize< Dimension > >::type size() const
impl_const_iterator impl_cbegin() const
std::size_t diff_base_span() const
std::conditional< is_const, typename ConstOperatorSliceTypeHelper< Dim, Slice< is_const, SliceTraitsT, SliceMixin, Dim, Dimensions...> >::type, typename Slice< is_const, SliceTraitsT, SliceMixin, Dim, Dimensions...>::ReducedSliceType >::type type
ConstOperatorSliceTypeHelper< Dim, Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...> >::type type
DimensionSize< Dimension > & span()
std::enable_if< arg_helper< Dimension, Dims...>::value, SliceType >::type slice(DimensionSpan< Dims > const &...spans)
Take a sub-slice from this slice pass a DimensionSpan object for each dimension you wish ...
SelfType & operator+=(std::size_t n)
const_iterator cend() const
parent_iterator const & base_ptr() const
Parent & parent() const
return refernce to the parent object the Slice is based on
impl_const_iterator impl_cend() const
Slice< true, SliceTraitsT, SliceMixin, Dim >::reference_type type
provides a template to determine the returned type of an operator[]
return true if the Dimensions provided match exactly those of the structure T (including order) ...
A compile time dimesion tagging of size_t.
impl_iterator impl_end()
iterator pointing to just after the last element
IteratorDifferenceT diff_it(IteratorDifferenceT const &diff) const
bool increment_it(IteratorT ¤t, SlicePosition< rank > &pos) const
std::size_t base_span() const
OperatorSliceType< Dimension >::type operator[](DimensionIndex< Dimension >)
Take a slice in the specified dimension with a span of 1.
std::size_t data_size() const
the total number of data members in this slice
DimensionIndex< Dimension > & start()
Slice< is_const, SliceTraitsT, SliceMixin, Dim >::reference_type type
SliceMixin< Slice< true, SliceTraitsT, SliceMixin, Dimension, Dimensions...> > ConstSliceType
std::conditional< is_const, const ParentT, ParentT >::type Parent
return true if the Dimension is represented in the structure
std::conditional< is_const, typename ConstOperatorSliceTypeHelper< Dim, Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...> >::type, SliceMixin< multiarray::ReducedRankSlice< Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...>, Dim > > >::type type
SliceMixin< multiarray::ReducedRankSlice< Slice< true, SliceTraitsT, SliceMixin, Dimension, Dimensions...>, Dim > > type
const_iterator cbegin() const
std::enable_if< std::is_same< Dim, Dimension >::value, DimensionSize< Dimension > >::type dimension() const