VTK  9.7.20261008
vtkmDataArray.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-FileCopyrightText: Copyright (c) Kitware, Inc.
3// SPDX-FileCopyrightText: Copyright 2019 Sandia Corporation.
4// SPDX-FileCopyrightText: Copyright 2019 UT-Battelle, LLC.
5// SPDX-FileCopyrightText: Copyright 2019 Los Alamos National Security.
6// SPDX-License-Identifier: LicenseRef-BSD-3-Clause-Sandia-LANL-USGov
27
28#ifndef vtkmDataArray_h
29#define vtkmDataArray_h
30
31#include "vtkAcceleratorsVTKmCoreModule.h" // For export macro
32#include "vtkGenericDataArray.h"
33#include "vtkmConfigCore.h" // For template export
34
35#include <viskores/VecTraits.h> // For viskores::VecTraits
36#include <viskores/cont/ArrayHandle.h> // For viskores::cont::ArrayHandle
37#include <viskores/cont/UnknownArrayHandle.h> // For viskores::cont::UnknownArrayHandle
38
39#include <memory> // For std::unique_ptr<>
40#include <mutex> // For std::mutex
41
42namespace fromvtkm
43{
44VTK_ABI_NAMESPACE_BEGIN
45
46template <typename T>
48
49template <typename T>
51
52template <typename ArrayHandleType>
54
55template <typename ArrayHandleType>
57
58VTK_ABI_NAMESPACE_END
59} // fromvtkm
60
61VTK_ABI_NAMESPACE_BEGIN
62template <typename T>
64 : public vtkGenericDataArray<vtkmDataArray<T>, T, vtkArrayTypes::VTKM_DATA_ARRAY>
65{
66 static_assert(std::is_arithmetic<T>::value, "T must be an integral or floating-point type");
67
68 using GenericDataArrayType =
70
71public:
73 vtkTemplateTypeMacro(SelfType, GenericDataArrayType);
74 using typename Superclass::ArrayTypeTag;
75 using typename Superclass::DataTypeTag;
76 using typename Superclass::ValueType;
77
78 static vtkmDataArray* New();
79
82 void SetVtkmArrayHandle(const viskores::cont::UnknownArrayHandle& ah);
83
86 viskores::cont::UnknownArrayHandle GetVtkmUnknownArrayHandle() const;
87
91 void* GetVoidPointer(vtkIdType valueIdx) override;
92 VTK_DEPRECATED_IN_9_7_0("Use vtkmDataArray::WritePointer(valueIdx, numValues) or "
93 "vtkAbstractArray::SetNumberOf[Values/Tuples]() instead")
94 void* WriteVoidPointer(vtkIdType valueIdx, vtkIdType numValues) override;
95 T* GetPointer(vtkIdType valueIdx);
96 T* WritePointer(vtkIdType valueIdx, vtkIdType numValues);
99 void* GetDeviceVoidPointer(vtkIdType valueIdx) override;
100
120
122 ValueType GetValue(vtkIdType valueIdx) const;
123 void SetValue(vtkIdType valueIdx, ValueType value);
124 void GetTypedTuple(vtkIdType tupleIdx, ValueType* tuple) const;
125 void SetTypedTuple(vtkIdType tupleIdx, const ValueType* tuple);
126 ValueType GetTypedComponent(vtkIdType tupleIdx, int compIdx) const;
127 void SetTypedComponent(vtkIdType tupleIdx, int compIdx, ValueType value);
128
129protected:
131 ~vtkmDataArray() override;
132
137 double* ranges, const unsigned char* ghosts, unsigned char ghostsToSkip = 0xff) override;
140 double range[2], const unsigned char* ghosts, unsigned char ghostsToSkip = 0xff) override;
143 double* ranges, const unsigned char* ghosts, unsigned char ghostsToSkip = 0xff) override;
146 double range[2], const unsigned char* ghosts, unsigned char ghostsToSkip = 0xff) override;
147
149 bool AllocateTuples(vtkIdType numberOfTuples);
150 bool ReallocateTuples(vtkIdType numberOfTuples);
151
152private:
153 // To access concept methods
154 friend class vtkGenericDataArray<SelfType, ValueType, ArrayTypeTag::value>;
155 friend fromvtkm::ArrayHandleHelperBase<T>;
156 friend fromvtkm::ArrayHandleHelperUnknown<T>;
157 template <typename ArrayHandleType>
159 template <typename ArrayHandleType>
161
162 mutable std::unique_ptr<fromvtkm::ArrayHandleHelperBase<T>> Helper;
163
164 mutable std::mutex Mutex;
165
166 vtkmDataArray(const vtkmDataArray&) = delete;
167 void operator=(const vtkmDataArray&) = delete;
168};
169
170// Declare vtkArrayDownCast implementations for vtkmDataArray:
172
173//=============================================================================
174template <typename T, typename S>
175inline vtkmDataArray<typename viskores::VecTraits<T>::BaseComponentType>* make_vtkmDataArray(
176 const viskores::cont::ArrayHandle<T, S>& ah)
177{
179 ret->SetVtkmArrayHandle(ah);
180 return ret;
181}
182
183//=============================================================================
184template <typename TCast, typename TReal, typename S>
186 const viskores::cont::ArrayHandle<TCast, viskores::cont::StorageTagCast<TReal, S>>& ah)
187{
189 ret->SetVtkmArrayHandle(ah);
190 return ret;
191}
192
193//=============================================================================
194#ifndef vtkmDataArray_cxx
195extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<char>;
196extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<double>;
197extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<float>;
198extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<int>;
199extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<long>;
200extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<long long>;
201extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<short>;
202extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<signed char>;
203extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<unsigned char>;
204extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<unsigned int>;
205extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<unsigned long>;
206extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<unsigned long long>;
207extern template class VTKACCELERATORSVTKMCORE_TEMPLATE_EXPORT vtkmDataArray<unsigned short>;
208#endif // vtkmDataArray_cxx
209
210VTK_ABI_NAMESPACE_END
211#endif // vtkmDataArray_h
212
213#include "vtkmlib/vtkmDataArray.hxx"
214
215// VTK-HeaderTest-Exclude: vtkmDataArray.h
std::integral_constant< int, VTK_OPAQUE > DataTypeTag
std::integral_constant< int, vtkArrayTypes::VTK_ABSTRACT_ARRAY > ArrayTypeTag
create and manipulate ordered lists of objects
vtkAbstractArray Superclass
Wraps a Viskores ArrayHandle inside a sub-class of vtkGenericDataArray.
bool ComputeVectorRange(double range[2], const unsigned char *ghosts, unsigned char ghostsToSkip=0xff) override
Returns true if the range was computed.
void * GetVoidPointer(vtkIdType valueIdx) override
T * GetPointer(vtkIdType valueIdx)
friend class fromvtkm::ArrayHandleHelperRead
vtkCollection * NewMemoryDescriptors() override
Describe the memory backing this array, without copying it off the device.
ValueType GetValue(vtkIdType valueIdx) const
Support methods for vtkGenericDataArray.
void * WriteVoidPointer(vtkIdType valueIdx, vtkIdType numValues) override
friend class fromvtkm::ArrayHandleHelperWrite
bool ComputeFiniteVectorRange(double range[2], const unsigned char *ghosts, unsigned char ghostsToSkip=0xff) override
Returns true if the range was computed.
void SetValue(vtkIdType valueIdx, ValueType value)
void SetTypedTuple(vtkIdType tupleIdx, const ValueType *tuple)
vtkDataArray::MemorySpace GetMemorySpace() override
void SetTypedComponent(vtkIdType tupleIdx, int compIdx, ValueType value)
T * WritePointer(vtkIdType valueIdx, vtkIdType numValues)
vtkmDataArray< T > SelfType
bool ComputeFiniteScalarRange(double *ranges, const unsigned char *ghosts, unsigned char ghostsToSkip=0xff) override
Computes the range for each component of an array, the length of ranges must be two times the number ...
static vtkmDataArray * New()
void * GetDeviceVoidPointer(vtkIdType valueIdx) override
bool AllocateTuples(vtkIdType numberOfTuples)
concept methods for vtkGenericDataArray
std::integral_constant< int, vtkArrayTypes::VTK_ABSTRACT_ARRAY > ArrayTypeTag
void GetTypedTuple(vtkIdType tupleIdx, ValueType *tuple) const
ValueType GetTypedComponent(vtkIdType tupleIdx, int compIdx) const
viskores::cont::UnknownArrayHandle GetVtkmUnknownArrayHandle() const
Get the underlying ArrayHandle.
T * GetDevicePointer(vtkIdType valueIdx)
vtkTemplateTypeMacro(SelfType, GenericDataArrayType)
bool ComputeScalarRange(double *ranges, const unsigned char *ghosts, unsigned char ghostsToSkip=0xff) override
Computes the range for each component of an array, the length of ranges must be two times the number ...
bool ReallocateTuples(vtkIdType numberOfTuples)
void SetVtkmArrayHandle(const viskores::cont::UnknownArrayHandle &ah)
Set the Viskores ArrayHandle to be wrapped.
#define vtkArrayDownCast_TemplateFastCastMacro(ArrayT)
Same as vtkArrayDownCast_FastCastMacro, but treats ArrayT as a single-parameter template (the paramet...
#define VTK_DEPRECATED_IN_9_7_0(reason)
int vtkIdType
Definition vtkType.h:363
@ VTKM_DATA_ARRAY
Definition vtkType.h:86
#define VTK_NEWINSTANCE
vtkmDataArray< typename viskores::VecTraits< T >::BaseComponentType > * make_vtkmDataArray(const viskores::cont::ArrayHandle< T, S > &ah)