VTK
9.1.0
|
Efficient templated access to vtkDataArray. More...
#include <vtkDataArrayAccessor.h>
Public Types | |
typedef ArrayT | ArrayType |
typedef ArrayType::ValueType | APIType |
Public Member Functions | |
vtkDataArrayAccessor (ArrayType *array) | |
VTK_ALWAYS_INLINE APIType | Get (vtkIdType tupleIdx, int compIdx) const |
VTK_ALWAYS_INLINE void | Set (vtkIdType tupleIdx, int compIdx, APIType val) const |
VTK_ALWAYS_INLINE void | Insert (vtkIdType tupleIdx, int compIdx, APIType val) const |
VTK_ALWAYS_INLINE void | Get (vtkIdType tupleIdx, APIType *tuple) const |
VTK_ALWAYS_INLINE void | Set (vtkIdType tupleIdx, const APIType *tuple) const |
VTK_ALWAYS_INLINE void | Insert (vtkIdType tupleIdx, const APIType *tuple) const |
Public Attributes | |
ArrayType * | Array |
Efficient templated access to vtkDataArray.
vtkDataArrayAccessor provides access to data stored in a vtkDataArray. It is intended to be used in conjunction with vtkArrayDispatcher.
A more detailed description of this class and related tools can be found here.
The goal of this helper template is to allow developers to write a single templated worker function that will generates code to use the efficient typed APIs provided by vtkGenericDataArray when the array type is known, but fallback to the slower vtkDataArray virtual double API if needed.
This can be used to reduce template-explosion issues by restricting the vtkArrayDispatch call to only dispatch a few common cases/array types, and route all other arrays through a slower implementation using vtkDataArray's API. With vtkDataArrayAccessor, a single templated worker function can be used to generate both.
Note that while this interface provides both component-wise and tuple access, the tuple methods are discouraged as they are significantly slower as they copy data into a temporary array, and prevent many advanced compiler optimizations that are possible when using the component accessors. In other words, prefer the methods that operate on a single component instead of an entire tuple when performance matters.
A standard usage pattern of this class would be:
We define Worker::operator() as the templated worker function, restricting all data accesses to go through the 'accessor' object (methods like GetNumberOfTuples, GetNumberOfComponents, etc should be called on the array itself).
This worker is passed into an array dispatcher, which tests 'array' to see if it can figure out the array subclass. If it does, Worker is instantiated with ArrayT set to the array's subclass, resulting in efficient code. If Dispatch::Execute returns false (meaning the array type is not recognized), the worker is executed using the vtkDataArray pointer. While slower, this ensures that less-common cases will still be handled – all from one worker function template.
.SEE ALSO vtkArrayDispatch vtk::DataArrayValueRange vtk::DataArrayTupleRange
Definition at line 107 of file vtkDataArrayAccessor.h.
typedef ArrayT vtkDataArrayAccessor< ArrayT >::ArrayType |
Definition at line 109 of file vtkDataArrayAccessor.h.
typedef ArrayType::ValueType vtkDataArrayAccessor< ArrayT >::APIType |
Definition at line 110 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 114 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 120 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 126 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 132 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 138 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 144 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 150 of file vtkDataArrayAccessor.h.
ArrayType* vtkDataArrayAccessor< ArrayT >::Array |
Definition at line 112 of file vtkDataArrayAccessor.h.