VTK-m  2.2
Public Types | Public Member Functions | List of all members
vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType > Class Template Reference

Implicitly permutes the values in an array. More...

#include <ArrayHandlePermutation.h>

Inheritance diagram for vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >:
vtkm::cont::ArrayHandle< ValueArrayHandleType::ValueType, vtkm::cont::StorageTagPermutation< IndexArrayHandleType::StorageTag, ValueArrayHandleType::StorageTag > >

Public Types

using Thisclass = typename vtkm::cont::detail::GetTypeInParentheses< void(ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >) >::type
 
using Superclass = typename vtkm::cont::detail::GetTypeInParentheses< void(vtkm::cont::ArrayHandle< typename ValueArrayHandleType::ValueType, vtkm::cont::StorageTagPermutation< typename IndexArrayHandleType::StorageTag, typename ValueArrayHandleType::StorageTag > >) >::type
 
using ValueType = typename Superclass::ValueType
 
using StorageTag = typename Superclass::StorageTag
 
using StorageType = typename Superclass::StorageType
 
using ReadPortalType = typename Superclass::ReadPortalType
 
using WritePortalType = typename Superclass::WritePortalType
 
- Public Types inherited from vtkm::cont::ArrayHandle< ValueArrayHandleType::ValueType, vtkm::cont::StorageTagPermutation< IndexArrayHandleType::StorageTag, ValueArrayHandleType::StorageTag > >
using ValueType = ValueArrayHandleType::ValueType
 
using StorageTag = vtkm::cont::StorageTagPermutation< IndexArrayHandleType::StorageTag, ValueArrayHandleType::StorageTag >
 
using StorageType = vtkm::cont::internal::Storage< ValueType, StorageTag >
 
using ReadPortalType = typename StorageType::ReadPortalType
 The type of portal used when accessing data in a read-only mode. More...
 
using WritePortalType = typename StorageType::WritePortalType
 The type of portal used when accessing data in a read-write mode. More...
 

Public Member Functions

 ArrayHandlePermutation ()
 
VTKM_CONT ArrayHandlePermutation (const Thisclass &src)
 
VTKM_CONT ArrayHandlePermutation (Thisclass &&src) noexcept
 
VTKM_CONT ArrayHandlePermutation (const vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &src)
 
VTKM_CONT ArrayHandlePermutation (vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &&src) noexcept
 
VTKM_CONT ArrayHandlePermutation (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 
VTKM_CONT ArrayHandlePermutation (std::vector< vtkm::cont::internal::Buffer > &&buffers) noexcept
 
VTKM_CONT Thisclassoperator= (const Thisclass &src)
 
VTKM_CONT Thisclassoperator= (Thisclass &&src) noexcept
 
 ArrayHandlePermutation (const IndexArrayHandleType &indexArray, const ValueArrayHandleType &valueArray)
 Construct a permuation array with index and value arrays. More...
 
IndexArrayHandleType GetIndexArray () const
 Return the array used for indices. More...
 
ValueArrayHandleType GetValueArray () const
 Return the array used for values. More...
 
- Public Member Functions inherited from vtkm::cont::ArrayHandle< ValueArrayHandleType::ValueType, vtkm::cont::StorageTagPermutation< IndexArrayHandleType::StorageTag, ValueArrayHandleType::StorageTag > >
 ArrayHandle ()
 Constructs an empty ArrayHandle. More...
 
 ArrayHandle (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &src)
 Copy constructor. More...
 
 ArrayHandle (vtkm::cont::ArrayHandle< ValueType, StorageTag > &&src) noexcept
 Move constructor. More...
 
 ArrayHandle (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 Special constructor for subclass specializations that need to set the initial state array. More...
 
 ArrayHandle (std::vector< vtkm::cont::internal::Buffer > &&buffers) noexcept
 Special constructor for subclass specializations that need to set the initial state array. More...
 
 ~ArrayHandle ()
 Destructs an empty ArrayHandle. More...
 
vtkm::cont::ArrayHandle< ValueType, StorageTag > & operator= (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &src)
 Shallow copies an ArrayHandle. More...
 
vtkm::cont::ArrayHandle< ValueType, StorageTag > & operator= (vtkm::cont::ArrayHandle< ValueType, StorageTag > &&src) noexcept
 Move and Assignment of an ArrayHandle. More...
 
bool operator== (const ArrayHandle< ValueType, StorageTag > &rhs) const
 Like a pointer, two ArrayHandles are considered equal if they point to the same location in memory. More...
 
bool operator== (const ArrayHandle< VT, ST > &) const
 
bool operator!= (const ArrayHandle< ValueType, StorageTag > &rhs) const
 
bool operator!= (const ArrayHandle< VT, ST > &) const
 
StorageType GetStorage () const
 Get the storage. More...
 
ReadPortalType ReadPortal () const
 Get an array portal that can be used in the control environment. More...
 
ReadPortalType ReadPortal (vtkm::cont::Token &token) const
 The type of portal used when accessing data in a read-only mode. More...
 
WritePortalType WritePortal () const
 Get an array portal that can be used in the control environment. More...
 
WritePortalType WritePortal (vtkm::cont::Token &token) const
 Get an array portal that can be used in the control environment. More...
 
vtkm::Id GetNumberOfValues () const
 Returns the number of entries in the array. More...
 
vtkm::IdComponent GetNumberOfComponentsFlat () const
 Returns the total number of components for each value in the array. More...
 
void Allocate (vtkm::Id numberOfValues, vtkm::CopyFlag preserve, vtkm::cont::Token &token) const
 Allocates an array large enough to hold the given number of values. More...
 
void Allocate (vtkm::Id numberOfValues, vtkm::CopyFlag preserve=vtkm::CopyFlag::Off) const
 Allocates an array large enough to hold the given number of values. More...
 
void AllocateAndFill (vtkm::Id numberOfValues, const ValueType &fillValue, vtkm::CopyFlag preserve, vtkm::cont::Token &token) const
 Allocates an array and fills it with an initial value. More...
 
void AllocateAndFill (vtkm::Id numberOfValues, const ValueType &fillValue, vtkm::CopyFlag preserve=vtkm::CopyFlag::Off) const
 Allocates an array and fills it with an initial value. More...
 
void Fill (const ValueType &fillValue, vtkm::Id startIndex, vtkm::Id endIndex, vtkm::cont::Token &token) const
 Fills the array with a given value. More...
 
void Fill (const ValueType &fillValue, vtkm::Id startIndex, vtkm::Id endIndex) const
 Fills the array with a given value. More...
 
void Fill (const ValueType &fillValue, vtkm::Id startIndex=0) const
 Fills the array with a given value. More...
 
void ReleaseResourcesExecution () const
 Releases any resources being used in the execution environment (that are not being shared by the control environment). More...
 
void ReleaseResources () const
 Releases all resources in both the control and execution environments. More...
 
ReadPortalType PrepareForInput (vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token) const
 Prepares this array to be used as an input to an operation in the execution environment. More...
 
WritePortalType PrepareForInPlace (vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token) const
 Prepares this array to be used in an in-place operation (both as input and output) in the execution environment. More...
 
WritePortalType PrepareForOutput (vtkm::Id numberOfValues, vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token) const
 Prepares (allocates) this array to be used as an output from an operation in the execution environment. More...
 
bool IsOnDevice (vtkm::cont::DeviceAdapterId device) const
 Returns true if the ArrayHandle's data is on the given device. More...
 
bool IsOnHost () const
 Returns true if the ArrayHandle's data is on the host. More...
 
void SyncControlArray () const
 Synchronizes the control array with the execution array. More...
 
void Enqueue (const vtkm::cont::Token &token) const
 Enqueue a token for access to this ArrayHandle. More...
 
void DeepCopyFrom (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &source) const
 Deep copies the data in the array. More...
 
const std::vector< vtkm::cont::internal::Buffer > & GetBuffers () const
 Returns the internal Buffer structures that hold the data. More...
 
std::vector< vtkm::cont::internal::Buffer > & GetBuffers ()
 

Additional Inherited Members

- Protected Member Functions inherited from vtkm::cont::ArrayHandle< ValueArrayHandleType::ValueType, vtkm::cont::StorageTagPermutation< IndexArrayHandleType::StorageTag, ValueArrayHandleType::StorageTag > >
void SetBuffer (vtkm::IdComponent index, const vtkm::cont::internal::Buffer &buffer)
 
void SetBuffers (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 
void SetBuffers (std::vector< vtkm::cont::internal::Buffer > &&buffers)
 

Detailed Description

template<typename IndexArrayHandleType, typename ValueArrayHandleType>
class vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >

Implicitly permutes the values in an array.

ArrayHandlePermutation is a specialization of ArrayHandle. It takes two delegate array handles: an array of indices and an array of values. The array handle created contains the values given permuted by the indices given. So for a given index i, ArrayHandlePermutation looks up the i-th value in the index array to get permuted index j and then gets the j-th value in the value array. This index permutation is done on the fly rather than creating a copy of the array.

An ArrayHandlePermutation can be used for either input or output. However, if used for output the array must be pre-allocated. That is, the indices must already be established and the values must have an allocation large enough to accommodate the indices. An output ArrayHandlePermutation will only have values changed. The indices are never changed.

When using ArrayHandlePermutation great care should be taken to make sure that every index in the index array points to a valid position in the value array. Otherwise, access validations will occur. Also, be wary of duplicate indices that point to the same location in the value array. For input arrays, this is fine. However, this could result in unexpected results for using as output and is almost certainly wrong for using as in-place.

Member Typedef Documentation

◆ ReadPortalType

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
using vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::ReadPortalType = typename Superclass::ReadPortalType

◆ StorageTag

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
using vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::StorageTag = typename Superclass::StorageTag

◆ StorageType

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
using vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::StorageType = typename Superclass::StorageType

◆ Superclass

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
using vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::Superclass = typename vtkm::cont::detail::GetTypeInParentheses<void (vtkm::cont::ArrayHandle< typename ValueArrayHandleType::ValueType, vtkm::cont::StorageTagPermutation<typename IndexArrayHandleType::StorageTag, typename ValueArrayHandleType::StorageTag> >) >::type

◆ Thisclass

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
using vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::Thisclass = typename vtkm::cont::detail::GetTypeInParentheses<void (ArrayHandlePermutation<IndexArrayHandleType, ValueArrayHandleType>) >::type

◆ ValueType

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
using vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::ValueType = typename Superclass::ValueType

◆ WritePortalType

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
using vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::WritePortalType = typename Superclass::WritePortalType

Constructor & Destructor Documentation

◆ ArrayHandlePermutation() [1/8]

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::ArrayHandlePermutation ( )
inline

◆ ArrayHandlePermutation() [2/8]

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
VTKM_CONT vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::ArrayHandlePermutation ( const Thisclass src)
inline

◆ ArrayHandlePermutation() [3/8]

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
VTKM_CONT vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::ArrayHandlePermutation ( Thisclass &&  src)
inlinenoexcept

◆ ArrayHandlePermutation() [4/8]

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
VTKM_CONT vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::ArrayHandlePermutation ( const vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &  src)
inline

◆ ArrayHandlePermutation() [5/8]

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
VTKM_CONT vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::ArrayHandlePermutation ( vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &&  src)
inlinenoexcept

◆ ArrayHandlePermutation() [6/8]

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
VTKM_CONT vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::ArrayHandlePermutation ( const std::vector< vtkm::cont::internal::Buffer > &  buffers)
inlineexplicit

◆ ArrayHandlePermutation() [7/8]

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
VTKM_CONT vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::ArrayHandlePermutation ( std::vector< vtkm::cont::internal::Buffer > &&  buffers)
inlineexplicitnoexcept

◆ ArrayHandlePermutation() [8/8]

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::ArrayHandlePermutation ( const IndexArrayHandleType &  indexArray,
const ValueArrayHandleType &  valueArray 
)
inline

Construct a permuation array with index and value arrays.

Member Function Documentation

◆ GetIndexArray()

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
IndexArrayHandleType vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::GetIndexArray ( ) const
inline

Return the array used for indices.

The index array provides how indices get permuted. When a value is retrieved from an ArrayHandlePermutation, an index is retrived from this index array, and this new index is used to retrieve a value from the value array.

◆ GetValueArray()

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
ValueArrayHandleType vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::GetValueArray ( ) const
inline

Return the array used for values.

The index array provides how indices get permuted. When a value is retrieved from an ArrayHandlePermutation, an index is retrived from this index array, and this new index is used to retrieve a value from the value array.

◆ operator=() [1/2]

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
VTKM_CONT Thisclass& vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::operator= ( const Thisclass src)
inline

◆ operator=() [2/2]

template<typename IndexArrayHandleType , typename ValueArrayHandleType >
VTKM_CONT Thisclass& vtkm::cont::ArrayHandlePermutation< IndexArrayHandleType, ValueArrayHandleType >::operator= ( Thisclass &&  src)
inlinenoexcept

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