astrotypes
0.0
|
Representation of a Slice through a Data Array. More...
#include <src/cpp/pss/astrotypes/multiarray/Slice.h>
Classes | |
struct | ConstOperatorSliceType |
struct | OperatorSliceType |
provides a template to determine the returned type of an operator[] More... | |
Public Types | |
typedef std::conditional< is_const, const ParentT, ParentT >::type | Parent |
typedef SliceIterator< SliceMixin< SelfType >, is_const > | iterator |
typedef SliceIterator< SliceMixin< SelfType >, true > | const_iterator |
typedef SliceMixin< Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...> > | SliceType |
typedef SliceMixin< BaseT > | ReducedSliceType |
typedef SliceMixin< Slice< true, SliceTraitsT, SliceMixin, Dimension, Dimensions...> > | ConstSliceType |
typedef SliceMixin< Slice< true, InternalSliceTraits< SliceTraitsT, Dimension >, SliceMixin, Dimensions...> > | ConstReducedSliceType |
Public Member Functions | |
template<typename Dim , typename... Dims> | |
Slice (typename std::enable_if< arg_helper< Dimension, Dim, Dims...>::value, Parent & >::type parent, DimensionSpan< Dim > const &, DimensionSpan< Dims > const &...) | |
template<typename Dim , typename... Dims> | |
Slice (typename std::enable_if<!arg_helper< Dimension, Dim, Dims...>::value, Parent & >::type parent, DimensionSpan< Dim > const &, DimensionSpan< Dims > const &...) | |
std::size_t | data_size () const |
the total number of data members in this slice More... | |
template<typename Dim > | |
std::enable_if< std::is_same< Dim, Dimension >::value, DimensionSize< Dimension > >::type | size () const |
template<typename Dim > | |
std::enable_if<!std::is_same< Dim, Dimension >::value, DimensionSize< Dim > >::type | size () const |
template<typename Dim > | |
std::enable_if< std::is_same< Dim, Dimension >::value, DimensionSize< Dimension > >::type | dimension () const |
template<typename Dim > | |
std::enable_if<!std::is_same< Dim, Dimension >::value, DimensionSize< Dim > >::type | dimension () const |
OperatorSliceType< Dimension >::type | operator[] (DimensionIndex< Dimension >) |
Take a slice in the specified dimension with a span of 1. More... | |
ConstOperatorSliceType< Dimension >::type | operator[] (DimensionIndex< Dimension >) const |
template<typename Dim > | |
std::enable_if< arg_helper< Dim, Dimensions...>::value &&!std::is_same< Dim, Dimension >::value, typename ConstOperatorSliceType< Dim >::type >::type | operator[] (DimensionIndex< Dim > const &) const |
template<typename Dim > | |
std::enable_if< arg_helper< Dim, Dimensions...>::value &&!std::is_same< Dim, Dimension >::value, typename OperatorSliceType< Dim >::type >::type | operator[] (DimensionIndex< Dim > const &) |
template<typename... Dims> | |
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<Dimension> object for each dimension you wish to restrict. Span indexes are relative to Slice boundary, not the parent. More... | |
template<typename... Dims> | |
std::enable_if<!arg_helper< Dimension, Dims...>::value, SliceType >::type | slice (DimensionSpan< Dims > const &...spans) |
template<typename... Dims> | |
std::enable_if< arg_helper< Dimension, Dims...>::value, Slice< true, SliceTraitsT, SliceMixin, Dimension, Dimensions...> >::type | slice (DimensionSpan< Dims > const &...spans) const |
template<typename... Dims> | |
std::enable_if<!arg_helper< Dimension, Dims...>::value, Slice< true, SliceTraitsT, SliceMixin, Dimension, Dimensions...> >::type | slice (DimensionSpan< Dims > const &...spans) const |
iterator | begin () |
iterator pointing to the first element in the slice More... | |
const_iterator | begin () const |
const_iterator | cbegin () const |
iterator | end () |
iterator pointing to just after the last element More... | |
const_iterator | end () const |
const_iterator | cend () const |
Parent & | parent () const |
return refernce to the parent object the Slice is based on More... | |
template<bool const_type> | |
bool | operator== (Slice< const_type, SliceTraitsT, SliceMixin, Dimension, Dimensions...> const &) const |
compare two arrays More... | |
template<typename Dim, typename... Dims> | |
Slice (typename std::enable_if< arg_helper< Dimension, Dim, Dims...>::value, Parent & >::type parent, DimensionSpan< Dim > const &span, DimensionSpan< Dims > const &...spans) | |
template<typename Dim, typename... Dims> | |
Slice (typename std::enable_if<!arg_helper< Dimension, Dim, Dims...>::value, Parent & >::type parent, DimensionSpan< Dim > const &span, DimensionSpan< Dims > const &...spans) | |
template<typename Dim > | |
std::enable_if< std::is_same< Dim, Dimension >::value, DimensionSize< Dimension > >::type | size () const |
template<typename Dim > | |
std::enable_if<!std::is_same< Dim, Dimension >::value, DimensionSize< Dim > >::type | size () const |
template<typename Dim > | |
std::enable_if< std::is_same< Dim, Dimension >::value, DimensionSize< Dimension > >::type | dimension () const |
template<typename Dim > | |
std::enable_if<!std::is_same< Dim, Dimension >::value, DimensionSize< Dim > >::type | dimension () const |
template<typename Dim > | |
std::enable_if< arg_helper< Dim, Dimensions...>::value &&!std::is_same< Dim, Dimension >::value, typename Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::template OperatorSliceType< Dim >::type >::type | operator[] (DimensionIndex< Dim > const &index) |
template<typename Dim > | |
std::enable_if< arg_helper< Dim, Dimensions...>::value &&!std::is_same< Dim, Dimension >::value, typename Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::template ConstOperatorSliceType< Dim >::type >::type | operator[] (DimensionIndex< Dim > const &index) const |
template<typename... Dims> | |
std::enable_if< arg_helper< Dimension, Dims...>::value, typename Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::SliceType >::type | slice (DimensionSpan< Dims > const &...spans) |
template<typename... Dims> | |
std::enable_if<!arg_helper< Dimension, Dims...>::value, typename Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::SliceType >::type | slice (DimensionSpan< Dims > const &...spans) |
template<typename... Dims> | |
std::enable_if< arg_helper< Dimension, Dims...>::value, Slice< true, Parent, SliceMixin, Dimension, Dimensions...> >::type | slice (DimensionSpan< Dims > const &...spans) const |
template<typename... Dims> | |
std::enable_if<!arg_helper< Dimension, Dims...>::value, Slice< true, Parent, SliceMixin, Dimension, Dimensions...> >::type | slice (DimensionSpan< Dims > const &...spans) const |
Static Public Attributes | |
static constexpr std::size_t | rank = 1 + sizeof...(Dimensions) |
Protected Types | |
typedef SliceTraitsHelper< SliceTraitsT >::ExcludeTuple | ExcludeTuple |
typedef std::tuple< Dimension, Dimensions...> | DimensionTuple |
typedef SliceIterator< SelfType, is_const > | impl_iterator |
typedef SliceIterator< SelfType, true > | impl_const_iterator |
Protected Member Functions | |
template<typename IteratorT > | |
bool | increment_it (IteratorT ¤t, SlicePosition< rank > &pos) const |
template<typename IteratorDifferenceT > | |
IteratorDifferenceT | diff_it (IteratorDifferenceT const &diff) const |
std::size_t | contiguous_span () const |
std::size_t | base_span () const |
std::size_t | diff_base_span () const |
parent_iterator const & | base_ptr () const |
parent_iterator & | base_ptr () |
parent_iterator const & | offset (parent_iterator const &) |
template<typename... Dims> | |
Slice (internal_construct_tag const &, typename std::enable_if< arg_helper< Dimension, Dims...>::value, Parent & >::type parent, DimensionSpan< Dims > const &...spans) | |
template<typename... Dims> | |
Slice (internal_construct_tag const &, typename std::enable_if<!arg_helper< Dimension, Dims...>::value, Parent & >::type parent, DimensionSpan< Dims > const &...spans) | |
template<typename... Dims> | |
Slice (copy_resize_construct_tag const &, typename std::enable_if<!arg_helper< Dimension, Dims...>::value, Slice >::type const ©, DimensionSpan< Dims > const &...spans) | |
template<typename... Dims> | |
Slice (copy_resize_construct_base_tag const &, typename std::enable_if<!arg_helper< Dimension, Dims...>::value, Slice >::type const ©, DimensionSpan< Dims > const &...spans) | |
template<typename... Dims> | |
Slice (copy_resize_construct_tag const &, typename std::enable_if< arg_helper< Dimension, Dims...>::value, Slice >::type const ©, DimensionSpan< Dims > const &...spans) | |
template<typename... Dims> | |
Slice (copy_resize_construct_base_tag const &, typename std::enable_if< arg_helper< Dimension, Dims...>::value, Slice >::type const ©, DimensionSpan< Dims > const &...spans) | |
SelfType & | operator+= (std::size_t n) |
SelfType & | operator+= (DimensionSize< Dimension > n) |
impl_iterator | impl_begin () |
iterator pointing to the first element in the slice More... | |
impl_const_iterator | impl_begin () const |
impl_const_iterator | impl_cbegin () const |
impl_iterator | impl_end () |
iterator pointing to just after the last element More... | |
impl_const_iterator | impl_end () const |
impl_const_iterator | impl_cend () const |
Friends | |
template<bool , typename P , template< typename > class, typename D , typename... Ds> | |
class | Slice |
Representation of a Slice through a Data Array.
ParnetT | the data structure that the slice will be based on |
is_const | true if the ParentT is const, false otherwise |
SliceMixin | A template wrapper class around a slice that allows you to propagate a custom interface to any slice to be consistent with your main data structure interface. |
typedef SliceIterator<SliceMixin<SelfType>, true> pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::const_iterator |
typedef SliceMixin<Slice<true, InternalSliceTraits<SliceTraitsT, Dimension>, SliceMixin, Dimensions...> > pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::ConstReducedSliceType |
typedef SliceMixin<Slice<true, SliceTraitsT, SliceMixin, Dimension, Dimensions...> > pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::ConstSliceType |
|
protected |
|
protected |
|
protected |
|
protected |
typedef SliceIterator<SliceMixin<SelfType>, is_const> pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::iterator |
typedef std::conditional<is_const, const ParentT, ParentT>::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::Parent |
typedef SliceMixin<BaseT> pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::ReducedSliceType |
typedef SliceMixin<Slice<is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions...> > pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::SliceType |
pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::Slice | ( | typename std::enable_if< arg_helper< Dimension, Dim, Dims...>::value, Parent & >::type | parent, |
DimensionSpan< Dim > const & | , | ||
DimensionSpan< Dims > const & | ... | ||
) |
pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::Slice | ( | typename std::enable_if<!arg_helper< Dimension, Dim, Dims...>::value, Parent & >::type | parent, |
DimensionSpan< Dim > const & | , | ||
DimensionSpan< Dims > const & | ... | ||
) |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::Slice | ( | typename std::enable_if< arg_helper< Dimension, Dim, Dims...>::value, Parent & >::type | parent, |
DimensionSpan< Dim > const & | span, | ||
DimensionSpan< Dims > const &... | spans | ||
) |
pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::Slice | ( | typename std::enable_if<!arg_helper< Dimension, Dim, Dims...>::value, Parent & >::type | parent, |
DimensionSpan< Dim > const & | span, | ||
DimensionSpan< Dims > const &... | spans | ||
) |
|
protected |
|
protected |
|
protected |
Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::iterator pss::astrotypes::Slice< is_const, Parent, SliceMixin, Dimension, Dimensions >::begin | ( | ) |
Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::const_iterator pss::astrotypes::Slice< is_const, Parent, SliceMixin, Dimension, Dimensions >::begin | ( | ) | const |
Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::const_iterator pss::astrotypes::Slice< is_const, Parent, SliceMixin, Dimension, Dimensions >::cbegin | ( | ) | const |
Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::const_iterator pss::astrotypes::Slice< is_const, Parent, SliceMixin, Dimension, Dimensions >::cend | ( | ) | const |
|
protected |
std::size_t pss::astrotypes::Slice< is_const, Parent, SliceMixin, Dimension, Dimensions >::data_size | ( | ) | const |
|
protected |
|
protected |
std::enable_if<std::is_same<Dim, Dimension>::value, DimensionSize<Dimension> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::dimension | ( | ) | const |
std::enable_if<!std::is_same<Dim, Dimension>::value, DimensionSize<Dim> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::dimension | ( | ) | const |
std::enable_if<std::is_same<Dim, Dimension>::value, DimensionSize<Dimension> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::dimension | ( | ) | const |
std::enable_if<!std::is_same<Dim, Dimension>::value, DimensionSize<Dim> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::dimension | ( | ) | const |
Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::iterator pss::astrotypes::Slice< is_const, Parent, SliceMixin, Dimension, Dimensions >::end | ( | ) |
Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::const_iterator pss::astrotypes::Slice< is_const, Parent, SliceMixin, Dimension, Dimensions >::end | ( | ) | const |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
bool pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::operator== | ( | Slice< const_type, SliceTraitsT, SliceMixin, Dimension, Dimensions...> const & | s | ) | const |
Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::template OperatorSliceType< Dimension >::type pss::astrotypes::Slice< is_const, Parent, SliceMixin, Dimension, Dimensions >::operator[] | ( | DimensionIndex< Dimension > | offset | ) |
Slice< is_const, Parent, SliceMixin, Dimension, Dimensions...>::template ConstOperatorSliceType< Dimension >::type pss::astrotypes::Slice< is_const, Parent, SliceMixin, Dimension, Dimensions >::operator[] | ( | DimensionIndex< Dimension > | offset | ) | const |
std::enable_if<arg_helper<Dim, Dimensions...>::value && !std::is_same<Dim, Dimension>::value, typename ConstOperatorSliceType<Dim>::type>::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::operator[] | ( | DimensionIndex< Dim > const & | ) | const |
std::enable_if<arg_helper<Dim, Dimensions...>::value && !std::is_same<Dim, Dimension>::value, typename OperatorSliceType<Dim>::type>::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::operator[] | ( | DimensionIndex< Dim > const & | ) |
std::enable_if<arg_helper<Dim, Dimensions...>::value&& !std::is_same<Dim, Dimension>::value, typename Slice<is_const, Parent , SliceMixin, Dimension, Dimensions...>::template OperatorSliceType<Dim>::type>::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::operator[] | ( | DimensionIndex< Dim > const & | index | ) |
std::enable_if<arg_helper<Dim, Dimensions...>::value&& !std::is_same<Dim, Dimension>::value, typename Slice<is_const, Parent , SliceMixin, Dimension, Dimensions...>::template ConstOperatorSliceType<Dim>::type>::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::operator[] | ( | DimensionIndex< Dim > const & | index | ) | const |
|
inline |
std::enable_if<std::is_same<Dim, Dimension>::value, DimensionSize<Dimension> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::size | ( | ) | const |
@ brief return the size of the slice in the specified dimension
If you intend to inherit from this class you may need to call this method with the template keyword. e,g,
std::enable_if<!std::is_same<Dim, Dimension>::value, DimensionSize<Dim> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::size | ( | ) | const |
std::enable_if<std::is_same<Dim, Dimension>::value, DimensionSize<Dimension> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::size | ( | ) | const |
std::enable_if<!std::is_same<Dim, Dimension>::value, DimensionSize<Dim> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::size | ( | ) | const |
std::enable_if<arg_helper<Dimension, Dims...>::value, SliceType>::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::slice | ( | DimensionSpan< Dims > const &... | spans | ) |
Take a sub-slice from this slice pass a DimensionSpan<Dimension> object for each dimension you wish to restrict. Span indexes are relative to Slice boundary, not the parent.
std::enable_if<!arg_helper<Dimension, Dims...>::value, SliceType>::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::slice | ( | DimensionSpan< Dims > const &... | spans | ) |
std::enable_if<arg_helper<Dimension, Dims...>::value, Slice<true, SliceTraitsT, SliceMixin, Dimension, Dimensions...> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::slice | ( | DimensionSpan< Dims > const &... | spans | ) | const |
std::enable_if<!arg_helper<Dimension, Dims...>::value, Slice<true, SliceTraitsT, SliceMixin, Dimension, Dimensions...> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::slice | ( | DimensionSpan< Dims > const &... | spans | ) | const |
std::enable_if<arg_helper<Dimension, Dims...>::value, typename Slice<is_const, Parent, SliceMixin, Dimension, Dimensions...>::SliceType>::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::slice | ( | DimensionSpan< Dims > const &... | spans | ) |
std::enable_if<!arg_helper<Dimension, Dims...>::value, typename Slice<is_const, Parent, SliceMixin, Dimension, Dimensions...>::SliceType>::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::slice | ( | DimensionSpan< Dims > const &... | spans | ) |
std::enable_if<arg_helper<Dimension, Dims...>::value, Slice<true, Parent, SliceMixin, Dimension, Dimensions...> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::slice | ( | DimensionSpan< Dims > const &... | spans | ) | const |
std::enable_if<!arg_helper<Dimension, Dims...>::value, Slice<true, Parent, SliceMixin, Dimension, Dimensions...> >::type pss::astrotypes::Slice< is_const, SliceTraitsT, SliceMixin, Dimension, Dimensions >::slice | ( | DimensionSpan< Dims > const &... | spans | ) | const |
|
friend |
|
static |