VTK-m  1.8
Public Member Functions | Private Member Functions | List of all members
vtkm::cont::ArrayHandleOffsetsToNumComponents< OffsetsArray > Class Template Reference

An ArrayHandle that converts an array of offsets to an array of Vec sizes. More...

#include <ArrayHandleOffsetsToNumComponents.h>

Inheritance diagram for vtkm::cont::ArrayHandleOffsetsToNumComponents< OffsetsArray >:
vtkm::cont::ArrayHandle< vtkm::IdComponent, vtkm::cont::StorageTagOffsetsToNumComponents< OffsetsArray::StorageTag > >

Public Member Functions

 VTKM_ARRAY_HANDLE_SUBCLASS (ArrayHandleOffsetsToNumComponents,(ArrayHandleOffsetsToNumComponents< OffsetsArray >),(vtkm::cont::ArrayHandle< vtkm::IdComponent, vtkm::cont::StorageTagOffsetsToNumComponents< typename OffsetsArray::StorageTag >>))
 
VTKM_CONT ArrayHandleOffsetsToNumComponents (const OffsetsArray &array)
 
- Public Member Functions inherited from vtkm::cont::ArrayHandle< vtkm::IdComponent, vtkm::cont::StorageTagOffsetsToNumComponents< OffsetsArray::StorageTag > >
struct VTKM_DEPRECATED (1.6, "Use ReadPortalType and WritePortalType.") ExecutionTypes
 
VTKM_CONT VTKM_DEPRECATED (1.6, "Use ArrayHandle::WritePortal() instead. " "Note that the returned portal will lock the array while it is in scope.") VTKM_CONT VTKM_DEPRECATED(1.6
 Get the array portal of the control array. More...
 
 VTKM_DEPRECATED (1.6, "Use Allocate(n, vtkm::CopyFlag::On) instead of Shrink(n).") VTKM_CONT void Shrink(vtkm
 
VTKM_CONT VTKM_DEPRECATED (1.6, "PrepareForInput now requires a vtkm::cont::Token object.") ReadPortalType PrepareForInput(vtkm
 
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 Use ArrayHandle::ReadPortal () instead. " "Note that the returned portal will lock the array while it is in scope.") VTKM_CONT ReadPortalType ReadPortal() const
 Get an array portal that can be used in the control environment. More...
 
VTKM_CONT WritePortalType WritePortal () const
 Get an array portal that can be used in the control environment. More...
 
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 ArrayHandle (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 
VTKM_CONT ArrayHandle (std::vector< vtkm::cont::internal::Buffer > &&buffers) noexcept
 
VTKM_CONT ArrayHandle (const vtkm::cont::internal::Buffer *buffers)
 
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 Member Functions

 VTKM_IS_ARRAY_HANDLE (OffsetsArray)
 
 VTKM_STATIC_ASSERT_MSG ((std::is_same< typename OffsetsArray::ValueType, vtkm::Id >::value), "Offsets array must have a value type of vtkm::Id.")
 

Additional Inherited Members

- Public Types inherited from vtkm::cont::ArrayHandle< vtkm::IdComponent, vtkm::cont::StorageTagOffsetsToNumComponents< OffsetsArray::StorageTag > >
using ValueType = vtkm::IdComponent
 
using StorageTag = vtkm::cont::StorageTagOffsetsToNumComponents< OffsetsArray::StorageTag >
 
using StorageType = vtkm::cont::internal::Storage< ValueType, StorageTag >
 
using ReadPortalType = typename StorageType::ReadPortalType
 
using WritePortalType = typename StorageType::WritePortalType
 
using instead = WritePortalType
 
using instead = ReadPortalType
 
- Static Public Member Functions inherited from vtkm::cont::ArrayHandle< vtkm::IdComponent, vtkm::cont::StorageTagOffsetsToNumComponents< OffsetsArray::StorageTag > >
static constexpr VTKM_CONT vtkm::IdComponent GetNumberOfBuffers ()
 
- Protected Member Functions inherited from vtkm::cont::ArrayHandle< vtkm::IdComponent, vtkm::cont::StorageTagOffsetsToNumComponents< OffsetsArray::StorageTag > >
VTKM_CONT void SetBuffer (vtkm::IdComponent index, const vtkm::cont::internal::Buffer &buffer)
 Returns true if the ArrayHandle's data is on the given device. More...
 
VTKM_CONT void SetBuffers (const BufferContainer &buffers)
 

Detailed Description

template<class OffsetsArray>
class vtkm::cont::ArrayHandleOffsetsToNumComponents< OffsetsArray >

An ArrayHandle that converts an array of offsets to an array of Vec sizes.

It is common in VTK-m to pack small vectors of variable sizes into a single contiguous array. For example, cells in an explicit cell set can each have a different amount of vertices (triangles = 3, quads = 4, tetra = 4, hexa = 8, etc.). Generally, to access items in this list, you need an array of components in each entry and the offset for each entry. However, if you have just the array of offsets in sorted order, you can easily derive the number of components for each entry by subtracting adjacent entries. This works best if the offsets array has a size that is one more than the number of packed vectors with the first entry set to 0 and the last entry set to the total size of the packed array (the offset to the end).

ArrayHandleOffsetsToNumComponents decorates an array in exactly this manner. It takes an offsets array and makes it behave like an array of counts. Note that the offsets array must conform to the conditions described above: the offsets are in sorted order and there is one additional entry in the offsets (ending in an offset pointing past the end of the array).

When packing data of this nature, it is common to start with an array that is the number of components. You can convert that to an offsets array using the vtkm::cont::ConvertNumComponentsToOffsets function. This will create an offsets array with one extra entry as previously described. You can then throw out the original number of components array and use the offsets with ArrayHandleOffsetsToNumComponents to represent both the offsets and num components while storing only one array.

Constructor & Destructor Documentation

◆ ArrayHandleOffsetsToNumComponents()

template<class OffsetsArray >
VTKM_CONT vtkm::cont::ArrayHandleOffsetsToNumComponents< OffsetsArray >::ArrayHandleOffsetsToNumComponents ( const OffsetsArray &  array)
inline

Member Function Documentation

◆ VTKM_ARRAY_HANDLE_SUBCLASS()

template<class OffsetsArray >
vtkm::cont::ArrayHandleOffsetsToNumComponents< OffsetsArray >::VTKM_ARRAY_HANDLE_SUBCLASS ( ArrayHandleOffsetsToNumComponents< OffsetsArray >  ,
(ArrayHandleOffsetsToNumComponents< OffsetsArray >)  ,
(vtkm::cont::ArrayHandle< vtkm::IdComponent, vtkm::cont::StorageTagOffsetsToNumComponents< typename OffsetsArray::StorageTag >>)   
)

◆ VTKM_IS_ARRAY_HANDLE()

template<class OffsetsArray >
vtkm::cont::ArrayHandleOffsetsToNumComponents< OffsetsArray >::VTKM_IS_ARRAY_HANDLE ( OffsetsArray  )
private

◆ VTKM_STATIC_ASSERT_MSG()

template<class OffsetsArray >
vtkm::cont::ArrayHandleOffsetsToNumComponents< OffsetsArray >::VTKM_STATIC_ASSERT_MSG ( (std::is_same< typename OffsetsArray::ValueType, vtkm::Id >::value)  ,
"Offsets array must have a value type of vtkm::Id."   
)
private

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