VTK
|
Efficient templated access to vtkDataArray. More...
#include <vtkDataArrayAccessor.h>
Public Types | |
typedef ArrayT | ArrayType |
typedef ArrayType::ValueType | APIType |
Public Member Functions | |
vtkDataArrayAccessor (ArrayType *array) | |
APIType | Get (vtkIdType tupleIdx, int compIdx) const |
void | Set (vtkIdType tupleIdx, int compIdx, APIType val) const |
void | Insert (vtkIdType tupleIdx, int compIdx, APIType val) const |
void | Get (vtkIdType tupleIdx, APIType *tuple) const |
void | Set (vtkIdType tupleIdx, const APIType *tuple) const |
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
Definition at line 104 of file vtkDataArrayAccessor.h.
typedef ArrayT vtkDataArrayAccessor< ArrayT >::ArrayType |
Definition at line 106 of file vtkDataArrayAccessor.h.
typedef ArrayType::ValueType vtkDataArrayAccessor< ArrayT >::APIType |
Definition at line 107 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 111 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 113 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 118 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 123 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 128 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 133 of file vtkDataArrayAccessor.h.
|
inline |
Definition at line 138 of file vtkDataArrayAccessor.h.
ArrayType* vtkDataArrayAccessor< ArrayT >::Array |
Definition at line 109 of file vtkDataArrayAccessor.h.