VTK-m  2.2
Public Types | Public Member Functions | Private Types | List of all members
vtkm::cont::ArrayHandleRuntimeVec< ComponentType > Class Template Reference

Fancy array handle for a basic array with runtime selected vec size. More...

#include <ArrayHandleRuntimeVec.h>

Inheritance diagram for vtkm::cont::ArrayHandleRuntimeVec< ComponentType >:
vtkm::cont::ArrayHandle< vtkm::VecFromPortal< ArrayHandleBasic< ComponentType >::WritePortalType >, vtkm::cont::StorageTagRuntimeVec >

Public Types

using Thisclass = typename vtkm::cont::detail::GetTypeInParentheses< void(ArrayHandleRuntimeVec< ComponentType >) >::type
 
using Superclass = typename vtkm::cont::detail::GetTypeInParentheses< void(vtkm::cont::ArrayHandle< vtkm::VecFromPortal< typename ArrayHandleBasic< ComponentType >::WritePortalType >, vtkm::cont::StorageTagRuntimeVec >) >::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< vtkm::VecFromPortal< ArrayHandleBasic< ComponentType >::WritePortalType >, vtkm::cont::StorageTagRuntimeVec >
using ValueType = vtkm::VecFromPortal< ArrayHandleBasic< ComponentType >::WritePortalType >
 
using StorageTag = vtkm::cont::StorageTagRuntimeVec
 
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

 ArrayHandleRuntimeVec ()
 
VTKM_CONT ArrayHandleRuntimeVec (const Thisclass &src)
 
VTKM_CONT ArrayHandleRuntimeVec (Thisclass &&src) noexcept
 
VTKM_CONT ArrayHandleRuntimeVec (const vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &src)
 
VTKM_CONT ArrayHandleRuntimeVec (vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &&src) noexcept
 
VTKM_CONT ArrayHandleRuntimeVec (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 
VTKM_CONT ArrayHandleRuntimeVec (std::vector< vtkm::cont::internal::Buffer > &&buffers) noexcept
 
VTKM_CONT Thisclassoperator= (const Thisclass &src)
 
VTKM_CONT Thisclassoperator= (Thisclass &&src) noexcept
 
 ArrayHandleRuntimeVec (vtkm::IdComponent numComponents, const ComponentsArrayType &componentsArray=ComponentsArrayType{})
 Construct an ArrayHandleRuntimeVec with a given number of components. More...
 
vtkm::IdComponent GetNumberOfComponents () const
 Return the number of components in each vec value. More...
 
vtkm::cont::ArrayHandleBasic< ComponentType > GetComponentsArray () const
 Return a basic array containing the components stored in this array. More...
 
template<typename ValueType >
void AsArrayHandleBasic (vtkm::cont::ArrayHandle< ValueType > &array) const
 Converts the array to that of a basic array handle. More...
 
template<typename ArrayType >
ArrayType AsArrayHandleBasic () const
 Converts the array to that of a basic array handle. More...
 
- Public Member Functions inherited from vtkm::cont::ArrayHandle< vtkm::VecFromPortal< ArrayHandleBasic< ComponentType >::WritePortalType >, vtkm::cont::StorageTagRuntimeVec >
 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 ()
 

Private Types

using ComponentsArrayType = vtkm::cont::ArrayHandle< ComponentType, StorageTagBasic >
 

Additional Inherited Members

- Protected Member Functions inherited from vtkm::cont::ArrayHandle< vtkm::VecFromPortal< ArrayHandleBasic< ComponentType >::WritePortalType >, vtkm::cont::StorageTagRuntimeVec >
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 ComponentType>
class vtkm::cont::ArrayHandleRuntimeVec< ComponentType >

Fancy array handle for a basic array with runtime selected vec size.

It is sometimes the case that you need to create an array of Vecs where the number of components is not known until runtime. This is problematic for normal ArrayHandles because you have to specify the size of the Vecs as a template parameter at compile time. ArrayHandleRuntimeVec can be used in this case.

Note that caution should be used with ArrayHandleRuntimeVec because the size of the Vec values is not known at compile time. Thus, the value type of this array is forced to a special VecFromPortal class that can cause surprises if treated as a Vec. In particular, the static NUM_COMPONENTS expression does not exist. Furthermore, new variables of type VecFromPortal cannot be created. This means that simple operators like + will not work because they require an intermediate object to be created. (Equal operators like += do work because they are given an existing variable to place the output.)

It is possible to provide an ArrayHandleBasic of the same component type as the underlying storage for this array. In this case, the array will be accessed much in the same manner as ArrayHandleGroupVec.

ArrayHandleRuntimeVec also allows you to convert the array to an ArrayHandleBasic of the appropriate Vec type (or component type). A runtime check will be performed to make sure the number of components matches.

Member Typedef Documentation

◆ ComponentsArrayType

template<typename ComponentType >
using vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ComponentsArrayType = vtkm::cont::ArrayHandle<ComponentType, StorageTagBasic>
private

◆ ReadPortalType

template<typename ComponentType >
using vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ReadPortalType = typename Superclass::ReadPortalType

◆ StorageTag

template<typename ComponentType >
using vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::StorageTag = typename Superclass::StorageTag

◆ StorageType

template<typename ComponentType >
using vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::StorageType = typename Superclass::StorageType

◆ Superclass

template<typename ComponentType >
using vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::Superclass = typename vtkm::cont::detail::GetTypeInParentheses<void (vtkm::cont::ArrayHandle< vtkm::VecFromPortal<typename ArrayHandleBasic<ComponentType>::WritePortalType>, vtkm::cont::StorageTagRuntimeVec>) >::type

◆ Thisclass

template<typename ComponentType >
using vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::Thisclass = typename vtkm::cont::detail::GetTypeInParentheses<void (ArrayHandleRuntimeVec<ComponentType>) >::type

◆ ValueType

template<typename ComponentType >
using vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ValueType = typename Superclass::ValueType

◆ WritePortalType

template<typename ComponentType >
using vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::WritePortalType = typename Superclass::WritePortalType

Constructor & Destructor Documentation

◆ ArrayHandleRuntimeVec() [1/8]

template<typename ComponentType >
vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ArrayHandleRuntimeVec ( )
inline

◆ ArrayHandleRuntimeVec() [2/8]

template<typename ComponentType >
VTKM_CONT vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ArrayHandleRuntimeVec ( const Thisclass src)
inline

◆ ArrayHandleRuntimeVec() [3/8]

template<typename ComponentType >
VTKM_CONT vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ArrayHandleRuntimeVec ( Thisclass &&  src)
inlinenoexcept

◆ ArrayHandleRuntimeVec() [4/8]

template<typename ComponentType >
VTKM_CONT vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ArrayHandleRuntimeVec ( const vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &  src)
inline

◆ ArrayHandleRuntimeVec() [5/8]

template<typename ComponentType >
VTKM_CONT vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ArrayHandleRuntimeVec ( vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &&  src)
inlinenoexcept

◆ ArrayHandleRuntimeVec() [6/8]

template<typename ComponentType >
VTKM_CONT vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ArrayHandleRuntimeVec ( const std::vector< vtkm::cont::internal::Buffer > &  buffers)
inlineexplicit

◆ ArrayHandleRuntimeVec() [7/8]

template<typename ComponentType >
VTKM_CONT vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ArrayHandleRuntimeVec ( std::vector< vtkm::cont::internal::Buffer > &&  buffers)
inlineexplicitnoexcept

◆ ArrayHandleRuntimeVec() [8/8]

template<typename ComponentType >
vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::ArrayHandleRuntimeVec ( vtkm::IdComponent  numComponents,
const ComponentsArrayType componentsArray = ComponentsArrayType{} 
)
inline

Construct an ArrayHandleRuntimeVec with a given number of components.

Parameters
numComponentsThe size of the Vecs stored in the array. This must be specified at the time of construction.
componentsArrayThis optional parameter allows you to supply a basic array that holds the components. This provides a mechanism to group consecutive values into vectors.

Member Function Documentation

◆ AsArrayHandleBasic() [1/2]

template<typename ComponentType >
template<typename ArrayType >
ArrayType vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::AsArrayHandleBasic ( ) const
inline

Converts the array to that of a basic array handle.

This method converts the ArrayHandleRuntimeVec to a simple ArrayHandleBasic. This is useful if the ArrayHandleRuntimeVec is passed to a routine that works on an array of a specific Vec size (or scalars). After a runtime check, the array can be converted to a typical array and used as such.

◆ AsArrayHandleBasic() [2/2]

template<typename ComponentType >
template<typename ValueType >
void vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::AsArrayHandleBasic ( vtkm::cont::ArrayHandle< ValueType > &  array) const
inline

Converts the array to that of a basic array handle.

This method converts the ArrayHandleRuntimeVec to a simple ArrayHandleBasic. This is useful if the ArrayHandleRuntimeVec is passed to a routine that works on an array of a specific Vec size (or scalars). After a runtime check, the array can be converted to a typical array and used as such.

◆ GetComponentsArray()

template<typename ComponentType >
vtkm::cont::ArrayHandleBasic<ComponentType> vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::GetComponentsArray ( ) const
inline

Return a basic array containing the components stored in this array.

The returned array is shared with this object. Modifying the contents of one array will modify the other.

◆ GetNumberOfComponents()

template<typename ComponentType >
vtkm::IdComponent vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::GetNumberOfComponents ( ) const
inline

Return the number of components in each vec value.

◆ operator=() [1/2]

template<typename ComponentType >
VTKM_CONT Thisclass& vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::operator= ( const Thisclass src)
inline

◆ operator=() [2/2]

template<typename ComponentType >
VTKM_CONT Thisclass& vtkm::cont::ArrayHandleRuntimeVec< ComponentType >::operator= ( Thisclass &&  src)
inlinenoexcept

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