VTK-m  2.0
Public Types | Public Member Functions | Private Types | Private Member Functions | List of all members
vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType > Class Template Reference

Fancy array handle that groups values into vectors of different sizes. More...

#include <ArrayHandleGroupVecVariable.h>

Inheritance diagram for vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >:
vtkm::cont::ArrayHandle< vtkm::VecFromPortal< ComponentsArrayHandleType::WritePortalType >, vtkm::cont::StorageTagGroupVecVariable< ComponentsArrayHandleType::StorageTag, OffsetsArrayHandleType::StorageTag > >

Public Types

using ComponentType = typename ComponentsArrayHandleType::ValueType
 
- Public Types inherited from vtkm::cont::ArrayHandle< vtkm::VecFromPortal< ComponentsArrayHandleType::WritePortalType >, vtkm::cont::StorageTagGroupVecVariable< ComponentsArrayHandleType::StorageTag, OffsetsArrayHandleType::StorageTag > >
using ValueType = vtkm::VecFromPortal< ComponentsArrayHandleType::WritePortalType >
 
using StorageTag = vtkm::cont::StorageTagGroupVecVariable< ComponentsArrayHandleType::StorageTag, OffsetsArrayHandleType::StorageTag >
 
using StorageType = vtkm::cont::internal::Storage< ValueType, StorageTag >
 
using ReadPortalType = typename StorageType::ReadPortalType
 
using WritePortalType = typename StorageType::WritePortalType
 

Public Member Functions

 VTKM_ARRAY_HANDLE_SUBCLASS (ArrayHandleGroupVecVariable,(ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >),(vtkm::cont::ArrayHandle< vtkm::VecFromPortal< typename ComponentsArrayHandleType::WritePortalType >, vtkm::cont::StorageTagGroupVecVariable< typename ComponentsArrayHandleType::StorageTag, typename OffsetsArrayHandleType::StorageTag >>))
 
VTKM_CONT ArrayHandleGroupVecVariable (const ComponentsArrayHandleType &componentsArray, const OffsetsArrayHandleType &offsetsArray)
 
VTKM_CONT ComponentsArrayHandleType GetComponentsArray () const
 
VTKM_CONT OffsetsArrayHandleType GetOffsetsArray () const
 
- Public Member Functions inherited from vtkm::cont::ArrayHandle< vtkm::VecFromPortal< ComponentsArrayHandleType::WritePortalType >, vtkm::cont::StorageTagGroupVecVariable< ComponentsArrayHandleType::StorageTag, OffsetsArrayHandleType::StorageTag > >
VTKM_CONT ArrayHandle ()
 Constructs an empty ArrayHandle. More...
 
VTKM_CONT ArrayHandle (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &src)
 Copy constructor. More...
 
VTKM_CONT ArrayHandle (vtkm::cont::ArrayHandle< ValueType, StorageTag > &&src) noexcept
 Move constructor. More...
 
VTKM_CONT ~ArrayHandle ()
 Destructs an empty ArrayHandle. More...
 
VTKM_CONT vtkm::cont::ArrayHandle< ValueType, StorageTag > & operator= (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &src)
 Copies an ArrayHandle. More...
 
VTKM_CONT vtkm::cont::ArrayHandle< ValueType, StorageTag > & operator= (vtkm::cont::ArrayHandle< ValueType, StorageTag > &&src) noexcept
 Move and Assignment of an ArrayHandle. More...
 
VTKM_CONT 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...
 
VTKM_CONT bool operator== (const ArrayHandle< VT, ST > &) const
 
VTKM_CONT bool operator!= (const ArrayHandle< ValueType, StorageTag > &rhs) const
 
VTKM_CONT bool operator!= (const ArrayHandle< VT, ST > &) const
 
VTKM_CONT StorageType GetStorage () const
 Get the storage. More...
 
VTKM_CONT WritePortalType WritePortal () const
 Get an array portal that can be used in the control environment. More...
 
VTKM_CONT WritePortalType WritePortal (vtkm::cont::Token &token) const
 
VTKM_CONT vtkm::Id GetNumberOfValues () const
 Returns the number of entries in the array. More...
 
VTKM_CONT void ReleaseResourcesExecution () const
 Releases any resources being used in the execution environment (that are not being shared by the control environment). More...
 
VTKM_CONT void ReleaseResources () const
 Releases all resources in both the control and execution environments. More...
 
VTKM_CONT 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...
 
VTKM_CONT 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...
 
VTKM_CONT 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...
 
VTKM_CONT bool IsOnDevice (vtkm::cont::DeviceAdapterId device) const
 Returns true if the ArrayHandle's data is on the given device. More...
 
VTKM_CONT bool IsOnHost () const
 Returns true if the ArrayHandle's data is on the host. More...
 
VTKM_CONT void SyncControlArray () const
 Synchronizes the control array with the execution array. More...
 
VTKM_CONT void Enqueue (const vtkm::cont::Token &token) const
 Enqueue a token for access to this ArrayHandle. More...
 
VTKM_CONT void DeepCopyFrom (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &source) const
 Deep copies the data in the array. More...
 
const VTKM_CONT std::vector< vtkm::cont::internal::Buffer > & GetBuffers () const
 Returns the internal Buffer structures that hold the data. More...
 
VTKM_CONT std::vector< vtkm::cont::internal::Buffer > & GetBuffers ()
 
VTKM_CONT ArrayHandle (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 
VTKM_CONT ArrayHandle (std::vector< vtkm::cont::internal::Buffer > &&buffers) noexcept
 
VTKM_CONT ReadPortalType ReadPortal () const
 Get an array portal that can be used in the control environment. More...
 
VTKM_CONT ReadPortalType ReadPortal (vtkm::cont::Token &token) const
 Get an array portal that can be used in the control environment. More...
 
VTKM_CONT 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...
 
VTKM_CONT 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...
 
VTKM_CONT 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...
 
VTKM_CONT 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...
 
VTKM_CONT void Fill (const ValueType &fillValue, vtkm::Id startIndex, vtkm::Id endIndex, vtkm::cont::Token &token) const
 Fills the array with a given value. More...
 
VTKM_CONT void Fill (const ValueType &fillValue, vtkm::Id startIndex, vtkm::Id endIndex) const
 Fills the array with a given value. More...
 
VTKM_CONT void Fill (const ValueType &fillValue, vtkm::Id startIndex=0) const
 Fills the array with a given value. More...
 

Private Types

using StorageType = vtkm::cont::internal::Storage< ValueType, StorageTag >
 

Private Member Functions

 VTKM_IS_ARRAY_HANDLE (ComponentsArrayHandleType)
 
 VTKM_IS_ARRAY_HANDLE (OffsetsArrayHandleType)
 
 VTKM_STATIC_ASSERT_MSG ((std::is_same< vtkm::Id, typename OffsetsArrayHandleType::ValueType >::value), "ArrayHandleGroupVecVariable's offsets array must contain vtkm::Id values.")
 

Additional Inherited Members

- Protected Member Functions inherited from vtkm::cont::ArrayHandle< vtkm::VecFromPortal< ComponentsArrayHandleType::WritePortalType >, vtkm::cont::StorageTagGroupVecVariable< ComponentsArrayHandleType::StorageTag, OffsetsArrayHandleType::StorageTag > >
VTKM_CONT void SetBuffer (vtkm::IdComponent index, const vtkm::cont::internal::Buffer &buffer)
 
VTKM_CONT void SetBuffers (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 
VTKM_CONT void SetBuffers (std::vector< vtkm::cont::internal::Buffer > &&buffers)
 

Detailed Description

template<typename ComponentsArrayHandleType, typename OffsetsArrayHandleType>
class vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >

Fancy array handle that groups values into vectors of different sizes.

It is sometimes the case that you need to run a worklet with an input or output that has a different number of values per instance. For example, the cells of a CellCetExplicit can have different numbers of points in each cell. If inputting or outputting cells of this type, each instance of the worklet might need a Vec of a different length. This fance array handle takes an array of values and an array of offsets and groups the consecutive values in Vec-like objects. The values are treated as tightly packed, so that each Vec contains the values from one offset to the next. The last value contains values from the last offset to the end of the array.

For example, if you have an array handle with the 9 values 0,1,2,3,4,5,6,7,8 an offsets array handle with the 4 values 0,4,6,9 and give them to an ArrayHandleGroupVecVariable, you get an array that looks like it contains three values of Vec-like objects with the data [0,1,2,3], [4,5], and [6,7,8].

Note that this version of ArrayHandle breaks some of the assumptions about ArrayHandle a little bit. Typically, there is exactly one type for every value in the array, and this value is also the same between the control and execution environment. However, this class uses VecFromPortal it implement a Vec-like class that has a variable number of values, and this type can change between control and execution environments.

The offsets array is often derived from a list of sizes for each of the entries. You can use the convenience function ConvertNumComponentsToOffsets to take an array of sizes (i.e. the number of components for each entry) and get an array of offsets needed for ArrayHandleGroupVecVariable.

Member Typedef Documentation

◆ ComponentType

template<typename ComponentsArrayHandleType , typename OffsetsArrayHandleType >
using vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >::ComponentType = typename ComponentsArrayHandleType::ValueType

◆ StorageType

template<typename ComponentsArrayHandleType , typename OffsetsArrayHandleType >
using vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >::StorageType = vtkm::cont::internal::Storage<ValueType, StorageTag>
private

Constructor & Destructor Documentation

◆ ArrayHandleGroupVecVariable()

template<typename ComponentsArrayHandleType , typename OffsetsArrayHandleType >
VTKM_CONT vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >::ArrayHandleGroupVecVariable ( const ComponentsArrayHandleType &  componentsArray,
const OffsetsArrayHandleType &  offsetsArray 
)
inline

Member Function Documentation

◆ GetComponentsArray()

template<typename ComponentsArrayHandleType , typename OffsetsArrayHandleType >
VTKM_CONT ComponentsArrayHandleType vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >::GetComponentsArray ( ) const
inline

◆ GetOffsetsArray()

template<typename ComponentsArrayHandleType , typename OffsetsArrayHandleType >
VTKM_CONT OffsetsArrayHandleType vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >::GetOffsetsArray ( ) const
inline

◆ VTKM_ARRAY_HANDLE_SUBCLASS()

template<typename ComponentsArrayHandleType , typename OffsetsArrayHandleType >
vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >::VTKM_ARRAY_HANDLE_SUBCLASS ( ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >  ,
(ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >)  ,
(vtkm::cont::ArrayHandle< vtkm::VecFromPortal< typename ComponentsArrayHandleType::WritePortalType >, vtkm::cont::StorageTagGroupVecVariable< typename ComponentsArrayHandleType::StorageTag, typename OffsetsArrayHandleType::StorageTag >>)   
)

◆ VTKM_IS_ARRAY_HANDLE() [1/2]

template<typename ComponentsArrayHandleType , typename OffsetsArrayHandleType >
vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >::VTKM_IS_ARRAY_HANDLE ( ComponentsArrayHandleType  )
private

◆ VTKM_IS_ARRAY_HANDLE() [2/2]

template<typename ComponentsArrayHandleType , typename OffsetsArrayHandleType >
vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >::VTKM_IS_ARRAY_HANDLE ( OffsetsArrayHandleType  )
private

◆ VTKM_STATIC_ASSERT_MSG()

template<typename ComponentsArrayHandleType , typename OffsetsArrayHandleType >
vtkm::cont::ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >::VTKM_STATIC_ASSERT_MSG ( (std::is_same< vtkm::Id, typename OffsetsArrayHandleType::ValueType >::value)  ,
"ArrayHandleGroupVecVariable< ComponentsArrayHandleType, OffsetsArrayHandleType >'s offsets array must contain vtkm::Id values."   
)
private

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