VTK-m  2.0
Public Member Functions | Private Types | Static Private Attributes | List of all members
vtkm::cont::ArrayHandleSOA< T > Class Template Reference

An ArrayHandle that for Vecs stores each component in a separate physical array. More...

#include <ArrayHandleSOA.h>

Inheritance diagram for vtkm::cont::ArrayHandleSOA< T >:
vtkm::cont::ArrayHandle< T, vtkm::cont::StorageTagSOA >

Public Member Functions

 VTKM_ARRAY_HANDLE_SUBCLASS (ArrayHandleSOA,(ArrayHandleSOA< T >),(ArrayHandle< T, vtkm::cont::StorageTagSOA >))
 
 ArrayHandleSOA (std::initializer_list< vtkm::cont::internal::Buffer > &&componentBuffers)
 
 ArrayHandleSOA (const std::array< ComponentArrayType, NUM_COMPONENTS > &componentArrays)
 
 ArrayHandleSOA (const std::vector< ComponentArrayType > &componentArrays)
 
 ArrayHandleSOA (std::initializer_list< ComponentArrayType > &&componentArrays)
 
 ArrayHandleSOA (std::initializer_list< std::vector< ComponentType >> &&componentVectors)
 
template<typename Allocator , typename... RemainingVectors>
 ArrayHandleSOA (vtkm::CopyFlag copy, const std::vector< ComponentType, Allocator > &vector0, RemainingVectors &&... componentVectors)
 
template<typename... RemainingVectors>
 ArrayHandleSOA (vtkm::CopyFlag copy, std::vector< ComponentType > &&vector0, RemainingVectors &&... componentVectors)
 
 ArrayHandleSOA (std::initializer_list< const ComponentType * > componentArrays, vtkm::Id length, vtkm::CopyFlag copy)
 
template<typename... RemainingArrays>
 ArrayHandleSOA (vtkm::Id length, vtkm::CopyFlag copy, const ComponentType *array0, const RemainingArrays &... componentArrays)
 
VTKM_CONT vtkm::cont::ArrayHandleBasic< ComponentTypeGetArray (vtkm::IdComponent index) const
 
VTKM_CONT void SetArray (vtkm::IdComponent index, const ComponentArrayType &array)
 
- Public Member Functions inherited from vtkm::cont::ArrayHandle< T, vtkm::cont::StorageTagSOA >
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 ComponentType = typename vtkm::VecTraits< T >::ComponentType
 
using StorageType = vtkm::cont::internal::Storage< T, vtkm::cont::StorageTagSOA >
 
using ComponentArrayType = vtkm::cont::ArrayHandle< ComponentType, vtkm::cont::StorageTagBasic >
 

Static Private Attributes

static constexpr vtkm::IdComponent NUM_COMPONENTS = vtkm::VecTraits<T>::NUM_COMPONENTS
 

Additional Inherited Members

- Public Types inherited from vtkm::cont::ArrayHandle< T, vtkm::cont::StorageTagSOA >
using ValueType = T
 
using StorageTag = vtkm::cont::StorageTagSOA
 
using StorageType = vtkm::cont::internal::Storage< ValueType, StorageTag >
 
using ReadPortalType = typename StorageType::ReadPortalType
 
using WritePortalType = typename StorageType::WritePortalType
 
- Protected Member Functions inherited from vtkm::cont::ArrayHandle< T, vtkm::cont::StorageTagSOA >
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 T>
class vtkm::cont::ArrayHandleSOA< T >

An ArrayHandle that for Vecs stores each component in a separate physical array.

ArrayHandleSOA behaves like a regular ArrayHandle (with a basic storage) except that if you specify a ValueType of a Vec or a Vec-like, it will actually store each component in a separate physical array. When data are retrieved from the array, they are reconstructed into Vec objects as expected.

The intention of this array type is to help cover the most common ways data is lain out in memory. Typically, arrays of data are either an "array of structures" like the basic storage where you have a single array of structures (like Vec) or a "structure of arrays" where you have an array of a basic type (like float) for each component of the data being represented. The ArrayHandleSOA makes it easy to cover this second case without creating special types.

ArrayHandleSOA can be constructed from a collection of ArrayHandle with basic storage. This allows you to construct Vec arrays from components without deep copies.

Member Typedef Documentation

◆ ComponentArrayType

◆ ComponentType

template<typename T >
using vtkm::cont::ArrayHandleSOA< T >::ComponentType = typename vtkm::VecTraits<T>::ComponentType
private

◆ StorageType

template<typename T >
using vtkm::cont::ArrayHandleSOA< T >::StorageType = vtkm::cont::internal::Storage<T, vtkm::cont::StorageTagSOA>
private

Constructor & Destructor Documentation

◆ ArrayHandleSOA() [1/9]

template<typename T >
vtkm::cont::ArrayHandleSOA< T >::ArrayHandleSOA ( std::initializer_list< vtkm::cont::internal::Buffer > &&  componentBuffers)
inline

◆ ArrayHandleSOA() [2/9]

template<typename T >
vtkm::cont::ArrayHandleSOA< T >::ArrayHandleSOA ( const std::array< ComponentArrayType, NUM_COMPONENTS > &  componentArrays)
inline

◆ ArrayHandleSOA() [3/9]

template<typename T >
vtkm::cont::ArrayHandleSOA< T >::ArrayHandleSOA ( const std::vector< ComponentArrayType > &  componentArrays)
inline

◆ ArrayHandleSOA() [4/9]

template<typename T >
vtkm::cont::ArrayHandleSOA< T >::ArrayHandleSOA ( std::initializer_list< ComponentArrayType > &&  componentArrays)
inline

◆ ArrayHandleSOA() [5/9]

template<typename T >
vtkm::cont::ArrayHandleSOA< T >::ArrayHandleSOA ( std::initializer_list< std::vector< ComponentType >> &&  componentVectors)
inline

◆ ArrayHandleSOA() [6/9]

template<typename T >
template<typename Allocator , typename... RemainingVectors>
vtkm::cont::ArrayHandleSOA< T >::ArrayHandleSOA ( vtkm::CopyFlag  copy,
const std::vector< ComponentType, Allocator > &  vector0,
RemainingVectors &&...  componentVectors 
)
inline

◆ ArrayHandleSOA() [7/9]

template<typename T >
template<typename... RemainingVectors>
vtkm::cont::ArrayHandleSOA< T >::ArrayHandleSOA ( vtkm::CopyFlag  copy,
std::vector< ComponentType > &&  vector0,
RemainingVectors &&...  componentVectors 
)
inline

◆ ArrayHandleSOA() [8/9]

template<typename T >
vtkm::cont::ArrayHandleSOA< T >::ArrayHandleSOA ( std::initializer_list< const ComponentType * >  componentArrays,
vtkm::Id  length,
vtkm::CopyFlag  copy 
)
inline

◆ ArrayHandleSOA() [9/9]

template<typename T >
template<typename... RemainingArrays>
vtkm::cont::ArrayHandleSOA< T >::ArrayHandleSOA ( vtkm::Id  length,
vtkm::CopyFlag  copy,
const ComponentType array0,
const RemainingArrays &...  componentArrays 
)
inline

Member Function Documentation

◆ GetArray()

template<typename T >
VTKM_CONT vtkm::cont::ArrayHandleBasic<ComponentType> vtkm::cont::ArrayHandleSOA< T >::GetArray ( vtkm::IdComponent  index) const
inline

◆ SetArray()

template<typename T >
VTKM_CONT void vtkm::cont::ArrayHandleSOA< T >::SetArray ( vtkm::IdComponent  index,
const ComponentArrayType array 
)
inline

◆ VTKM_ARRAY_HANDLE_SUBCLASS()

template<typename T >
vtkm::cont::ArrayHandleSOA< T >::VTKM_ARRAY_HANDLE_SUBCLASS ( ArrayHandleSOA< T >  ,
(ArrayHandleSOA< T >)  ,
(ArrayHandle< T, vtkm::cont::StorageTagSOA >)   
)

Member Data Documentation

◆ NUM_COMPONENTS

template<typename T >
constexpr vtkm::IdComponent vtkm::cont::ArrayHandleSOA< T >::NUM_COMPONENTS = vtkm::VecTraits<T>::NUM_COMPONENTS
staticconstexprprivate

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