GEOSX
Public Types | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE > Class Template Reference

This class serves to provide a "view" of a multidimensional array. More...

#include <ArrayView.hpp>

Public Types

using ValueType = T
 The type of the values in the ArrayView.
 
using IndexType = INDEX_TYPE
 The integer type used for indexing.
 
using NestedViewType = ArrayView< std::remove_reference_t< typeManipulation::NestedViewType< T > >, NDIM, USD, INDEX_TYPE, BUFFER_TYPE >
 The type when all inner array classes are converted to const views.
 
using NestedViewTypeConst = ArrayView< std::remove_reference_t< typeManipulation::NestedViewTypeConst< T > >, NDIM, USD, INDEX_TYPE, BUFFER_TYPE >
 The type when all inner array classes are converted to const views and the inner most view's values are also const.
 
using SliceType = ArraySlice< T, NDIM, USD, INDEX_TYPE > const
 The type of the ArrayView when converted to an ArraySlice.
 
using SliceTypeConst = ArraySlice< T const, NDIM, USD, INDEX_TYPE > const
 The type of the ArrayView when converted to an immutable ArraySlice.
 
using value_type = T
 The type of the values in the ArrayView, here for stl compatability.
 
using size_type = INDEX_TYPE
 The integer type used for indexing, here for stl compatability.
 

Public Member Functions

Constructors, destructor and assignment operators.
 ArrayView ()=default
 A constructor to create an uninitialized ArrayView. More...
 
constexpr ArrayView (ArrayView const &source) noexcept
 Copy Constructor. More...
 
template<typename U , typename = std::enable_if_t< !std::is_same< T, U >::value >>
constexpr ArrayView (ArrayView< U, NDIM, USD, INDEX_TYPE, BUFFER_TYPE > const &source)
 Construct a new ArrayView from an ArrayView with a different type. More...
 
 ArrayView (ArrayView &&source)=default
 Move constructor, creates a shallow copy and invalidates the source. More...
 
constexpr ArrayView (typeManipulation::CArray< INDEX_TYPE, NDIM > const &dims, typeManipulation::CArray< INDEX_TYPE, NDIM > const &strides, int const singleParameterResizeIndex, BUFFER_TYPE< T > const &buffer)
 Construct a new ArrayView from existing components. More...
 
 ~ArrayView ()=default
 The default destructor.
 
LVARRAY_INTEL_CONSTEXPR ArrayViewoperator= (ArrayView &&rhs)
 Move assignment operator, creates a shallow copy and invalidates the source. More...
 
LVARRAY_INTEL_CONSTEXPR ArrayViewoperator= (ArrayView const &rhs) noexcept
 Copy assignment operator, creates a shallow copy. More...
 
ArrayView and ArraySlice creation methods and user defined conversions.
constexpr ArrayView toView () const &
 
constexpr ArrayView< T const, NDIM, USD, INDEX_TYPE, BUFFER_TYPE > toViewConst () const &
 
constexpr NestedViewType toNestedView () const &
 
constexpr NestedViewTypeConst toNestedViewConst () const &
 
constexpr ArraySlice< T, NDIM, USD, INDEX_TYPE > toSlice () const &noexcept
 
constexpr ArraySlice< T, NDIM, USD, INDEX_TYPE > toSlice () const &&noexcept=delete
 Overload for rvalues that is deleted. More...
 
constexpr ArraySlice< T const, NDIM, USD, INDEX_TYPE > toSliceConst () const &noexcept
 
constexpr ArraySlice< T const, NDIM, USD, INDEX_TYPE > toSliceConst () const &&noexcept=delete
 Overload for rvalues that is deleted. More...
 
template<typename _T = T>
constexpr operator std::enable_if_t< !std::is_const< _T >::value, ArrayView< T const, NDIM, USD, INDEX_TYPE, BUFFER_TYPE > > () const noexcept
 A user defined conversion operator (UDC) to an ArrayView< T const, ... >. More...
 
constexpr operator ArraySlice< T, NDIM, USD, INDEX_TYPE > () const &noexcept
 
constexpr operator ArraySlice< T, NDIM, USD, INDEX_TYPE > () const &&noexcept=delete
 Overload for rvalues that is deleted. More...
 
template<typename _T = T>
constexpr operator std::enable_if_t< !std::is_const< _T >::value, ArraySlice< T const, NDIM, USD, INDEX_TYPE > const > () const &noexcept
 
template<typename _T = T>
constexpr operator std::enable_if_t< !std::is_const< _T >::value, ArraySlice< T const, NDIM, USD, INDEX_TYPE > const > () const &&noexcept=delete
 Overload for rvalues that is deleted. More...
 
Attribute querying methods
constexpr INDEX_TYPE size () const noexcept
 
constexpr INDEX_TYPE size (int const dim) const noexcept
 
constexpr bool empty () const
 
constexpr INDEX_TYPE capacity () const
 
constexpr int getSingleParameterResizeIndex () const
 
template<typename ... INDICES>
constexpr INDEX_TYPE linearIndex (INDICES const ... indices) const
 
constexpr INDEX_TYPE const * dims () const noexcept
 
constexpr typeManipulation::CArray< INDEX_TYPE, NDIM > const & dimsArray () const
 
constexpr INDEX_TYPE const * strides () const noexcept
 
constexpr typeManipulation::CArray< INDEX_TYPE, NDIM > const & stridesArray () const
 
constexpr BUFFER_TYPE< T > const & dataBuffer () const
 
Methods that provide access to the data.
template<int _NDIM = NDIM>
constexpr std::enable_if_t<(_NDIM > 1), ArraySlice< T, NDIM - 1, USD - 1, INDEX_TYPE > > operator[] (INDEX_TYPE const index) const &noexcept
 
template<int _NDIM = NDIM>
constexpr std::enable_if_t<(_NDIM > 1), ArraySlice< T, NDIM - 1, USD - 1, INDEX_TYPE > > operator[] (INDEX_TYPE const index) const &&noexcept=delete
 Overload for rvalues that is deleted. More...
 
template<int _NDIM = NDIM>
constexpr std::enable_if_t< _NDIM==1, T &> operator[] (INDEX_TYPE const index) const &noexcept
 
template<typename ... INDICES>
constexpr T & operator() (INDICES... indices) const
 
constexpr T * data () const
 
constexpr T * begin () const
 
constexpr T * end () const
 
T & front () const
 
T & back () const
 
Methods that set all the values
template<typename POLICY >
void setValues (T const &value) const
 Set all entries in the array to value. More...
 
void zero () const
 Use memset to set all the values in the array to 0. More...
 
template<typename POLICY >
void setValues (ArrayView< T const, NDIM, USD, INDEX_TYPE, BUFFER_TYPE > const &rhs) const
 Set entries to values from another compatible ArrayView. More...
 
Methods dealing with memory spaces
MemorySpace getPreviousSpace () const
 
void registerTouch (MemorySpace const space) const
 Touch the memory in space. More...
 
void move (MemorySpace const space, bool const touch=true) const
 Move the Array to the given execution space, optionally touching it. More...
 

Static Public Attributes

static constexpr int NDIM = NDIM_TPARAM
 The number of dimensions.
 
static constexpr int USD = USD_TPARAM
 The unit stride dimension.
 

Protected Member Functions

constexpr ArrayView (bool) noexcept
 Protected constructor to be used by the Array class. More...
 
constexpr ArrayView (BUFFER_TYPE< T > &&buffer) noexcept
 Protected constructor to be used by the Array class. More...
 

Protected Attributes

typeManipulation::CArray< INDEX_TYPE, NDIMm_dims = { 0 }
 the dimensions of the array.
 
typeManipulation::CArray< INDEX_TYPE, NDIMm_strides = { 0 }
 the strides of the array.
 
BUFFER_TYPE< T > m_dataBuffer
 this data member contains the actual data for the array.
 
int m_singleParameterResizeIndex = 0
 

Detailed Description

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
class LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >

This class serves to provide a "view" of a multidimensional array.

Template Parameters
Ttype of data that is contained by the array
NDIM_TPARAMnumber of dimensions in array (e.g. NDIM=1->vector, NDIM=2->Matrix, etc. ).
USDthe dimension with a unit stride, in an Array with a standard layout this is the last dimension.
INDEX_TYPEthe integer to use for indexing.
BUFFER_TYPEA class that defines how to actually allocate memory for the Array. Must take one template argument that describes the type of the data being stored (T).

When using the ChaiBuffer the copy copy constructor of this class calls the copy constructor for the ChaiBuffer which will move the data to the location of the touch (host or device). In general, the ArrayView should be what is passed by value into a lambda that is used to launch kernels as it copy will trigger the desired data motion onto the appropriate memory space.

Key features: 1) When using a ChaiBuffer as the BUFFER_TYPE the ArrayView copy constructor will move the data to the current execution space. 2) Defines a slicing operator[]. 3) Defines operator() array accessor. 3) operator[] and operator() are all const and may be called in non-mutable lambdas. 4) Conversion operators to go from ArrayView<T> to ArrayView<T const>. 5) Since the Array is derived from ArrayView, it may be upcasted: Array<T,NDIM> array; ArrayView<T,NDIM> const & arrView = array;

A good guideline is to upcast to an ArrayView when you don't need allocation capabilities that are only present in Array.

Definition at line 68 of file ArrayView.hpp.

Constructor & Destructor Documentation

◆ ArrayView() [1/7]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::ArrayView ( )
default

A constructor to create an uninitialized ArrayView.

Note
An uninitialized ArrayView should not be used until it is assigned to.

◆ ArrayView() [2/7]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::ArrayView ( ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE > const &  source)
inlinenoexcept

Copy Constructor.

Parameters
sourceThe object to copy.
Note
Triggers the copy constructor for
Template Parameters
BUFFER_TYPE.When using the ChaiBuffer this can move the underlying buffer to a new memory space if the execution context is set.

Definition at line 127 of file ArrayView.hpp.

◆ ArrayView() [3/7]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<typename U , typename = std::enable_if_t< !std::is_same< T, U >::value >>
constexpr LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::ArrayView ( ArrayView< U, NDIM, USD, INDEX_TYPE, BUFFER_TYPE > const &  source)
inlineexplicit

Construct a new ArrayView from an ArrayView with a different type.

Template Parameters
UThe type to convert from.
Parameters
sourceThe ArrayView to convert.

If the size of T and U are different then either the size of T must be a multiple of the size of U or vice versa. If the types have different size then size of the unit stride dimension is changed accordingly.

Note
This is useful for converting between single values and SIMD types such as CUDA's __half and __half2.
Array< int, 2, RAJA::PERM_IJ, std::ptrdiff_t, MallocBuffer > x( 5, 10 );
ArrayView< int[ 2 ], 2, 1, std::ptrdiff_t, MallocBuffer > y( x.toView() );
assert( y.size( 1 ) == x.size( 1 ) / 2 );
assert( y( 3, 4 )[ 0 ] == x( 3, 8 ) );

Definition at line 151 of file ArrayView.hpp.

◆ ArrayView() [4/7]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::ArrayView ( ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE > &&  source)
default

Move constructor, creates a shallow copy and invalidates the source.

Parameters
sourceobject to move.
Note
Since this invalidates the source this should not be used when source is the parent of an Array. Do not do this:
Array< int, RAJA::PERM_I, std::ptrdiff_t, MallocBuffer > array( 10 );
ArrayView< int, 1, 0, std::ptrdiff_t, MallocBuffer > view = std::move( array.toView() );
However this is ok:
Array< int, RAJA::PERM_I, std::ptrdiff_t, MallocBuffer > array( 10 );
ArrayView< int, 1, 0, std::ptrdiff_t, MallocBuffer > view = array.toView();
ArrayView< int, 1, 0, std::ptrdiff_t, MallocBuffer > anotherView = std::move( view );

◆ ArrayView() [5/7]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::ArrayView ( typeManipulation::CArray< INDEX_TYPE, NDIM > const &  dims,
typeManipulation::CArray< INDEX_TYPE, NDIM > const &  strides,
int const  singleParameterResizeIndex,
BUFFER_TYPE< T > const &  buffer 
)
inlineexplicit

Construct a new ArrayView from existing components.

Parameters
dimsThe array of dimensions.
stridesThe array of strides.
singleParameterResizeIndexThe single parameter resize index.
bufferThe buffer to copy construct.

Definition at line 194 of file ArrayView.hpp.

◆ ArrayView() [6/7]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::ArrayView ( bool  )
inlineexplicitprotectednoexcept

Protected constructor to be used by the Array class.

Note
The unused boolean parameter is to distinguish this from the default constructor.

Definition at line 723 of file ArrayView.hpp.

◆ ArrayView() [7/7]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::ArrayView ( BUFFER_TYPE< T > &&  buffer)
inlineprotectednoexcept

Protected constructor to be used by the Array class.

Construct an empty ArrayView from buffer.

Parameters
bufferThe buffer use.

Definition at line 740 of file ArrayView.hpp.

Member Function Documentation

◆ back()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
T& LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::back ( ) const
inline
Returns
Return a reference to the last value.

Definition at line 591 of file ArrayView.hpp.

◆ begin()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr T* LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::begin ( ) const
inline
Returns
Return an iterator to the begining of the data.

Definition at line 572 of file ArrayView.hpp.

◆ capacity()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr INDEX_TYPE LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::capacity ( ) const
inline
Returns
Return the maximum number of values the Array can hold without reallocation.

Definition at line 436 of file ArrayView.hpp.

◆ data()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr T* LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::data ( ) const
inline
Returns
Return a pointer to the values.

Definition at line 565 of file ArrayView.hpp.

◆ dataBuffer()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr BUFFER_TYPE< T > const& LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::dataBuffer ( ) const
inline
Returns
A reference to the underlying buffer.
Note
Use with caution.

Definition at line 495 of file ArrayView.hpp.

◆ dims()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr INDEX_TYPE const* LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::dims ( ) const
inlinenoexcept
Returns
A pointer to the array containing the size of each dimension.

Definition at line 466 of file ArrayView.hpp.

◆ dimsArray()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr typeManipulation::CArray< INDEX_TYPE, NDIM > const& LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::dimsArray ( ) const
inline
Returns
The CArray containing the size of each dimension.

Definition at line 473 of file ArrayView.hpp.

◆ empty()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr bool LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::empty ( ) const
inline
Returns
Return true if the array is empty.

Definition at line 429 of file ArrayView.hpp.

◆ end()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr T* LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::end ( ) const
inline
Returns
Return an iterator to the end of the data.

Definition at line 579 of file ArrayView.hpp.

◆ front()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
T& LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::front ( ) const
inline
Returns
Return a reference to the first value.

Definition at line 585 of file ArrayView.hpp.

◆ getPreviousSpace()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
MemorySpace LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::getPreviousSpace ( ) const
inline
Returns
The last space the Array was moved to.

Definition at line 670 of file ArrayView.hpp.

◆ getSingleParameterResizeIndex()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr int LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::getSingleParameterResizeIndex ( ) const
inline
Returns
Return the default resize dimension.

Definition at line 443 of file ArrayView.hpp.

◆ linearIndex()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<typename ... INDICES>
constexpr INDEX_TYPE LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::linearIndex ( INDICES const ...  indices) const
inline
Template Parameters
INDICESA variadic pack of integral types.
Returns
Return the linear index from a multidimensional index.
Parameters
indicesThe indices of the value to get the linear index of.

Definition at line 453 of file ArrayView.hpp.

◆ move()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
void LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::move ( MemorySpace const  space,
bool const  touch = true 
) const
inline

Move the Array to the given execution space, optionally touching it.

Parameters
spacethe space to move the Array to.
touchwhether the Array should be touched in the new space or not.
Note
Not all Buffers support memory movement.

Definition at line 686 of file ArrayView.hpp.

◆ operator ArraySlice< T, NDIM, USD, INDEX_TYPE >() [1/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator ArraySlice< T, NDIM, USD, INDEX_TYPE > ( ) const &
inlinenoexcept
Returns
Return an ArraySlice representing this ArrayView.

Definition at line 351 of file ArrayView.hpp.

◆ operator ArraySlice< T, NDIM, USD, INDEX_TYPE >() [2/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator ArraySlice< T, NDIM, USD, INDEX_TYPE > ( ) const &&
inlinedeletenoexcept

Overload for rvalues that is deleted.

Returns
A null ArraySlice. This conversion cannot be called on a rvalue since the ArraySlice would contain pointers to the dims and strides of the current ArrayView that is about to be destroyed. This overload prevents that from happening.

◆ operator std::enable_if_t< !std::is_const< _T >::value, ArraySlice< T const, NDIM, USD, INDEX_TYPE > const >() [1/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<typename _T = T>
constexpr LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator std::enable_if_t< !std::is_const< _T >::value, ArraySlice< T const, NDIM, USD, INDEX_TYPE > const > ( ) const &
inlinenoexcept
Returns
Return an immutable ArraySlice representing this ArrayView.

Definition at line 370 of file ArrayView.hpp.

◆ operator std::enable_if_t< !std::is_const< _T >::value, ArraySlice< T const, NDIM, USD, INDEX_TYPE > const >() [2/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<typename _T = T>
constexpr LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator std::enable_if_t< !std::is_const< _T >::value, ArraySlice< T const, NDIM, USD, INDEX_TYPE > const > ( ) const &&
inlinedeletenoexcept

Overload for rvalues that is deleted.

Returns
A null ArraySlice. This conversion cannot be called on a rvalue since the ArraySlice would contain pointers to the dims and strides of the current ArrayView that is about to be destroyed. This overload prevents that from happening.

◆ operator std::enable_if_t< !std::is_const< _T >::value, ArrayView< T const, NDIM, USD, INDEX_TYPE, BUFFER_TYPE > >()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<typename _T = T>
constexpr LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator std::enable_if_t< !std::is_const< _T >::value, ArrayView< T const, NDIM, USD, INDEX_TYPE, BUFFER_TYPE > > ( ) const
inlinenoexcept

A user defined conversion operator (UDC) to an ArrayView< T const, ... >.

Returns
A new ArrayView where T is const.

Definition at line 344 of file ArrayView.hpp.

◆ operator()()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<typename ... INDICES>
constexpr T& LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator() ( INDICES...  indices) const
inline
Template Parameters
INDICESA variadic pack of integral types.
Returns
Return a reference to the value at the given multidimensional index.
Parameters
indicesThe indices of the value to access.

Definition at line 555 of file ArrayView.hpp.

◆ operator=() [1/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
LVARRAY_INTEL_CONSTEXPR ArrayView& LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator= ( ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE > &&  rhs)
inline

Move assignment operator, creates a shallow copy and invalidates the source.

Parameters
rhsThe object to copy.
Returns
*this.
Note
Since this invalidates the source this should not be used when rhs is the parent of an Array. Do not do this:
Array< int, RAJA::PERM_I, std::ptrdiff_t, MallocBuffer > array( 10 );
ArrayView< int, 1, 0, std::ptrdiff_t, MallocBuffer > view;
view = std::move( array.toView() );
However this is ok:
Array< int, RAJA::PERM_I, std::ptrdiff_t, MallocBuffer > array( 10 );
ArrayView< int, 1, 0, std::ptrdiff_t, MallocBuffer > view = array.toView();
ArrayView< int, 1, 0, std::ptrdiff_t, MallocBuffer > anotherView;
anotherView = std::move( view );

Definition at line 227 of file ArrayView.hpp.

◆ operator=() [2/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
LVARRAY_INTEL_CONSTEXPR ArrayView& LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator= ( ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE > const &  rhs)
inlinenoexcept

Copy assignment operator, creates a shallow copy.

Parameters
rhsobject to copy.
Returns
*this

Definition at line 246 of file ArrayView.hpp.

◆ operator[]() [1/3]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<int _NDIM = NDIM>
constexpr std::enable_if_t< (_NDIM > 1), ArraySlice< T, NDIM - 1, USD - 1, INDEX_TYPE > > LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator[] ( INDEX_TYPE const  index) const &
inlinenoexcept
Returns
Return a lower dimensional slice of this ArrayView.
Parameters
indexThe index of the slice to create.
Note
This method is only active when NDIM > 1.

Definition at line 513 of file ArrayView.hpp.

◆ operator[]() [2/3]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<int _NDIM = NDIM>
constexpr std::enable_if_t< (_NDIM > 1), ArraySlice< T, NDIM - 1, USD - 1, INDEX_TYPE > > LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator[] ( INDEX_TYPE const  index) const &&
inlinedeletenoexcept

Overload for rvalues that is deleted.

Parameters
indexNot used.
Returns
A null ArraySlice. The multidimensional operator[] cannot be called on a rvalue since the ArraySlice would contain pointers to the object that is about to be destroyed. This overload prevents that from happening.

◆ operator[]() [3/3]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<int _NDIM = NDIM>
constexpr std::enable_if_t< _NDIM == 1, T & > LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::operator[] ( INDEX_TYPE const  index) const &
inlinenoexcept
Returns
Return a reference to the value at the given index.
Parameters
indexThe index of the value to access.
Note
This method is only active when NDIM == 1.

Definition at line 542 of file ArrayView.hpp.

◆ registerTouch()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
void LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::registerTouch ( MemorySpace const  space) const
inline

Touch the memory in space.

Parameters
spaceThe memory space in which a touch will be recorded.

Definition at line 677 of file ArrayView.hpp.

◆ setValues() [1/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<typename POLICY >
void LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::setValues ( T const &  value) const
inline

Set all entries in the array to value.

Template Parameters
POLICYThe RAJA policy to use.
Parameters
valueThe value to set entries to.
Note
The view is moved to and touched in the appropriate space.

Definition at line 609 of file ArrayView.hpp.

◆ setValues() [2/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
template<typename POLICY >
void LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::setValues ( ArrayView< T const, NDIM, USD, INDEX_TYPE, BUFFER_TYPE > const &  rhs) const
inline

Set entries to values from another compatible ArrayView.

Template Parameters
POLICYThe RAJA policy to use.
Parameters
rhsThe source array view, must have the same dimensions and strides as *this.

Definition at line 644 of file ArrayView.hpp.

◆ size() [1/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr INDEX_TYPE LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::size ( ) const
inlinenoexcept
Returns
Return the allocated size.

Definition at line 396 of file ArrayView.hpp.

◆ size() [2/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr INDEX_TYPE LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::size ( int const  dim) const
inlinenoexcept
Returns
Return the length of the given dimension.
Parameters
dimThe dimension to get the length of.

Definition at line 416 of file ArrayView.hpp.

◆ strides()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr INDEX_TYPE const* LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::strides ( ) const
inlinenoexcept
Returns
A pointer to the array containing the stride of each dimension.

Definition at line 480 of file ArrayView.hpp.

◆ stridesArray()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr typeManipulation::CArray< INDEX_TYPE, NDIM > const& LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::stridesArray ( ) const
inline
Returns
The CArray containing the stride of each dimension.

Definition at line 487 of file ArrayView.hpp.

◆ toNestedView()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr NestedViewType LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::toNestedView ( ) const &
inline
Returns
Return *this after converting any nested arrays to const views.

Definition at line 289 of file ArrayView.hpp.

◆ toNestedViewConst()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr NestedViewTypeConst LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::toNestedViewConst ( ) const &
inline
Returns
Return *this after converting any nested arrays to const views to const values.

Definition at line 296 of file ArrayView.hpp.

◆ toSlice() [1/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr ArraySlice< T, NDIM, USD, INDEX_TYPE > LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::toSlice ( ) const &
inlinenoexcept
Returns
Return an ArraySlice representing this ArrayView.

Definition at line 304 of file ArrayView.hpp.

◆ toSlice() [2/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr ArraySlice< T, NDIM, USD, INDEX_TYPE > LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::toSlice ( ) const &&
inlinedeletenoexcept

Overload for rvalues that is deleted.

Returns
A null ArraySlice.
Note
This cannot be called on a rvalue since the ArraySlice would contain pointers to the dims and strides of the current ArrayView that is about to be destroyed. This overload prevents that from happening.

◆ toSliceConst() [1/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr ArraySlice< T const, NDIM, USD, INDEX_TYPE > LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::toSliceConst ( ) const &
inlinenoexcept
Returns
Return an immutable ArraySlice representing this ArrayView.

Definition at line 323 of file ArrayView.hpp.

◆ toSliceConst() [2/2]

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr ArraySlice< T const, NDIM, USD, INDEX_TYPE > LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::toSliceConst ( ) const &&
inlinedeletenoexcept

Overload for rvalues that is deleted.

Returns
A null ArraySlice. This cannot be called on a rvalue since the ArraySlice would contain pointers to the dims and strides of the current ArrayView that is about to be destroyed. This overload prevents that from happening.

◆ toView()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr ArrayView LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::toView ( ) const &
inline
Returns
Return a new ArrayView.

Definition at line 270 of file ArrayView.hpp.

◆ toViewConst()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
constexpr ArrayView< T const, NDIM, USD, INDEX_TYPE, BUFFER_TYPE > LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::toViewConst ( ) const &
inline
Returns
Return a new ArrayView where T is const.

Definition at line 277 of file ArrayView.hpp.

◆ zero()

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
void LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::zero ( ) const
inline

Use memset to set all the values in the array to 0.

This is preferred over setValues< POLICY >( 0 ) for numeric types since it is much faster in most cases. If the buffer is allocated using Umpire then the Umpire ResouceManager is used, otherwise std::memset is used.

Note
The memset occurs in the last space the array was used in and the view is moved and touched in that space.

Definition at line 625 of file ArrayView.hpp.

Member Data Documentation

◆ m_singleParameterResizeIndex

template<typename T, int NDIM_TPARAM, int USD_TPARAM, typename INDEX_TYPE, template< typename > class BUFFER_TYPE>
int LvArray::ArrayView< T, NDIM_TPARAM, USD_TPARAM, INDEX_TYPE, BUFFER_TYPE >::m_singleParameterResizeIndex = 0
protected

this data member specifies the dimension that will be resized as a result of a call to the single dimension resize method.

Definition at line 758 of file ArrayView.hpp.


The documentation for this class was generated from the following file: