astrotypes
0.0
|
template classes to specify multiple dimension arrays with explicit dimension types More...
#include <src/cpp/pss/astrotypes/multiarray/MultiArray.h>
Classes | |
struct | ConstOperatorSliceType |
provides a template to determine the returned type of an operator[] const More... | |
struct | OperatorSliceType |
provides a template to determine the returned type of an operator[] More... | |
Public Types | |
typedef BaseT::iterator | iterator |
typedef BaseT::const_iterator | const_iterator |
typedef BaseT::value_type | value_type |
typedef SliceMixin< Slice< false, SelfType, SliceMixin, FirstDimension, OtherDimensions...> > | SliceType |
typedef SliceMixin< Slice< true, SelfType, SliceMixin, FirstDimension, OtherDimensions...> > | ConstSliceType |
typedef SliceType::template OperatorSliceType< FirstDimension >::type | ReducedDimensionSliceType |
typedef ConstSliceType::template ConstOperatorSliceType< FirstDimension >::type | ConstReducedDimensionSliceType |
typedef T & | reference_type |
typedef T const & | const_reference_type |
Public Member Functions | |
template<typename Dim , typename... Dims> | |
MultiArray (DimensionSize< Dim > size, DimensionSize< Dims >...sizes) | |
MultiArray (MultiArray const &)=default | |
copy operator needs to be called explicitly as this is an expensive operation More... | |
template<typename DimensionType , typename Enable = typename std::enable_if< has_dimensions<DimensionType, FirstDimension, OtherDimensions...>::value && !has_exact_dimensions<FirstDimension, OtherDimensions...>::value>::type> | |
MultiArray (DimensionType const &) | |
initialise and transpose from a group with different memory ordering More... | |
iterator | begin () |
iterators acting over he entire data structure More... | |
iterator | end () |
const_iterator | begin () const |
const_iterator | end () const |
const_iterator | cbegin () const |
const_iterator | cend () const |
ReducedDimensionSliceType | operator[] (DimensionIndex< FirstDimension > index) |
take a slice of width 1 data at the specified index of the first dimension More... | |
ConstReducedDimensionSliceType | operator[] (DimensionIndex< FirstDimension > index) const |
template<typename Dim > | |
std::enable_if< has_dimension< MultiArray, Dim >::value &&!std::is_same< Dim, FirstDimension >::value, typename OperatorSliceType< Dim >::type >::type | operator[] (DimensionIndex< Dim > const &) |
template<typename Dim > | |
std::enable_if< has_dimension< MultiArray, Dim >::value &&!std::is_same< Dim, FirstDimension >::value, typename ConstOperatorSliceType< Dim >::type >::type | operator[] (DimensionIndex< Dim > const &) const |
template<typename Dim > | |
std::enable_if< std::is_same< Dim, FirstDimension >::value, DimensionSize< FirstDimension > >::type | size () const |
return a slice of the specified dimension spanning the index_range provided More... | |
template<typename Dim > | |
std::enable_if<!std::is_same< Dim, FirstDimension >::value, DimensionSize< Dim > >::type | size () const |
template<typename Dim > | |
std::enable_if< std::is_same< Dim, FirstDimension >::value, DimensionSize< FirstDimension > >::type | dimension () const |
template<typename Dim > | |
std::enable_if<!std::is_same< Dim, FirstDimension >::value, DimensionSize< Dim > >::type | dimension () const |
std::size_t | data_size () const |
the total size of data in all dimensions More... | |
bool | operator== (MultiArray const &) const |
compare data in the two arrays More... | |
bool | equal_size (MultiArray const &) const |
return true if the sizes of each dimension are equivalent More... | |
template<typename MultiArrayType , typename DimensionType > | |
void | do_transpose (MultiArrayType &ma, DimensionType const &d) |
template<typename... Dims> | |
MultiArray (typename std::enable_if< arg_helper< FirstDimension, Dims...>::value, bool >::type, DimensionSize< Dims > const &...sizes) | |
template<typename Dim > | |
std::enable_if< has_dimension< MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions...>, Dim >::value &&!std::is_same< Dim, FirstDimension >::value, typename MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions...>::template ConstOperatorSliceType< Dim >::type >::type | operator[] (DimensionIndex< Dim > const &index) const |
template<typename Dim > | |
std::enable_if< has_dimension< MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions...>, Dim >::value &&!std::is_same< Dim, FirstDimension >::value, typename MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions...>::template OperatorSliceType< Dim >::type >::type | operator[] (DimensionIndex< Dim > const &index) |
template<typename Dim > | |
std::enable_if<!std::is_same< Dim, FirstDimension >::value, DimensionSize< Dim > >::type | size () const |
template<typename Dim > | |
std::enable_if< std::is_same< Dim, FirstDimension >::value, DimensionSize< FirstDimension > >::type | size () const |
template<typename Dim > | |
std::enable_if<!std::is_same< Dim, FirstDimension >::value, DimensionSize< Dim > >::type | dimension () const |
template<typename Dim > | |
std::enable_if< std::is_same< Dim, FirstDimension >::value, DimensionSize< FirstDimension > >::type | dimension () const |
template<typename Dim , typename... Dims> | |
std::enable_if<!arg_helper< FirstDimension, Dim, Dims...>::value, void >::type | do_resize (std::size_t total, DimensionSize< Dim > size, DimensionSize< Dims >...sizes) |
template<typename Dim , typename... Dims> | |
std::enable_if<!arg_helper< FirstDimension, Dim, Dims...>::value, void >::type | do_resize (std::size_t total, DimensionSize< Dim > size, DimensionSize< Dims >...sizes, T const &value) |
template<typename Dim , typename... Dims> | |
std::enable_if< arg_helper< FirstDimension, Dim, Dims...>::value, void >::type | do_resize (std::size_t total, DimensionSize< Dim > size, DimensionSize< Dims >...sizes) |
template<typename Dim , typename... Dims> | |
std::enable_if< arg_helper< FirstDimension, Dim, Dims...>::value, void >::type | do_resize (std::size_t total, DimensionSize< Dim > size, DimensionSize< Dims >...sizes, T const &value) |
Protected Member Functions | |
template<typename... Dims> | |
MultiArray (typename std::enable_if< arg_helper< FirstDimension, Dims...>::value, bool >::type disable_resize_tag, DimensionSize< Dims > const &...) | |
template<typename DimensionType > | |
MultiArray (typename std::enable_if< has_dimensions< DimensionType, FirstDimension, OtherDimensions...>::value, bool >::type disable_transpose_tag, DimensionType const &d) | |
template<typename Dimension , typename... Dims> | |
std::enable_if<!arg_helper< FirstDimension, Dimension, Dims...>::value, void >::type | do_resize (std::size_t total, DimensionSize< Dimension > size, DimensionSize< Dims >...sizes) |
template<typename Dimension , typename... Dims> | |
std::enable_if<!arg_helper< FirstDimension, Dimension, Dims...>::value, void >::type | do_resize (std::size_t total, DimensionSize< Dimension > size, DimensionSize< Dims >...sizes, T const &value) |
template<typename Dimension , typename... Dims> | |
std::enable_if< arg_helper< FirstDimension, Dimension, Dims...>::value, void >::type | do_resize (std::size_t total, DimensionSize< Dimension > size, DimensionSize< Dims >...sizes) |
template<typename Dimension , typename... Dims> | |
std::enable_if< arg_helper< FirstDimension, Dimension, Dims...>::value, void >::type | do_resize (std::size_t total, DimensionSize< Dimension > size, DimensionSize< Dims >...sizes, T const &value) |
void | do_resize (std::size_t total) |
void | do_resize (std::size_t total, T const &value) |
template<typename SelfSlice , typename OtherSlice > | |
void | do_transpose (SelfSlice &, OtherSlice const &) |
template classes to specify multiple dimension arrays with explicit dimension types
T | the type of object to be stored in the array (e.g. float, int, Stokes, etc) |
Definition at line 42 of file MultiArray.h.
typedef BaseT::const_iterator pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::const_iterator |
Definition at line 50 of file MultiArray.h.
typedef T const& pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::const_reference_type |
Definition at line 76 of file MultiArray.h.
typedef ConstSliceType::template ConstOperatorSliceType<FirstDimension>::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::ConstReducedDimensionSliceType |
Definition at line 73 of file MultiArray.h.
typedef SliceMixin<Slice<true, SelfType, SliceMixin, FirstDimension, OtherDimensions...> > pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::ConstSliceType |
Definition at line 71 of file MultiArray.h.
typedef BaseT::iterator pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::iterator |
Definition at line 49 of file MultiArray.h.
typedef SliceType::template OperatorSliceType<FirstDimension>::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::ReducedDimensionSliceType |
Definition at line 72 of file MultiArray.h.
typedef T& pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::reference_type |
Definition at line 75 of file MultiArray.h.
typedef SliceMixin<Slice<false, SelfType, SliceMixin, FirstDimension, OtherDimensions...> > pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::SliceType |
Definition at line 68 of file MultiArray.h.
typedef BaseT::value_type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::value_type |
Definition at line 51 of file MultiArray.h.
pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions >::MultiArray | ( | DimensionSize< Dim > | size, |
DimensionSize< Dims >... | sizes | ||
) |
Definition at line 88 of file MultiArray.cpp.
|
explicitdefault |
copy operator needs to be called explicitly as this is an expensive operation
|
explicit |
initialise and transpose from a group with different memory ordering
Definition at line 97 of file MultiArray.cpp.
|
protected |
|
protected |
Definition at line 107 of file MultiArray.cpp.
pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::MultiArray | ( | typename std::enable_if< arg_helper< FirstDimension, Dims...>::value, bool >::type | , |
DimensionSize< Dims > const &... | sizes | ||
) |
Definition at line 130 of file MultiArray.cpp.
|
inline |
iterators acting over he entire data structure
useful for e.g std::copy of the entire structure without inspection
Definition at line 139 of file MultiArray.cpp.
|
inline |
Definition at line 145 of file MultiArray.cpp.
|
inline |
Definition at line 151 of file MultiArray.cpp.
|
inline |
Definition at line 169 of file MultiArray.cpp.
std::size_t pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions >::data_size | ( | ) | const |
the total size of data in all dimensions
Definition at line 313 of file MultiArray.cpp.
std::enable_if<std::is_same<Dim, FirstDimension>::value, DimensionSize<FirstDimension> >::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::dimension | ( | ) | const |
std::enable_if<!std::is_same<Dim, FirstDimension>::value, DimensionSize<Dim> >::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::dimension | ( | ) | const |
std::enable_if<!std::is_same<Dim, FirstDimension>::value, DimensionSize<Dim> >::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::dimension | ( | ) | const |
Definition at line 253 of file MultiArray.cpp.
std::enable_if<std::is_same<Dim, FirstDimension>::value, DimensionSize<FirstDimension> >::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::dimension | ( | ) | const |
Definition at line 261 of file MultiArray.cpp.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
Definition at line 301 of file MultiArray.cpp.
|
protected |
Definition at line 307 of file MultiArray.cpp.
std::enable_if<!arg_helper<FirstDimension, Dim, Dims...>::value, void>::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::do_resize | ( | std::size_t | total, |
DimensionSize< Dim > | size, | ||
DimensionSize< Dims >... | sizes | ||
) |
Definition at line 269 of file MultiArray.cpp.
std::enable_if<!arg_helper<FirstDimension, Dim, Dims...>::value, void>::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::do_resize | ( | std::size_t | total, |
DimensionSize< Dim > | size, | ||
DimensionSize< Dims >... | sizes, | ||
T const & | value | ||
) |
Definition at line 277 of file MultiArray.cpp.
std::enable_if<arg_helper<FirstDimension, Dim, Dims...>::value, void>::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::do_resize | ( | std::size_t | total, |
DimensionSize< Dim > | size, | ||
DimensionSize< Dims >... | sizes | ||
) |
Definition at line 285 of file MultiArray.cpp.
std::enable_if<arg_helper<FirstDimension, Dim, Dims...>::value, void>::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::do_resize | ( | std::size_t | total, |
DimensionSize< Dim > | size, | ||
DimensionSize< Dims >... | sizes, | ||
T const & | value | ||
) |
Definition at line 294 of file MultiArray.cpp.
void pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::do_transpose | ( | MultiArrayType & | ma, |
DimensionType const & | d | ||
) |
Definition at line 118 of file MultiArray.cpp.
|
protected |
|
inline |
Definition at line 157 of file MultiArray.cpp.
|
inline |
Definition at line 163 of file MultiArray.cpp.
bool pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions >::equal_size | ( | MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions > const & | o | ) | const |
return true if the sizes of each dimension are equivalent
Definition at line 319 of file MultiArray.cpp.
bool pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions >::operator== | ( | MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions > const & | o | ) | const |
compare data in the two arrays
Definition at line 325 of file MultiArray.cpp.
MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions...>::ReducedDimensionSliceType pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions >::operator[] | ( | DimensionIndex< FirstDimension > | index | ) |
take a slice of width 1 data at the specified index of the first dimension
This can be used to access elements in a similar way to c style arrays.
Definition at line 175 of file MultiArray.cpp.
MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions...>::ConstReducedDimensionSliceType pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, Dimensions >::operator[] | ( | DimensionIndex< FirstDimension > | index | ) | const |
Definition at line 182 of file MultiArray.cpp.
std::enable_if<has_dimension<MultiArray, Dim>::value && !std::is_same<Dim, FirstDimension>::value , typename OperatorSliceType<Dim>::type>::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::operator[] | ( | DimensionIndex< Dim > const & | ) |
std::enable_if<has_dimension<MultiArray, Dim>::value && !std::is_same<Dim, FirstDimension>::value , typename ConstOperatorSliceType<Dim>::type>::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::operator[] | ( | DimensionIndex< Dim > const & | ) | const |
std::enable_if<has_dimension<MultiArray<Alloc, T, SliceMixin, FirstDimension, Dimensions...>, Dim>::value&& !std::is_same<Dim, FirstDimension>::value, typename MultiArray<Alloc, T, SliceMixin, FirstDimension, Dimensions...>::template ConstOperatorSliceType<Dim>::type>::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::operator[] | ( | DimensionIndex< Dim > const & | index | ) | const |
Definition at line 192 of file MultiArray.cpp.
std::enable_if<has_dimension<MultiArray<Alloc, T, SliceMixin, FirstDimension, Dimensions...>, Dim>::value&& !std::is_same<Dim, FirstDimension>::value, typename MultiArray<Alloc, T, SliceMixin, FirstDimension, Dimensions...>::template OperatorSliceType<Dim>::type>::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::operator[] | ( | DimensionIndex< Dim > const & | index | ) |
Definition at line 201 of file MultiArray.cpp.
std::enable_if<std::is_same<Dim, FirstDimension>::value, DimensionSize<FirstDimension> >::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::size | ( | ) | const |
return a slice of the specified dimension spanning the index_range provided
no bonuds checking is performed. Undefined behaviour can result from requests for a slice outside the limits. An example to test bounds using the trim method:
std::enable_if<!std::is_same<Dim, FirstDimension>::value, DimensionSize<Dim> >::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::size | ( | ) | const |
std::enable_if<!std::is_same<Dim, FirstDimension>::value, DimensionSize<Dim> >::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::size | ( | ) | const |
Definition at line 237 of file MultiArray.cpp.
std::enable_if<std::is_same<Dim, FirstDimension>::value, DimensionSize<FirstDimension> >::type pss::astrotypes::MultiArray< Alloc, T, SliceMixin, FirstDimension, OtherDimensions >::size | ( | ) | const |
Definition at line 245 of file MultiArray.cpp.