VTK  9.6.20260227
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
84
85#include "vtkDataArray.h"
86#include "vtkGenericDataArray.h"
87
88#ifndef vtkDataArrayAccessor_h
89#define vtkDataArrayAccessor_h
90
91// Generic form for all (non-bit) vtkDataArray subclasses.
92VTK_ABI_NAMESPACE_BEGIN
93template <typename ArrayT>
95{
96 typedef ArrayT ArrayType;
97 typedef typename ArrayType::ValueType APIType;
98
100
102 : Array(array)
103 {
104 }
105
106 VTK_ALWAYS_INLINE
107 APIType Get(vtkIdType tupleIdx, int compIdx) const
108 {
109 return this->Array->GetTypedComponent(tupleIdx, compIdx);
110 }
111
112 VTK_ALWAYS_INLINE
113 APIType Get(vtkIdType valueIdx) const { return this->Array->GetValue(valueIdx); }
114
115 VTK_ALWAYS_INLINE
116 void Set(vtkIdType tupleIdx, int compIdx, APIType val) const
117 {
118 this->Array->SetTypedComponent(tupleIdx, compIdx, val);
119 }
120
121 VTK_ALWAYS_INLINE
122 void Set(vtkIdType valueIdx, APIType val) const { this->Array->SetValue(valueIdx, val); }
123
124 VTK_ALWAYS_INLINE
125 void Insert(vtkIdType tupleIdx, int compIdx, APIType val) const
126 {
127 this->Array->InsertTypedComponent(tupleIdx, compIdx, val);
128 }
129
130 VTK_ALWAYS_INLINE
131 void Insert(vtkIdType valueIdx, APIType val) const { this->Array->InsertValue(valueIdx, val); }
132
133 VTK_ALWAYS_INLINE
134 void InsertNext(APIType val) const { this->Array->InsertNextValue(val); }
135
136 VTK_ALWAYS_INLINE
137 void InsertNext(APIType* tuple) const { this->Array->InsertNextTypedTuple(tuple); }
138
139 VTK_ALWAYS_INLINE
140 void Get(vtkIdType tupleIdx, APIType* tuple) const
141 {
142 this->Array->GetTypedTuple(tupleIdx, tuple);
143 }
144
145 VTK_ALWAYS_INLINE
146 void Set(vtkIdType tupleIdx, const APIType* tuple) const
147 {
148 this->Array->SetTypedTuple(tupleIdx, tuple);
149 }
150
151 VTK_ALWAYS_INLINE
152 void Insert(vtkIdType tupleIdx, const APIType* tuple) const
153 {
154 this->Array->InsertTypedTuple(tupleIdx, tuple);
155 }
156};
157
158// Specialization for vtkDataArray.
159template <>
161{
163 typedef double APIType;
164
166
168 : Array(array)
169 {
170 }
171
172 VTK_ALWAYS_INLINE
173 APIType Get(vtkIdType tupleIdx, int compIdx) const
174 {
175 return this->Array->GetComponent(tupleIdx, compIdx);
176 }
177
178 VTK_ALWAYS_INLINE
179 APIType Get(vtkIdType valueIdx) const
180 {
181 auto div = std::div(valueIdx, static_cast<vtkIdType>(this->Array->GetNumberOfComponents()));
182 return this->Array->GetComponent(div.quot, div.rem);
183 }
184
185 VTK_ALWAYS_INLINE
186 void Set(vtkIdType tupleIdx, int compIdx, APIType val) const
187 {
188 this->Array->SetComponent(tupleIdx, compIdx, val);
189 }
190
191 VTK_ALWAYS_INLINE
192 void Set(vtkIdType valueIdx, APIType val) const
193 {
194 auto div = std::div(valueIdx, static_cast<vtkIdType>(this->Array->GetNumberOfComponents()));
195 this->Array->SetComponent(div.quot, div.rem, val);
196 }
197
198 VTK_ALWAYS_INLINE
199 void Insert(vtkIdType tupleIdx, int compIdx, APIType val) const
200 {
201 this->Array->InsertComponent(tupleIdx, compIdx, val);
202 }
203
204 VTK_ALWAYS_INLINE
205 void Insert(vtkIdType valueIdx, APIType val) const
206 {
207 auto div = std::div(valueIdx, static_cast<vtkIdType>(this->Array->GetNumberOfComponents()));
208 this->Array->InsertComponent(div.quot, div.rem, val);
209 }
210
211 VTK_ALWAYS_INLINE
212 void InsertNext(APIType val) const { this->Array->InsertNextTuple1(val); }
213
214 VTK_ALWAYS_INLINE
215 void InsertNext(APIType* tuple) const { this->Array->InsertNextTuple(tuple); }
216
217 VTK_ALWAYS_INLINE
218 void Get(vtkIdType tupleIdx, APIType* tuple) const { this->Array->GetTuple(tupleIdx, tuple); }
219
220 VTK_ALWAYS_INLINE
221 void Set(vtkIdType tupleIdx, const APIType* tuple) const
222 {
223 this->Array->SetTuple(tupleIdx, tuple);
224 }
225
226 VTK_ALWAYS_INLINE
227 void Insert(vtkIdType tupleIdx, const APIType* tuple) const
228 {
229 this->Array->InsertTuple(tupleIdx, tuple);
230 }
231};
232
233VTK_ABI_NAMESPACE_END
234#endif // vtkDataArrayAccessor_h
235// VTK-HeaderTest-Exclude: vtkDataArrayAccessor.h
int GetNumberOfComponents() const
Set/Get the dimension (n) of the components.
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
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)
#define vtkDataArray
int vtkIdType
Definition vtkType.h:363