VTK  9.5.20251025
vtkDataArrayAccessor.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
3
88#include "vtkDataArray.h"
89#include "vtkGenericDataArray.h"
90
91#ifndef vtkDataArrayAccessor_h
92#define vtkDataArrayAccessor_h
93
94// Generic form for all (non-bit) vtkDataArray subclasses.
95VTK_ABI_NAMESPACE_BEGIN
96template <typename ArrayT>
98{
99 typedef ArrayT ArrayType;
100 typedef typename ArrayType::ValueType APIType;
101
103
105 : Array(array)
106 {
107 }
108
109 VTK_ALWAYS_INLINE
110 APIType Get(vtkIdType tupleIdx, int compIdx) const
111 {
112 return this->Array->GetTypedComponent(tupleIdx, compIdx);
113 }
114
115 VTK_ALWAYS_INLINE
116 APIType Get(vtkIdType valueIdx) const { return this->Array->GetValue(valueIdx); }
117
118 VTK_ALWAYS_INLINE
119 void Set(vtkIdType tupleIdx, int compIdx, APIType val) const
120 {
121 this->Array->SetTypedComponent(tupleIdx, compIdx, val);
122 }
123
124 VTK_ALWAYS_INLINE
125 void Set(vtkIdType valueIdx, APIType val) const { this->Array->SetValue(valueIdx, val); }
126
127 VTK_ALWAYS_INLINE
128 void Insert(vtkIdType tupleIdx, int compIdx, APIType val) const
129 {
130 this->Array->InsertTypedComponent(tupleIdx, compIdx, val);
131 }
132
133 VTK_ALWAYS_INLINE
134 void Insert(vtkIdType valueIdx, APIType val) const { this->Array->InsertValue(valueIdx, val); }
135
136 VTK_ALWAYS_INLINE
137 void InsertNext(APIType val) const { this->Array->InsertNextValue(val); }
138
139 VTK_ALWAYS_INLINE
140 void InsertNext(APIType* tuple) const { this->Array->InsertNextTypedTuple(tuple); }
141
142 VTK_ALWAYS_INLINE
143 void Get(vtkIdType tupleIdx, APIType* tuple) const
144 {
145 this->Array->GetTypedTuple(tupleIdx, tuple);
146 }
147
148 VTK_ALWAYS_INLINE
149 void Set(vtkIdType tupleIdx, const APIType* tuple) const
150 {
151 this->Array->SetTypedTuple(tupleIdx, tuple);
152 }
153
154 VTK_ALWAYS_INLINE
155 void Insert(vtkIdType tupleIdx, const APIType* tuple) const
156 {
157 this->Array->InsertTypedTuple(tupleIdx, tuple);
158 }
159};
160
161// Specialization for vtkDataArray.
162template <>
164{
166 typedef double APIType;
167
169
171 : Array(array)
172 {
173 }
174
175 VTK_ALWAYS_INLINE
176 APIType Get(vtkIdType tupleIdx, int compIdx) const
177 {
178 return this->Array->GetComponent(tupleIdx, compIdx);
179 }
180
181 VTK_ALWAYS_INLINE
182 APIType Get(vtkIdType valueIdx) const
183 {
184 auto div = std::div(valueIdx, static_cast<vtkIdType>(this->Array->GetNumberOfComponents()));
185 return this->Array->GetComponent(div.quot, div.rem);
186 }
187
188 VTK_ALWAYS_INLINE
189 void Set(vtkIdType tupleIdx, int compIdx, APIType val) const
190 {
191 this->Array->SetComponent(tupleIdx, compIdx, val);
192 }
193
194 VTK_ALWAYS_INLINE
195 void Set(vtkIdType valueIdx, APIType val) const
196 {
197 auto div = std::div(valueIdx, static_cast<vtkIdType>(this->Array->GetNumberOfComponents()));
198 this->Array->SetComponent(div.quot, div.rem, val);
199 }
200
201 VTK_ALWAYS_INLINE
202 void Insert(vtkIdType tupleIdx, int compIdx, APIType val) const
203 {
204 this->Array->InsertComponent(tupleIdx, compIdx, val);
205 }
206
207 VTK_ALWAYS_INLINE
208 void Insert(vtkIdType valueIdx, APIType val) const
209 {
210 auto div = std::div(valueIdx, static_cast<vtkIdType>(this->Array->GetNumberOfComponents()));
211 this->Array->InsertComponent(div.quot, div.rem, val);
212 }
213
214 VTK_ALWAYS_INLINE
215 void InsertNext(APIType val) const { this->Array->InsertNextTuple1(val); }
216
217 VTK_ALWAYS_INLINE
218 void InsertNext(APIType* tuple) const { this->Array->InsertNextTuple(tuple); }
219
220 VTK_ALWAYS_INLINE
221 void Get(vtkIdType tupleIdx, APIType* tuple) const { this->Array->GetTuple(tupleIdx, tuple); }
222
223 VTK_ALWAYS_INLINE
224 void Set(vtkIdType tupleIdx, const APIType* tuple) const
225 {
226 this->Array->SetTuple(tupleIdx, tuple);
227 }
228
229 VTK_ALWAYS_INLINE
230 void Insert(vtkIdType tupleIdx, const APIType* tuple) const
231 {
232 this->Array->InsertTuple(tupleIdx, tuple);
233 }
234};
235
236VTK_ABI_NAMESPACE_END
237#endif // vtkDataArrayAccessor_h
238// VTK-HeaderTest-Exclude: vtkDataArrayAccessor.h
int GetNumberOfComponents() const
Set/Get the dimension (n) of the components.
abstract superclass for arrays of numeric data
virtual double * GetTuple(vtkIdType tupleIdx)=0
Get the data tuple at tupleIdx.
void InsertNextTuple1(double value)
These methods are included as convenience for the wrappers.
void SetTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray *source) override
See documentation from parent class.
virtual void SetComponent(vtkIdType tupleIdx, int compIdx, double value)
Set the data component at the location specified by tupleIdx and compIdx to value.
virtual void InsertComponent(vtkIdType tupleIdx, int compIdx, double value)
Insert value at the location specified by tupleIdx and compIdx.
virtual double GetComponent(vtkIdType tupleIdx, int compIdx)
Return the data component at the location specified by tupleIdx and compIdx.
vtkIdType InsertNextTuple(vtkIdType srcTupleIdx, vtkAbstractArray *source) override
See documentation from parent class.
void InsertTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray *source) override
See documentation from parent class.
VTK_ALWAYS_INLINE APIType Get(vtkIdType valueIdx) const
VTK_ALWAYS_INLINE void Insert(vtkIdType tupleIdx, int compIdx, APIType val) const
VTK_ALWAYS_INLINE void InsertNext(APIType val) const
VTK_ALWAYS_INLINE void Insert(vtkIdType tupleIdx, const APIType *tuple) const
VTK_ALWAYS_INLINE void InsertNext(APIType *tuple) const
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 Set(vtkIdType tupleIdx, const APIType *tuple) const
VTK_ALWAYS_INLINE void Insert(vtkIdType valueIdx, APIType val) const
VTK_ALWAYS_INLINE void Get(vtkIdType tupleIdx, APIType *tuple) const
VTK_ALWAYS_INLINE void Set(vtkIdType valueIdx, APIType val) const
Efficient templated access to vtkDataArray.
VTK_ALWAYS_INLINE APIType Get(vtkIdType tupleIdx, int compIdx) const
VTK_ALWAYS_INLINE void Insert(vtkIdType valueIdx, APIType val) const
VTK_ALWAYS_INLINE APIType Get(vtkIdType valueIdx) const
VTK_ALWAYS_INLINE void Set(vtkIdType tupleIdx, const APIType *tuple) const
VTK_ALWAYS_INLINE void Set(vtkIdType valueIdx, APIType val) const
VTK_ALWAYS_INLINE void Insert(vtkIdType tupleIdx, int compIdx, APIType val) const
VTK_ALWAYS_INLINE void InsertNext(APIType val) const
VTK_ALWAYS_INLINE void Set(vtkIdType tupleIdx, int compIdx, APIType val) const
VTK_ALWAYS_INLINE void InsertNext(APIType *tuple) const
VTK_ALWAYS_INLINE void Insert(vtkIdType tupleIdx, const APIType *tuple) const
VTK_ALWAYS_INLINE void Get(vtkIdType tupleIdx, APIType *tuple) const
ArrayType::ValueType APIType
vtkDataArrayAccessor(ArrayType *array)
int vtkIdType
Definition vtkType.h:367