Marray
Public Types | Public Member Functions | Friends | List of all members
andres::View< T, isConst, A > Class Template Reference

Array-Interface to an interval of memory. More...

#include <marray.hxx>

Inheritance diagram for andres::View< T, isConst, A >:
andres::ViewExpression< View< T, isConst, A >, T >

Public Types

typedef T value_type
typedef marray_detail::IfBool
< isConst, const T *, T * >
::type 
pointer
typedef const T * const_pointer
typedef marray_detail::IfBool
< isConst, const T &, T & >
::type 
reference
typedef const T & const_reference
typedef Iterator< T, isConst, A > iterator
typedef Iterator< T, true, A > const_iterator
typedef std::reverse_iterator
< iterator
reverse_iterator
typedef std::reverse_iterator
< const_iterator
const_reverse_iterator
typedef ViewExpression< View
< T, isConst, A >, T > 
base
typedef A::template rebind
< value_type >::other 
allocator_type
- Public Types inherited from andres::ViewExpression< View< T, isConst, A >, T >
typedef View< T, isConst, A > expression_type
typedef T value_type

Public Member Functions

 View (const allocator_type &=allocator_type())
 Empty constructor.
 View (pointer, const allocator_type &=allocator_type())
 Construct View from a scalar.
 View (const View< T, false, A > &)
 Construct View from a View on mutable data.
template<class ShapeIterator >
 View (ShapeIterator, ShapeIterator, pointer, const CoordinateOrder &=defaultOrder, const CoordinateOrder &=defaultOrder, const allocator_type &=allocator_type())
 Construct unstrided View.
template<class ShapeIterator , class StrideIterator >
 View (ShapeIterator, ShapeIterator, StrideIterator, pointer, const CoordinateOrder &, const allocator_type &=allocator_type())
 Construct strided View.
View< T, isConst, A > & operator= (const T &)
 Assignment.
View< T, isConst, A > & operator= (const View< T, true, A > &)
 Assignment.
View< T, isConst, A > & operator= (const View< T, false, A > &)
 Assignment.
template<class TLocal , bool isConstLocal, class ALocal >
View< T, isConst, A > & operator= (const View< TLocal, isConstLocal, ALocal > &)
 Assignment.
template<class E , class Te >
View< T, isConst, A > & operator= (const ViewExpression< E, Te > &)
void assign (const allocator_type &=allocator_type())
 Clear View.
template<class ShapeIterator >
void assign (ShapeIterator, ShapeIterator, pointer, const CoordinateOrder &=defaultOrder, const CoordinateOrder &=defaultOrder, const allocator_type &=allocator_type())
 Initialize unstrided View.
template<class ShapeIterator , class StrideIterator >
void assign (ShapeIterator, ShapeIterator, StrideIterator, pointer, const CoordinateOrder &, const allocator_type &=allocator_type())
 Initialize strided View.
const std::size_t dimension () const
 Get the dimension.
const std::size_t size () const
 Get the number of data items.
const std::size_t shape (const std::size_t) const
 Get the shape in one dimension.
const std::size_t * shapeBegin () const
 Get a constant iterator to the beginning of the shape vector.
const std::size_t * shapeEnd () const
 Get a constant iterator to the end of the shape vector.
const std::size_t strides (const std::size_t) const
 Get the strides in one dimension.
const std::size_t * stridesBegin () const
 Get a constant iterator to the beginning of the strides vector.
const std::size_t * stridesEnd () const
 Get a constant iterator to the end of the strides vector.
const CoordinateOrdercoordinateOrder () const
 Get the coordinate order used for scalar indexing and iterators.
const bool isSimple () const
 Determine whether the shape strides equal the strides of the View.
template<class TLocal , bool isConstLocal, class ALocal >
bool overlaps (const View< TLocal, isConstLocal, ALocal > &) const
 Check whether two Views overlap.
template<class U >
reference operator() (U)
 Reference data.
template<class U >
reference operator() (U) const
 Reference data.
reference operator() (const std::size_t, const std::size_t)
 Reference data in a 2-dimensional View by coordinates.
reference operator() (const std::size_t, const std::size_t) const
 Reference data in a 2-dimensional View by coordinates.
reference operator() (const std::size_t, const std::size_t, const std::size_t)
 Reference data in a 3-dimensional View by coordinates.
reference operator() (const std::size_t, const std::size_t, const std::size_t) const
 Reference data in a 3-dimensional View by coordinates.
reference operator() (const std::size_t, const std::size_t, const std::size_t, const std::size_t)
 Reference data in a 4-dimensional View by coordinates.
reference operator() (const std::size_t, const std::size_t, const std::size_t, const std::size_t) const
 Reference data in a 4-dimensional View by coordinates.
reference operator() (const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t)
 Reference data in a 5-dimensional View by coordinates.
reference operator() (const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t) const
 Reference data in a 5-dimensional View by coordinates.
reference operator() (const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t)
 Reference data in a 10-dimensional View by coordinates.
reference operator() (const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t, const std::size_t) const
 Reference data in a 10-dimensional View by coordinates.
template<class BaseIterator , class ShapeIterator >
void view (BaseIterator, ShapeIterator, View< T, isConst, A > &) const
 Get a sub-view with the same coordinate order.
template<class BaseIterator , class ShapeIterator >
void view (BaseIterator, ShapeIterator, const CoordinateOrder &, View< T, isConst, A > &) const
 Get a sub-view.
template<class BaseIterator , class ShapeIterator >
View< T, isConst, A > view (BaseIterator, ShapeIterator) const
 Get a sub-view with the same coordinate order.
template<class BaseIterator , class ShapeIterator >
View< T, isConst, A > view (BaseIterator, ShapeIterator, const CoordinateOrder &) const
 Get a sub-view.
template<class BaseIterator , class ShapeIterator >
void constView (BaseIterator, ShapeIterator, View< T, true, A > &) const
 Get a sub-view to constant data with the same coordinate order.
template<class BaseIterator , class ShapeIterator >
void constView (BaseIterator, ShapeIterator, const CoordinateOrder &, View< T, true, A > &) const
 Get a sub-view to constant data.
template<class BaseIterator , class ShapeIterator >
View< T, true, A > constView (BaseIterator, ShapeIterator) const
 Get a sub-view to constant data with the same coordinate order.
template<class BaseIterator , class ShapeIterator >
View< T, true, A > constView (BaseIterator, ShapeIterator, const CoordinateOrder &) const
 Get a sub-view to constant data.
iterator begin ()
 Get an iterator to the beginning.
iterator end ()
 Get the end-iterator.
const_iterator begin () const
 Get an iterator to the beginning.
const_iterator end () const
 Get the end-iterator.
reverse_iterator rbegin ()
 Get a reserve iterator to the beginning.
reverse_iterator rend ()
 Get the reverse end-iterator.
const_reverse_iterator rbegin () const
 Get a reserve iterator to the beginning.
const_reverse_iterator rend () const
 Get the reverse end-iterator.
template<class ShapeIterator >
void reshape (ShapeIterator, ShapeIterator)
 Reshape the View.
template<class CoordinateIterator >
void permute (CoordinateIterator)
 Permute dimensions.
void transpose (const std::size_t, const std::size_t)
 Exchange two dimensions.
void transpose ()
 Reverse dimensions.
void shift (const int)
 Cycle shift dimensions.
void squeeze ()
 Remove singleton dimensions by setting their coordinates to zero.
template<class ShapeIterator >
View< T, isConst, A > reshapedView (ShapeIterator, ShapeIterator) const
 Get a reshaped View.
template<class CoordinateIterator >
View< T, isConst, A > permutedView (CoordinateIterator) const
 Get a View with permuted dimensions.
View< T, isConst, A > transposedView (const std::size_t, const std::size_t) const
 Get a View with two dimensions exchanged.
View< T, isConst, A > transposedView () const
 Get a View with dimensions reversed.
View< T, isConst, A > shiftedView (const int) const
 Get a View which dimensions cycle shifted.
View< T, isConst, A > boundView (const std::size_t, const std::size_t=0) const
 Get a View where one coordinate is bound to a value.
View< T, isConst, A > squeezedView () const
 Get a View where all singleton dimensions have been removed by setting their coordinates to zero.
template<class CoordinateIterator >
void coordinatesToIndex (CoordinateIterator, std::size_t &) const
 Compute the index that corresponds to a sequence of coordinates.
template<class CoordinateIterator >
void coordinatesToOffset (CoordinateIterator, std::size_t &) const
 Compute the offset that corresponds to a sequence of coordinates.
template<class CoordinateIterator >
void indexToCoordinates (std::size_t, CoordinateIterator) const
 Compute the coordinate sequence that corresponds to an index.
void indexToOffset (std::size_t, std::size_t &) const
 Compute the offset that corresponds to an index.
std::string asString (const StringStyle &=MatrixStyle) const
 Output as string.
- Public Member Functions inherited from andres::ViewExpression< View< T, isConst, A >, T >
bool overlaps (const View< Tv, isConst, A > &v) const
const T & operator() (Accessor it) const
const T & operator[] (const std::size_t offset) const
 operator View< T, isConst, A > & ()
 operator View< T, isConst, A >const & () const

Friends

class View
class Marray

Detailed Description

template<class T, bool isConst, class A>
class andres::View< T, isConst, A >

Array-Interface to an interval of memory.

A view makes a subset of memory look as if it was stored in an Marray. With the help of a view, data in a subset of memory can be accessed and manipulated conveniently. In contrast to arrays which allocate and de-allocate their own memory, views only reference memory that has been allocated by other means. Perhaps the simplest and most important use of views is to read and manipulate sub-arrays.

Notes on arithmetic operators of View:

Definition at line 209 of file marray.hxx.

Member Typedef Documentation

template<class T, bool isConst, class A>
typedef A::template rebind<value_type>::other andres::View< T, isConst, A >::allocator_type

Definition at line 223 of file marray.hxx.

template<class T, bool isConst, class A>
typedef ViewExpression<View<T, isConst, A>, T> andres::View< T, isConst, A >::base

Definition at line 222 of file marray.hxx.

template<class T, bool isConst, class A>
typedef Iterator<T, true, A> andres::View< T, isConst, A >::const_iterator

Definition at line 219 of file marray.hxx.

template<class T, bool isConst, class A>
typedef const T* andres::View< T, isConst, A >::const_pointer

Definition at line 215 of file marray.hxx.

template<class T, bool isConst, class A>
typedef const T& andres::View< T, isConst, A >::const_reference

Definition at line 217 of file marray.hxx.

template<class T, bool isConst, class A>
typedef std::reverse_iterator<const_iterator> andres::View< T, isConst, A >::const_reverse_iterator

Definition at line 221 of file marray.hxx.

template<class T, bool isConst, class A>
typedef Iterator<T, isConst, A> andres::View< T, isConst, A >::iterator

Definition at line 218 of file marray.hxx.

template<class T, bool isConst, class A>
typedef marray_detail::IfBool<isConst, const T*, T*>::type andres::View< T, isConst, A >::pointer

Definition at line 214 of file marray.hxx.

template<class T, bool isConst, class A>
typedef marray_detail::IfBool<isConst, const T&, T&>::type andres::View< T, isConst, A >::reference

Definition at line 216 of file marray.hxx.

template<class T, bool isConst, class A>
typedef std::reverse_iterator<iterator> andres::View< T, isConst, A >::reverse_iterator

Definition at line 220 of file marray.hxx.

template<class T, bool isConst, class A>
typedef T andres::View< T, isConst, A >::value_type

Definition at line 213 of file marray.hxx.

Constructor & Destructor Documentation

template<class T , bool isConst, class A >
andres::View< T, isConst, A >::View ( const allocator_type allocator = allocator_type())
inline

Empty constructor.

The empty constructor sets the data pointer to 0. It does not allocate memory for a scalar.

Parameters
allocatorAllocator.

Definition at line 802 of file marray.hxx.

template<class T , bool isConst, class A >
andres::View< T, isConst, A >::View ( pointer  data,
const allocator_type allocator = allocator_type() 
)
inline

Construct View from a scalar.

Parameters
dataPointer to data.
allocatorAllocator.

Definition at line 833 of file marray.hxx.

template<class T, bool isConst, class A>
andres::View< T, isConst, A >::View ( const View< T, false, A > &  in)
inline

Construct View from a View on mutable data.

Parameters
inView on mutable data.

Definition at line 850 of file marray.hxx.

template<class T , bool isConst, class A >
template<class ShapeIterator >
andres::View< T, isConst, A >::View ( ShapeIterator  begin,
ShapeIterator  end,
pointer  data,
const CoordinateOrder externalCoordinateOrder = defaultOrder,
const CoordinateOrder internalCoordinateOrder = defaultOrder,
const allocator_type allocator = allocator_type() 
)
inline

Construct unstrided View.

Parameters
beginIterator to the beginning of a sequence that defines the shape.
endIterator to the end of this sequence.
dataPointer to data.
externalCoordinateOrderFlag specifying the order of coordinates based on which the strides are computed.
internalCoordinateOrderFlag specifying the order of coordinates used for scalar indexing and iterators.
allocatorAllocator.

Definition at line 876 of file marray.hxx.

template<class T , bool isConst, class A >
template<class ShapeIterator , class StrideIterator >
andres::View< T, isConst, A >::View ( ShapeIterator  begin,
ShapeIterator  end,
StrideIterator  it,
pointer  data,
const CoordinateOrder internalCoordinateOrder,
const allocator_type allocator = allocator_type() 
)
inline

Construct strided View.

Parameters
beginIterator to the beginning of a sequence that defines the shape.
endIterator to the end of this sequence.
itIterator to the beginning of a sequence that defines the strides.
dataPointer to data.
internalCoordinateOrderFlag specifying the order of coordinates used for scalar indexing and iterators.
allocatorAllocator.

Definition at line 907 of file marray.hxx.

Member Function Documentation

template<class T , bool isConst, class A >
void andres::View< T, isConst, A >::assign ( const allocator_type allocator = allocator_type())
inline

Clear View.

Leaves the View in the same state as if the empty constructor had been called.

See Also
View()

Reimplemented in andres::Marray< T, A >.

Definition at line 985 of file marray.hxx.

template<class T , bool isConst, class A >
template<class ShapeIterator >
void andres::View< T, isConst, A >::assign ( ShapeIterator  begin,
ShapeIterator  end,
pointer  data,
const CoordinateOrder externalCoordinateOrder = defaultOrder,
const CoordinateOrder internalCoordinateOrder = defaultOrder,
const allocator_type allocator = allocator_type() 
)
inline

Initialize unstrided View.

Parameters
beginIterator to the beginning of a sequence that defines the shape.
endIterator to the end of this sequence.
dataPointer to data.
externalCoordinateOrderFlag specifying the order of coordinates based on which the strides are computed.
internalCoordinateOrderFlag specifying the order of coordinates used for scalar indexing and iterators.
allocatorAllocator.

Definition at line 1010 of file marray.hxx.

template<class T , bool isConst, class A >
template<class ShapeIterator , class StrideIterator >
void andres::View< T, isConst, A >::assign ( ShapeIterator  begin,
ShapeIterator  end,
StrideIterator  it,
pointer  data,
const CoordinateOrder internalCoordinateOrder,
const allocator_type allocator = allocator_type() 
)
inline

Initialize strided View.

Parameters
beginIterator to the beginning of a sequence that defines the shape.
endIterator to the end of this sequence.
itIterator to the beginning of a sequence that defines the strides.
dataPointer to data.
internalCoordinateOrderFlag specifying the order of coordinates used for scalar indexing and iterators.
allocatorAllocator.

Definition at line 1044 of file marray.hxx.

template<class T , bool isConst, class A >
std::string andres::View< T, isConst, A >::asString ( const StringStyle style = MatrixStyle) const

Output as string.

Definition at line 2840 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::iterator andres::View< T, isConst, A >::begin ( )
inline

Get an iterator to the beginning.

Returns
Iterator.
See Also
end()

Definition at line 2594 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::const_iterator andres::View< T, isConst, A >::begin ( ) const
inline

Get an iterator to the beginning.

Returns
Iterator.
See Also
end()

Definition at line 2620 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A > andres::View< T, isConst, A >::boundView ( const std::size_t  dimension,
const std::size_t  value = 0 
) const

Get a View where one coordinate is bound to a value.

Binds one coordinate to a certain value. This reduces the dimension by 1.

Parameters
dimensionDimension of the coordinate to bind.
valueValue to assign to the coordinate.
Returns
The bound view.
See Also
squeeze(), squeezeView()

Definition at line 2255 of file marray.hxx.

template<class T, bool isConst, class A>
template<class BaseIterator , class ShapeIterator >
void andres::View< T, isConst, A >::constView ( BaseIterator  bit,
ShapeIterator  sit,
View< T, true, A > &  out 
) const
inline

Get a sub-view to constant data with the same coordinate order.

Parameters
bitIterator to the beginning of a coordinate sequence that determines the start position of the sub-view.
sitIterator to the beginning of a sequence that determines the shape of the sub-view.
outSub-View (output).

Definition at line 1964 of file marray.hxx.

template<class T, bool isConst, class A>
template<class BaseIterator , class ShapeIterator >
void andres::View< T, isConst, A >::constView ( BaseIterator  bit,
ShapeIterator  sit,
const CoordinateOrder internalCoordinateOrder,
View< T, true, A > &  out 
) const
inline

Get a sub-view to constant data.

Parameters
bitIterator to the beginning of a coordinate sequence that determines the start position of the sub-view.
sitIterator to the beginning of a sequence that determines the shape of the sub-view.
internalCoordinateOrderFlag to set the coordinate order for scalar indexing and iterators of the sub-view.
outSub-View (output).

Definition at line 1987 of file marray.hxx.

template<class T, bool isConst, class A>
template<class BaseIterator , class ShapeIterator >
View< T, true, A > andres::View< T, isConst, A >::constView ( BaseIterator  bit,
ShapeIterator  sit 
) const
inline

Get a sub-view to constant data with the same coordinate order.

Parameters
bitIterator to the beginning of a coordinate sequence that determines the start position of the sub-view.
sitIterator to the beginning of a sequence that determines the shape of the sub-view.
Returns
Sub-View.

Definition at line 2016 of file marray.hxx.

template<class T, bool isConst, class A>
template<class BaseIterator , class ShapeIterator >
View< T, true, A > andres::View< T, isConst, A >::constView ( BaseIterator  bit,
ShapeIterator  sit,
const CoordinateOrder internalCoordinateOrder 
) const
inline

Get a sub-view to constant data.

Parameters
bitIterator to the beginning of a coordinate sequence that determines the start position of the sub-view.
sitIterator to the beginning of a sequence that determines the shape of the sub-view.
internalCoordinateOrderFlag to set the coordinate order for scalar indexing and iterators of the sub-view.
Returns
Sub-View.

Definition at line 2040 of file marray.hxx.

template<class T , bool isConst, class A >
const CoordinateOrder & andres::View< T, isConst, A >::coordinateOrder ( ) const
inline

Get the coordinate order used for scalar indexing and iterators.

Returns
CoordinateOrder. enum: FirstMajorOrder, LastMajorOrder

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1695 of file marray.hxx.

template<class T , bool isConst, class A >
template<class CoordinateIterator >
void andres::View< T, isConst, A >::coordinatesToIndex ( CoordinateIterator  it,
std::size_t &  out 
) const
inline

Compute the index that corresponds to a sequence of coordinates.

Parameters
itAn iterator to the beginning of the coordinate sequence.
outIndex (output)
See Also
coordinatesToOffset(), indexToCoordinates(), and indexToOffset()

Definition at line 646 of file marray.hxx.

template<class T , bool isConst, class A >
template<class CoordinateIterator >
void andres::View< T, isConst, A >::coordinatesToOffset ( CoordinateIterator  it,
std::size_t &  out 
) const
inline

Compute the offset that corresponds to a sequence of coordinates.

Parameters
itAn iterator to the beginning of the coordinate sequence.
outIndex (output)
See Also
coordinatesToIndex(), indexToCoordinates(), and indexToOffset()

Definition at line 688 of file marray.hxx.

template<class T , bool isConst, class A >
const std::size_t andres::View< T, isConst, A >::dimension ( ) const
inline

Get the dimension.

Not well-defined if the data pointer is 0.

Returns
Dimension.

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1591 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::iterator andres::View< T, isConst, A >::end ( )
inline

Get the end-iterator.

Returns
Iterator.
See Also
begin()

Definition at line 2607 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::const_iterator andres::View< T, isConst, A >::end ( ) const
inline

Get the end-iterator.

Returns
Iterator.
See Also
begin()

Definition at line 2634 of file marray.hxx.

template<class T , bool isConst, class A >
template<class CoordinateIterator >
void andres::View< T, isConst, A >::indexToCoordinates ( std::size_t  index,
CoordinateIterator  outit 
) const
inline

Compute the coordinate sequence that corresponds to an index.

Parameters
indexIndex
outitAn iterator into a container into which the coordinate sequence is to be written (output).
See Also
coordinatesToIndex(), coordinatesToOffset(), and indexToOffset()

Definition at line 712 of file marray.hxx.

template<class T , bool isConst, class A >
void andres::View< T, isConst, A >::indexToOffset ( std::size_t  index,
std::size_t &  out 
) const
inline

Compute the offset that corresponds to an index.

Parameters
indexIndex.
outOffset (output).
See Also
coordinatesToIndex(), coordinatesToOffset(), and indexToCoordinates()

Definition at line 752 of file marray.hxx.

template<class T , bool isConst, class A >
const bool andres::View< T, isConst, A >::isSimple ( ) const
inline

Determine whether the shape strides equal the strides of the View.

Returns
bool.

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1707 of file marray.hxx.

template<class T , bool isConst, class A >
template<class U >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( u)
inline

Reference data.

Parameters
uIf u is an integer type, scalar indexing is performed. Otherwise, it is assumed that u is an iterator to the beginning of a coordinate sequence.
Returns
Reference to the entry at u.

Definition at line 1125 of file marray.hxx.

template<class T , bool isConst, class A >
template<class U >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( u) const
inline

Reference data.

Parameters
uIf u is an integer type, scalar indexing is performed. Otherwise, it is assumed that u is an iterator to the beginning of a coordinate sequence.
Returns
Reference to the entry at u.

Definition at line 1143 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( const std::size_t  c0,
const std::size_t  c1 
)
inline

Reference data in a 2-dimensional View by coordinates.

This function issues a runtime error if the View is not 2-dimensional.

Parameters
c01st coordinate.
c12nd coordinate.

Definition at line 1163 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( const std::size_t  c0,
const std::size_t  c1 
) const
inline

Reference data in a 2-dimensional View by coordinates.

This function issues a runtime error if the View is not 2-dimensional.

Parameters
c01st coordinate.
c12nd coordinate.

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1185 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( const std::size_t  c0,
const std::size_t  c1,
const std::size_t  c2 
)
inline

Reference data in a 3-dimensional View by coordinates.

This function issues a runtime error if the View is not 3-dimensional.

Parameters
c01st coordinate.
c12nd coordinate.
c23rd coordinate.

Definition at line 1208 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( const std::size_t  c0,
const std::size_t  c1,
const std::size_t  c2 
) const
inline

Reference data in a 3-dimensional View by coordinates.

This function issues a runtime error if the View is not 3-dimensional.

Parameters
c01st coordinate.
c12nd coordinate.
c23rd coordinate.

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1233 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( const std::size_t  c0,
const std::size_t  c1,
const std::size_t  c2,
const std::size_t  c3 
)
inline

Reference data in a 4-dimensional View by coordinates.

This function issues a runtime error if the View is not 4-dimensional.

Parameters
c01st coordinate.
c12nd coordinate.
c23rd coordinate.
c34th coordinate.

Definition at line 1259 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( const std::size_t  c0,
const std::size_t  c1,
const std::size_t  c2,
const std::size_t  c3 
) const
inline

Reference data in a 4-dimensional View by coordinates.

This function issues a runtime error if the View is not 4-dimensional.

Parameters
c01st coordinate.
c12nd coordinate.
c23rd coordinate.
c34th coordinate.

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1287 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( const std::size_t  c0,
const std::size_t  c1,
const std::size_t  c2,
const std::size_t  c3,
const std::size_t  c4 
)
inline

Reference data in a 5-dimensional View by coordinates.

This function issues a runtime error if the View is not 5-dimensional.

Parameters
c01st coordinate.
c12nd coordinate.
c23rd coordinate.
c34th coordinate.
c45th coordinate.

Definition at line 1316 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( const std::size_t  c0,
const std::size_t  c1,
const std::size_t  c2,
const std::size_t  c3,
const std::size_t  c4 
) const
inline

Reference data in a 5-dimensional View by coordinates.

This function issues a runtime error if the View is not 5-dimensional.

Parameters
c01st coordinate.
c12nd coordinate.
c23rd coordinate.
c34th coordinate.
c45th coordinate.

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1346 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( const std::size_t  c0,
const std::size_t  c1,
const std::size_t  c2,
const std::size_t  c3,
const std::size_t  c4,
const std::size_t  c5,
const std::size_t  c6,
const std::size_t  c7,
const std::size_t  c8,
const std::size_t  c9 
)
inline

Reference data in a 10-dimensional View by coordinates.

This function issues a runtime error if the View is not 5-dimensional.

Parameters
c01st coordinate.
c12nd coordinate.
c23rd coordinate.
c34th coordinate.
c45th coordinate.
c56th coordinate.
c67th coordinate.
c78th coordinate.
c89th coordinate.
c910th coordinate.

Definition at line 1382 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reference andres::View< T, isConst, A >::operator() ( const std::size_t  c0,
const std::size_t  c1,
const std::size_t  c2,
const std::size_t  c3,
const std::size_t  c4,
const std::size_t  c5,
const std::size_t  c6,
const std::size_t  c7,
const std::size_t  c8,
const std::size_t  c9 
) const
inline

Reference data in a 10-dimensional View by coordinates.

This function issues a runtime error if the View is not 5-dimensional.

Parameters
c01st coordinate.
c12nd coordinate.
c23rd coordinate.
c34th coordinate.
c45th coordinate.
c56th coordinate.
c67th coordinate.
c78th coordinate.
c89th coordinate.
c910th coordinate.

Definition at line 1425 of file marray.hxx.

template<class T, bool isConst, class A >
View< T, isConst, A > & andres::View< T, isConst, A >::operator= ( const T &  value)
inline

Assignment.

Parameters
valueValue.

All entries are set to value.

Reimplemented in andres::Marray< T, A >.

Definition at line 1805 of file marray.hxx.

template<class T, bool isConst, class A>
View< T, isConst, A > & andres::View< T, isConst, A >::operator= ( const View< T, true, A > &  in)
inline

Assignment.

operator= (the assignment operator) has a non-trivial behavior. In most cases, it will work as most programmers will expect. Here's a complete description of the semantics of to.operator=(from) or equivalently, to = from.

Consider the following cases: (1) 'to' is mutable (isConst == false) (a) 'from' is mutable (isConst == false) (i) 'to' is initialized (data_ != 0) (ii) 'to' is un-initialized (data_ == 0) (b) 'from' is constant (isConst == true) (2) 'to' is constant (isConst == true)

(i) The operator attempts to copy the data under view 'b' to the memory under view 'a'. This works if both views have the same size, regardless of their dimension and shape. Equality of sizes is checked by an assertion.

(ii) Unless &a == &b (self-assignment), the operator copies the (data) pointer of view 'b' to view 'a', without copying the data itself. In addition, all the properties of view 'b' are copied to view 'a'.

(b) The operator attempts to copy the data under view 'b' to the memory under view 'a'. This works if both views have the same size, regardless of their dimension and shape. Equality of sizes is checked by an assertion. If 'a' is un-initialized the assertion fails (because the size of a will be zero). Unlike in (ii), the pointer is not copied in this case. Thus, a conversion from mutable to const is prevented.

(2) Unless &a == &b (self-assignment), the operator copies the (data) pointer of view 'b' to view 'a', without copying the data itself. In addition, all the properties of view 'b' are copied to view 'a'. Note that changing the data under a constant view would be counter-intuitive.

Definition at line 1755 of file marray.hxx.

template<class T, bool isConst, class A>
View< T, isConst, A > & andres::View< T, isConst, A >::operator= ( const View< T, false, A > &  in)
inline

Assignment.

Definition at line 1770 of file marray.hxx.

template<class T , bool isConst, class A >
template<class TLocal , bool isConstLocal, class ALocal >
View< T, isConst, A > & andres::View< T, isConst, A >::operator= ( const View< TLocal, isConstLocal, ALocal > &  in)
inline

Assignment.

Reimplemented in andres::Marray< T, A >.

Definition at line 1786 of file marray.hxx.

template<class T , bool isConst, class A >
template<class E , class Te>
View< T, isConst, A > & andres::View< T, isConst, A >::operator= ( const ViewExpression< E, Te > &  expression)
inline

Reimplemented in andres::Marray< T, A >.

Definition at line 1847 of file marray.hxx.

template<class T , bool isConst, class A >
template<class TLocal , bool isConstLocal, class ALocal >
bool andres::View< T, isConst, A >::overlaps ( const View< TLocal, isConstLocal, ALocal > &  v) const
inline

Check whether two Views overlap.

This function returns true if two memory intervals overlap: (1) the interval between the first and the last element of the object whose member function overlaps() is called. (2) the interval between the first and the last element of v.

Note that this not necessarily implies the existence of an element that is addressed by both v and the current object. v could for instance address all odd elements in a vector while the current object addresses all even elements.

Parameters
vA view to compare with *this.
Returns
bool.

Definition at line 2810 of file marray.hxx.

template<class T , bool isConst, class A >
template<class CoordinateIterator >
void andres::View< T, isConst, A >::permute ( CoordinateIterator  begin)

Permute dimensions.

Parameters
beginIterator to the beginning of a sequence which has to contain the integers 0, ..., dimension()-1 in any order. Otherwise, a runtime error is thrown.
See Also
permutedView(), transpose(), transposedView(), shift(), shiftedView()

Definition at line 2374 of file marray.hxx.

template<class T , bool isConst, class A >
template<class CoordinateIterator >
View< T, isConst, A > andres::View< T, isConst, A >::permutedView ( CoordinateIterator  begin) const
inline

Get a View with permuted dimensions.

Parameters
beginIterator to the beginning of a sequence which has to contain the integers 0, ..., dimension()-1 in any order. Otherwise, a runtime error is thrown.
Returns
Permuted View.
See Also
permute(), transpose(), transposedView(), shift(), shiftedView()

Definition at line 2421 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reverse_iterator andres::View< T, isConst, A >::rbegin ( )
inline

Get a reserve iterator to the beginning.

Returns
Iterator.
See Also
rend()

Definition at line 2647 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::const_reverse_iterator andres::View< T, isConst, A >::rbegin ( ) const
inline

Get a reserve iterator to the beginning.

Returns
Iterator.
See Also
rend()

Definition at line 2671 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::reverse_iterator andres::View< T, isConst, A >::rend ( )
inline

Get the reverse end-iterator.

Returns
Iterator.
See Also
rbegin()

Definition at line 2659 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A >::const_reverse_iterator andres::View< T, isConst, A >::rend ( ) const
inline

Get the reverse end-iterator.

Returns
Iterator.
See Also
rbegin()

Definition at line 2683 of file marray.hxx.

template<class T , bool isConst, class A >
template<class ShapeIterator >
void andres::View< T, isConst, A >::reshape ( ShapeIterator  begin,
ShapeIterator  end 
)
inline

Reshape the View.

Two conditions have to be fulfilled in order for reshape to work:

  • The new and the old shape must have the same size.
  • The view must be simple, cf. isSimple().
Parameters
beginIterator to the beginning of a sequence that determines the new shape.
endIterator to the end of that sequence.
See Also
reshapedView(), isSimple()

Definition at line 2155 of file marray.hxx.

template<class T , bool isConst, class A >
template<class ShapeIterator >
View< T, isConst, A > andres::View< T, isConst, A >::reshapedView ( ShapeIterator  begin,
ShapeIterator  end 
) const
inline

Get a reshaped View.

Two conditions have to be fulfilled:

  • The new and the old shape must have the same size.
  • The view must be simple, cf. isSimple().
Parameters
beginIterator to the beginning of a sequence that determines the new shape.
endIterator to the end of that sequence.
See Also
reshape(), isSimple()

Definition at line 2188 of file marray.hxx.

template<class T , bool isConst, class A >
const std::size_t andres::View< T, isConst, A >::shape ( const std::size_t  dimension) const
inline

Get the shape in one dimension.

Parameters
dimensionDimension
Returns
Shape in that dimension.

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1605 of file marray.hxx.

template<class T , bool isConst, class A >
const std::size_t * andres::View< T, isConst, A >::shapeBegin ( ) const
inline

Get a constant iterator to the beginning of the shape vector.

Returns
iterator.
See Also
shapeEnd()

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1622 of file marray.hxx.

template<class T , bool isConst, class A >
const std::size_t * andres::View< T, isConst, A >::shapeEnd ( ) const
inline

Get a constant iterator to the end of the shape vector.

Returns
iterator.
See Also
shapeBegin()

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1636 of file marray.hxx.

template<class T , bool isConst, class A >
void andres::View< T, isConst, A >::shift ( const int  n)
inline

Cycle shift dimensions.

Parameters
nNumber of positions to shift
See Also
shiftedView(), permute(), permutedView(), transpose(), transposedView()

Definition at line 2545 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A > andres::View< T, isConst, A >::shiftedView ( const int  n) const
inline

Get a View which dimensions cycle shifted.

Parameters
nNumber of positions to shift
See Also
shift(), permute(), permutedView(), transpose(), transposedView()

Definition at line 2577 of file marray.hxx.

template<class T , bool isConst, class A >
const std::size_t andres::View< T, isConst, A >::size ( ) const
inline

Get the number of data items.

Returns
Size.

Reimplemented from andres::ViewExpression< View< T, isConst, A >, T >.

Definition at line 1578 of file marray.hxx.

template<class T , bool isConst, class A >
void andres::View< T, isConst, A >::squeeze ( )

Remove singleton dimensions by setting their coordinates to zero.

See Also
squeezedView(), boundView()

Definition at line 2295 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A > andres::View< T, isConst, A >::squeezedView ( ) const
inline

Get a View where all singleton dimensions have been removed by setting their coordinates to zero.

See Also
squeeze(), boundView()

Definition at line 2335 of file marray.hxx.

template<class T , bool isConst, class A >
const std::size_t andres::View< T, isConst, A >::strides ( const std::size_t  dimension) const
inline

Get the strides in one dimension.

Parameters
dimensionDimension
Returns
Stride in that dimension.

Definition at line 1651 of file marray.hxx.

template<class T , bool isConst, class A >
const std::size_t * andres::View< T, isConst, A >::stridesBegin ( ) const
inline

Get a constant iterator to the beginning of the strides vector.

Returns
iterator.
See Also
stridesEnd()

Definition at line 1668 of file marray.hxx.

template<class T , bool isConst, class A >
const std::size_t * andres::View< T, isConst, A >::stridesEnd ( ) const
inline

Get a constant iterator to the end of the strides vector.

Returns
iterator.
See Also
stridesBegin()

Definition at line 1682 of file marray.hxx.

template<class T , bool isConst, class A >
void andres::View< T, isConst, A >::transpose ( const std::size_t  c1,
const std::size_t  c2 
)

Exchange two dimensions.

Parameters
c1Dimension
c2Dimension
See Also
permute(), permutedView(), shift(), shiftedView()

Definition at line 2439 of file marray.hxx.

template<class T , bool isConst, class A >
void andres::View< T, isConst, A >::transpose ( )

Reverse dimensions.

See Also
transposedView(), permute(), permutedView(), shift(), shiftedView()

Definition at line 2478 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A > andres::View< T, isConst, A >::transposedView ( const std::size_t  c1,
const std::size_t  c2 
) const
inline

Get a View with two dimensions exchanged.

Parameters
c1Dimension
c2Dimension
Returns
Transposed View.
See Also
transpose(), permute(), permutedView(), shift(), shiftedView()

Definition at line 2511 of file marray.hxx.

template<class T , bool isConst, class A >
View< T, isConst, A > andres::View< T, isConst, A >::transposedView ( ) const
inline

Get a View with dimensions reversed.

Returns
View with dimensions reversed.
See Also
transpose(), permute(), permutedView(), shift(), shiftedView()

Definition at line 2529 of file marray.hxx.

template<class T, bool isConst, class A>
template<class BaseIterator , class ShapeIterator >
void andres::View< T, isConst, A >::view ( BaseIterator  bit,
ShapeIterator  sit,
View< T, isConst, A > &  out 
) const
inline

Get a sub-view with the same coordinate order.

Parameters
bitIterator to the beginning of a coordinate sequence that determines the start position of the sub-view.
sitIterator to the beginning of a sequence that determines the shape of the sub-view.
outSub-View (output).

Definition at line 1867 of file marray.hxx.

template<class T, bool isConst, class A>
template<class BaseIterator , class ShapeIterator >
void andres::View< T, isConst, A >::view ( BaseIterator  bit,
ShapeIterator  sit,
const CoordinateOrder internalCoordinateOrder,
View< T, isConst, A > &  out 
) const
inline

Get a sub-view.

Parameters
bitIterator to the beginning of a coordinate sequence that determines the start position of the sub-view.
sitIterator to the beginning of a sequence that determines the shape of the sub-view.
internalCoordinateOrderFlag to set the coordinate order for scalar indexing and iterators of the sub-view.
outSub-View (output).

Definition at line 1890 of file marray.hxx.

template<class T, bool isConst, class A>
template<class BaseIterator , class ShapeIterator >
View< T, isConst, A > andres::View< T, isConst, A >::view ( BaseIterator  bit,
ShapeIterator  sit 
) const
inline

Get a sub-view with the same coordinate order.

Parameters
bitIterator to the beginning of a coordinate sequence that determines the start position of the sub-view.
sitIterator to the beginning of a sequence that determines the shape of the sub-view.
Returns
Sub-View.

Definition at line 1916 of file marray.hxx.

template<class T, bool isConst, class A>
template<class BaseIterator , class ShapeIterator >
View< T, isConst, A > andres::View< T, isConst, A >::view ( BaseIterator  bit,
ShapeIterator  sit,
const CoordinateOrder internalCoordinateOrder 
) const
inline

Get a sub-view.

Parameters
bitIterator to the beginning of a coordinate sequence that determines the start position of the sub-view.
sitIterator to the beginning of a sequence that determines the shape of the sub-view.
internalCoordinateOrderFlag to set the coordinate order for scalar indexing and iterators of the sub-view.
Returns
Sub-View.

Definition at line 1940 of file marray.hxx.

Friends And Related Function Documentation

template<class T, bool isConst, class A>
friend class Marray
friend

Definition at line 443 of file marray.hxx.

template<class T, bool isConst, class A>
friend class View
friend

Definition at line 441 of file marray.hxx.