|
| 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 > > |
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...
|
|
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.