1 #ifndef svtkHAMRDataArrayImpl_h 2 #define svtkHAMRDataArrayImpl_h 4 #include <svtkCallbackCommand.h> 5 #include <svtkCommand.h> 15 void svtkHAMRDataArrayDelete(svtkObject *,
unsigned long,
void *clientData,
void *)
17 svtkObject *heldRef = (svtkObject*)clientData;
49 svtkStream(), svtkStreamMode::sync_host);
55 svtkAllocator alloc, svtkStream stream, svtkStreamMode streamMode)
59 std::cerr << __FILE__ <<
":" << __LINE__ << std::endl
60 <<
"ERROR: Can't copy construct a nullptr" << std::endl;
64 long numTups = da->GetNumberOfTuples();
65 long numComps = da->GetNumberOfComponents();
66 const char *name = da->GetName();
68 switch (da->GetDataType())
77 inst->Data =
new hamr::buffer<T>(alloc, stream, streamMode, *tDa->Data);
78 inst->MaxId = numTups - 1;
79 inst->NumberOfComponents = numComps;
84 else if (
dynamic_cast<svtkAOSDataArrayTemplate<SVTK_TT>*
>(da))
86 auto tDa =
static_cast<svtkAOSDataArrayTemplate<SVTK_TT>*
>(da);
90 inst->Data =
new hamr::buffer<T>(alloc, stream, streamMode, numTups*numComps);
91 inst->Data->set(0, tDa->GetPointer(0), 0, numTups);
92 inst->MaxId = numTups - 1;
93 inst->NumberOfComponents = numComps;
101 std::cerr << __FILE__ <<
":" << __LINE__ << std::endl
102 <<
"ERROR: Unsupported array type " << da->GetClassName() << std::endl;
111 size_t numTuples,
int numComps, svtkAllocator alloc, svtkStream stream,
112 svtkStreamMode streamMode)
114 assert(numComps > 0);
117 tmp->Data =
new hamr::buffer<T>(alloc, stream, streamMode, numTuples*numComps);
118 tmp->MaxId = numTuples - 1;
119 tmp->NumberOfComponents = numComps;
120 tmp->SetName(name.c_str());
128 size_t numTuples,
int numComps, svtkAllocator alloc, svtkStream stream,
129 svtkStreamMode streamMode,
const T &initVal)
131 assert(numComps > 0);
134 tmp->Data =
new hamr::buffer<T>(alloc, stream, streamMode, numTuples*numComps, initVal);
135 tmp->MaxId = numTuples - 1;
136 tmp->NumberOfComponents = numComps;
137 tmp->SetName(name.c_str());
145 size_t numTuples,
int numComps, svtkAllocator alloc, svtkStream stream,
146 svtkStreamMode streamMode,
int owner,
int take)
148 assert(numComps > 0);
154 tmp->Data =
new hamr::buffer<T>(alloc, stream, streamMode,
155 numTuples*numComps, owner, data);
159 std::shared_ptr<T> dataPtr(data, [](
void*){});
161 tmp->Data =
new hamr::buffer<T>(alloc, stream, streamMode,
162 numTuples*numComps, owner, dataPtr);
165 tmp->MaxId = numTuples - 1;
166 tmp->NumberOfComponents = numComps;
167 tmp->SetName(name.c_str());
175 const std::shared_ptr<T> &data,
size_t numTuples,
int numComps,
176 svtkAllocator alloc, svtkStream stream, svtkStreamMode streamMode,
179 assert(numComps > 0);
183 tmp->Data =
new hamr::buffer<T>(alloc, stream, streamMode,
184 numTuples*numComps, owner, data);
186 tmp->MaxId = numTuples - 1;
187 tmp->NumberOfComponents = numComps;
188 tmp->SetName(name.c_str());
195 template <
typename deleter_t>
197 T *data,
size_t numTuples,
int numComps, svtkAllocator alloc,
198 svtkStream stream, svtkStreamMode streamMode,
int owner, deleter_t deleter)
200 assert(numComps > 0);
204 tmp->Data =
new hamr::buffer<T>(alloc, stream, streamMode,
205 numTuples*numComps, owner, data, deleter);
207 tmp->MaxId = numTuples - 1;
208 tmp->SetNumberOfComponents(numComps);
209 tmp->SetName(name.c_str());
217 int numComps, svtkAllocator alloc, svtkStream stream,
218 svtkStreamMode streamMode,
int owner)
220 assert(numComps > 0);
224 this->Data =
new hamr::buffer<T>(alloc, stream, streamMode,
225 numTuples*numComps, owner, data);
227 this->MaxId = numTuples - 1;
228 this->NumberOfComponents = numComps;
234 size_t numTuples,
int numComps, svtkAllocator alloc, svtkStream stream,
235 svtkStreamMode streamMode,
int owner)
237 assert(numComps > 0);
241 this->Data =
new hamr::buffer<T>(alloc, stream, streamMode,
242 numTuples*numComps, owner, data);
244 this->MaxId = numTuples - 1;
245 this->NumberOfComponents = numComps;
250 template <
typename deleter_t>
252 svtkAllocator alloc, svtkStream stream, svtkStreamMode streamMode,
253 int owner, deleter_t deleter)
255 assert(numComps > 0);
259 this->Data =
new hamr::buffer<T>(alloc, stream, streamMode,
260 numTuples*numComps, owner, data, deleter);
262 this->MaxId = numTuples - 1;
263 this->SetNumberOfComponents(numComps);
267 #define AsSvtkDataArrayImpl(_cls_t, _cpp_t) \ 268 if (std::is_same<_cls_t, _cpp_t>::value) \ 270 int nComps = this->GetNumberOfComponents(); \ 271 size_t nTups = this->GetNumberOfTuples(); \ 273 svtkAOSDataArrayTemplate<_cpp_t> *tmp = \ 274 svtkAOSDataArrayTemplate<_cpp_t>::New(); \ 276 tmp->SetNumberOfComponents(nComps); \ 277 tmp->SetName(this->GetName()); \ 279 if (this->Data->host_accessible()) \ 282 tmp->SetVoidArray(this->Data->data(), nTups, 1, 0); \ 287 tmp->SetNumberOfTuples(nTups); \ 288 T *ptr = (T*)tmp->GetVoidPointer(0); \ 289 this->Data->get(0, ptr, 0, nTups*nComps); \ 299 int nComps = this->GetNumberOfComponents();
300 size_t nTups = this->GetNumberOfTuples();
302 svtkAOSDataArrayTemplate<T> *tmp =
303 svtkAOSDataArrayTemplate<T>::New();
305 tmp->SetNumberOfComponents(nComps);
306 tmp->SetName(this->GetName());
308 if (zeroCopy && this->Data->host_accessible())
312 tmp->SetVoidArray(this->Data->data(), nTups, 1, 0);
315 this->Register(
nullptr);
319 svtkCallbackCommand *cc = svtkCallbackCommand::New();
320 cc->SetCallback(svtkHAMRDataArrayDelete);
321 cc->SetClientData(
this);
323 tmp->AddObserver(svtkCommand::DeleteEvent, cc);
329 tmp->SetNumberOfTuples(nTups);
330 T *ptr = (T*)tmp->GetVoidPointer(0);
331 this->Data->get(0, ptr, 0, nTups*nComps);
341 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
350 if (std::is_same<T, double>::value)
354 else if (std::is_same<T, float>::value)
358 else if (std::is_same<T, long long>::value)
360 return SVTK_LONG_LONG;
362 else if (std::is_same<T, long>::value)
366 else if (std::is_same<T, int>::value)
370 else if (std::is_same<T, short>::value)
374 else if (std::is_same<T, char>::value)
378 else if (std::is_same<T, unsigned long long>::value)
380 return SVTK_UNSIGNED_LONG_LONG;
382 else if (std::is_same<T, unsigned long>::value)
384 return SVTK_UNSIGNED_LONG;
386 else if (std::is_same<T, unsigned int>::value)
388 return SVTK_UNSIGNED_INT;
390 else if (std::is_same<T, unsigned short>::value)
392 return SVTK_UNSIGNED_SHORT;
394 else if (std::is_same<T, unsigned char>::value)
396 return SVTK_UNSIGNED_CHAR;
400 svtkErrorMacro(
"No SVTK type for T");
442 this->Data->resize(numTuples*this->NumberOfComponents);
461 this->Data =
new hamr::buffer<T>(alloc, numTuples*this->NumberOfComponents);
465 this->Data->move(alloc);
466 this->Data->resize(numTuples);
469 this->MaxId = numTuples - 1;
485 template <
typename T>
490 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
496 template <
typename T>
499 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
525 template <
typename T>
528 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
534 template <
typename T>
540 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
545 template <
typename T>
551 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
556 template <
typename T>
562 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
567 template <
typename T>
574 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
579 template <
typename T>
584 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
589 template <
typename T>
594 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
599 template <
typename T>
605 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
610 template <
typename T>
613 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
619 template <
typename T>
628 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
634 template <
typename T>
638 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
643 template <
typename T>
650 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
655 template <
typename T>
664 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
669 template <
typename T>
672 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
677 template <
typename T>
683 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
688 template <
typename T>
695 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
700 template <
typename T>
704 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
709 template <
typename T>
713 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
718 template <
typename T>
721 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
727 template <
typename T>
730 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
736 template <
typename T>
740 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
745 template <
typename T>
750 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
755 template <
typename T>
759 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
764 template <
typename T>
769 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
774 template <
typename T>
779 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
784 template <
typename T>
787 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
792 template <
typename T>
795 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
800 template <
typename T>
806 (void)minimumProminence;
807 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
812 template <
typename T>
817 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
823 template <
typename T>
827 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
833 template <
typename T>
838 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
843 template <
typename T>
848 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
853 template <
typename T>
858 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
863 template <
typename T>
868 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
873 template <
typename T>
878 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
883 template <
typename T>
887 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
893 template <
typename T>
897 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
902 template <
typename T>
906 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
911 template <
typename T>
914 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
919 template <
typename T>
924 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
930 template <
typename T>
936 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
941 template <
typename T>
947 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
952 template <
typename T>
960 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
965 template <
typename T>
969 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
974 template <
typename T>
978 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
983 template <
typename T>
988 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
993 template <
typename T>
997 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
1002 template <
typename T>
1008 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
1013 template <
typename T>
1018 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
1023 template <
typename T>
1026 svtkErrorMacro(<<
"Method \"" << __FUNCTION__ <<
"\" not implemented.");
1031 template <
typename T>
1038 template <
typename T>
1044 std::cerr <<
"this->Data = ";
1047 this->Data->print();
1051 std::cerr <<
"nullptr";
int Initialize(MPI_Comm comm, const std::string &fileName, InTransitDataAdaptor *&dataAdaptor)
Creates a sensei::ConfigurableAnalysis adaptor and sensei::InTransitDataAdaptor based on a SENSEI XML...
void SetData(T *data, size_t numTuples, int numComps, svtkAllocator alloc, svtkStream stream, svtkStreamMode streamMode, int owner)
zero-copy the passed data.
Definition: svtkHAMRDataArrayImpl.h:216
void SetNumberOfTuples(svtkIdType numTuples) override
sets the current size and may change the capacity of the array
Definition: svtkHAMRDataArrayImpl.h:474
An accelerator aware container for array based data.
Definition: svtkHAMRDataArray.h:62
svtkTypeBool Resize(svtkIdType numTuples) override
resize the container using the current allocator
Definition: svtkHAMRDataArrayImpl.h:440
T * GetData()
fast access to the internally managed memory.
Definition: svtkHAMRDataArray.h:253
svtkAOSDataArrayTemplate< T > * AsSvtkAOSDataArray(int zeroCopy)
Convert to an svtkAOSDataArrayTemplate instance.
Definition: svtkHAMRDataArrayImpl.h:297
static svtkHAMRDataArray * New()
construct a new instance that is uninitiazed.
Definition: svtkHAMRDataArrayImpl.h:39