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

An ArrayHandle that accesses a basic array with strides and offsets. More...

#include <ArrayHandleStride.h>

Inheritance diagram for vtkm::cont::ArrayHandleStride< T >:
vtkm::cont::ArrayHandle< T, vtkm::cont::StorageTagStride >

Public Types

using Thisclass = typename vtkm::cont::detail::GetTypeInParentheses< void(ArrayHandleStride< T >) >::type
 
using Superclass = typename vtkm::cont::detail::GetTypeInParentheses< void(ArrayHandle< T, vtkm::cont::StorageTagStride >) >::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< T, vtkm::cont::StorageTagStride >
using ValueType = T
 
using StorageTag = vtkm::cont::StorageTagStride
 
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

 ArrayHandleStride ()
 
VTKM_CONT ArrayHandleStride (const Thisclass &src)
 
VTKM_CONT ArrayHandleStride (Thisclass &&src) noexcept
 
VTKM_CONT ArrayHandleStride (const vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &src)
 
VTKM_CONT ArrayHandleStride (vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &&src) noexcept
 
VTKM_CONT ArrayHandleStride (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 
VTKM_CONT ArrayHandleStride (std::vector< vtkm::cont::internal::Buffer > &&buffers) noexcept
 
VTKM_CONT Thisclassoperator= (const Thisclass &src)
 
VTKM_CONT Thisclassoperator= (Thisclass &&src) noexcept
 
 ArrayHandleStride (vtkm::Id stride, vtkm::Id offset, vtkm::Id modulo=0, vtkm::Id divisor=1)
 
 ArrayHandleStride (const vtkm::cont::ArrayHandle< T, vtkm::cont::StorageTagBasic > &array, vtkm::Id numValues, vtkm::Id stride, vtkm::Id offset, vtkm::Id modulo=0, vtkm::Id divisor=1)
 Construct an ArrayHandleStride from a basic array with specified access patterns. More...
 
 ArrayHandleStride (const vtkm::cont::internal::Buffer &buffer, vtkm::Id numValues, vtkm::Id stride, vtkm::Id offset, vtkm::Id modulo=0, vtkm::Id divisor=1)
 
vtkm::Id GetStride () const
 Get the stride that values are accessed. More...
 
vtkm::Id GetOffset () const
 Get the offset to start reading values. More...
 
vtkm::Id GetModulo () const
 Get the modulus of the array index. More...
 
vtkm::Id GetDivisor () const
 Get the divisor of the array index. More...
 
vtkm::cont::ArrayHandleBasic< T > GetBasicArray () const
 Return the underlying data as a basic array handle. More...
 
- Public Member Functions inherited from vtkm::cont::ArrayHandle< T, vtkm::cont::StorageTagStride >
 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< T, vtkm::cont::StorageTagStride >
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 T>
class vtkm::cont::ArrayHandleStride< T >

An ArrayHandle that accesses a basic array with strides and offsets.

ArrayHandleStride is a simple ArrayHandle that accesses data with a prescribed stride and offset. You specify the stride and offset at construction. So when a portal for this ArrayHandle Gets or Sets a value at a specific index, the value accessed in the underlying C array is:

(index * stride) + offset

Optionally, you can also specify a modulo and divisor. If they are specified, the index mangling becomes:

(((index / divisor) % modulo) * stride) + offset

You can "disable" any of the aforementioned operations by setting them to the following values (most of which are arithmetic identities):

Note that all of these indices are referenced by the ValueType of the array. So, an ArrayHandleStride<vtkm::Float32> with an offset of 1 will actually offset by 4 bytes (the size of a vtkm::Float32).

ArrayHandleStride is used to provide a unified type for pulling a component out of an ArrayHandle. This way, you can iterate over multiple components in an array without having to implement a template instance for each vector size or representation.

Member Typedef Documentation

◆ ReadPortalType

template<typename T >
using vtkm::cont::ArrayHandleStride< T >::ReadPortalType = typename Superclass::ReadPortalType

◆ StorageTag

template<typename T >
using vtkm::cont::ArrayHandleStride< T >::StorageTag = typename Superclass::StorageTag

◆ StorageType

template<typename T >
using vtkm::cont::ArrayHandleStride< T >::StorageType = typename Superclass::StorageType

◆ Superclass

template<typename T >
using vtkm::cont::ArrayHandleStride< T >::Superclass = typename vtkm::cont::detail::GetTypeInParentheses<void (ArrayHandle<T, vtkm::cont::StorageTagStride>) >::type

◆ Thisclass

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

◆ ValueType

template<typename T >
using vtkm::cont::ArrayHandleStride< T >::ValueType = typename Superclass::ValueType

◆ WritePortalType

template<typename T >
using vtkm::cont::ArrayHandleStride< T >::WritePortalType = typename Superclass::WritePortalType

Constructor & Destructor Documentation

◆ ArrayHandleStride() [1/10]

template<typename T >
vtkm::cont::ArrayHandleStride< T >::ArrayHandleStride ( )
inline

◆ ArrayHandleStride() [2/10]

template<typename T >
VTKM_CONT vtkm::cont::ArrayHandleStride< T >::ArrayHandleStride ( const Thisclass src)
inline

◆ ArrayHandleStride() [3/10]

template<typename T >
VTKM_CONT vtkm::cont::ArrayHandleStride< T >::ArrayHandleStride ( Thisclass &&  src)
inlinenoexcept

◆ ArrayHandleStride() [4/10]

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

◆ ArrayHandleStride() [5/10]

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

◆ ArrayHandleStride() [6/10]

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

◆ ArrayHandleStride() [7/10]

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

◆ ArrayHandleStride() [8/10]

template<typename T >
vtkm::cont::ArrayHandleStride< T >::ArrayHandleStride ( vtkm::Id  stride,
vtkm::Id  offset,
vtkm::Id  modulo = 0,
vtkm::Id  divisor = 1 
)
inline

◆ ArrayHandleStride() [9/10]

template<typename T >
vtkm::cont::ArrayHandleStride< T >::ArrayHandleStride ( const vtkm::cont::ArrayHandle< T, vtkm::cont::StorageTagBasic > &  array,
vtkm::Id  numValues,
vtkm::Id  stride,
vtkm::Id  offset,
vtkm::Id  modulo = 0,
vtkm::Id  divisor = 1 
)
inline

Construct an ArrayHandleStride from a basic array with specified access patterns.

◆ ArrayHandleStride() [10/10]

template<typename T >
vtkm::cont::ArrayHandleStride< T >::ArrayHandleStride ( const vtkm::cont::internal::Buffer &  buffer,
vtkm::Id  numValues,
vtkm::Id  stride,
vtkm::Id  offset,
vtkm::Id  modulo = 0,
vtkm::Id  divisor = 1 
)
inline

Member Function Documentation

◆ GetBasicArray()

template<typename T >
vtkm::cont::ArrayHandleBasic<T> vtkm::cont::ArrayHandleStride< T >::GetBasicArray ( ) const
inline

Return the underlying data as a basic array handle.

It is common for the same basic array to be shared among multiple vtkm::cont::ArrayHandleStride objects.

◆ GetDivisor()

template<typename T >
vtkm::Id vtkm::cont::ArrayHandleStride< T >::GetDivisor ( ) const
inline

Get the divisor of the array index.

The index is divided by the divisor before the other effects. The default divisor of 1 will have no effect on the indexing. Setting the divisor to a value greater than 1 has the effect of repeating each value that many times.

◆ GetModulo()

template<typename T >
vtkm::Id vtkm::cont::ArrayHandleStride< T >::GetModulo ( ) const
inline

Get the modulus of the array index.

When the index is modulo a value, it becomes the remainder after dividing by that value. The effect of the modulus is to cause the index to repeat over the values in the array.

If the modulo is set to 0, then it is ignored.

◆ GetOffset()

template<typename T >
vtkm::Id vtkm::cont::ArrayHandleStride< T >::GetOffset ( ) const
inline

Get the offset to start reading values.

The offset is the number of values to skip before the first value. The offset is measured in terms of the number of values. An offset of 0 means the first value at the beginning of the array.

The offset is unaffected by the stride and dictates where the strides starts counting. For example, given an array with size 3 vectors packed into an array, a strided array referencing the middle component will have offset 1 and stride 3.

◆ GetStride()

template<typename T >
vtkm::Id vtkm::cont::ArrayHandleStride< T >::GetStride ( ) const
inline

Get the stride that values are accessed.

The stride is the spacing between consecutive values. The stride is measured in terms of the number of values. A stride of 1 means a fully packed array. A stride of 2 means selecting every other values.

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

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