From 78c7909c8430ab8b880822dfd309bf6886b034bd Mon Sep 17 00:00:00 2001 From: Kenneth Moreland Date: Thu, 27 Aug 2020 17:09:55 -0600 Subject: [PATCH] Enable automatic transformation of Unknown/UncertainArrayHandle --- vtkm/cont/UncertainArrayHandle.h | 14 +++++++++++- vtkm/cont/UnknownArrayHandle.h | 12 ++++++++++ .../testing/UnitTestWorkletMapField.cxx | 22 ++++++++++--------- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/vtkm/cont/UncertainArrayHandle.h b/vtkm/cont/UncertainArrayHandle.h index 05739b4ca..f2da66b5c 100644 --- a/vtkm/cont/UncertainArrayHandle.h +++ b/vtkm/cont/UncertainArrayHandle.h @@ -116,8 +116,20 @@ VTKM_CONT vtkm::cont::UncertainArrayHandle { return vtkm::cont::UncertainArrayHandle(*this); } + +namespace internal +{ + +template +struct DynamicTransformTraits> +{ + using DynamicTag = vtkm::cont::internal::DynamicTransformTagCastAndCall; +}; + +} // namespace internal + } -} +} // namespace vtkm::cont //============================================================================= // Specializations of serialization related classes diff --git a/vtkm/cont/UnknownArrayHandle.h b/vtkm/cont/UnknownArrayHandle.h index 9a3d0119f..23066b49c 100644 --- a/vtkm/cont/UnknownArrayHandle.h +++ b/vtkm/cont/UnknownArrayHandle.h @@ -604,6 +604,18 @@ void CastAndCall(const UnknownArrayHandle& handle, Functor&& f, Args&&... args) handle.CastAndCallForTypes( std::forward(f), std::forward(args)...); } + +namespace internal +{ + +template <> +struct DynamicTransformTraits +{ + using DynamicTag = vtkm::cont::internal::DynamicTransformTagCastAndCall; +}; + +} // namespace internal + } } // namespace vtkm::cont diff --git a/vtkm/worklet/testing/UnitTestWorkletMapField.cxx b/vtkm/worklet/testing/UnitTestWorkletMapField.cxx index 9f07cd5f3..d50c58bc2 100644 --- a/vtkm/worklet/testing/UnitTestWorkletMapField.cxx +++ b/vtkm/worklet/testing/UnitTestWorkletMapField.cxx @@ -10,7 +10,8 @@ #include #include -#include +#include +#include #include #include @@ -122,25 +123,26 @@ struct DoVariantTestWorklet vtkm::cont::ArrayHandle inoutHandle; - std::cout << "Create and run dispatcher with variant arrays." << std::endl; + std::cout << "Create and run dispatcher with unknown arrays." << std::endl; vtkm::worklet::DispatcherMapField dispatcher; - vtkm::cont::VariantArrayHandle inputVariant(inputHandle); + vtkm::cont::UnknownArrayHandle inputVariant(inputHandle); { //Verify we can pass by value vtkm::cont::ArrayCopy(inputHandle, inoutHandle); - vtkm::cont::VariantArrayHandle outputVariant(outputHandle); - vtkm::cont::VariantArrayHandle inoutVariant(inoutHandle); - dispatcher.Invoke(inputVariant.ResetTypes(vtkm::List{}), - outputVariant.ResetTypes(vtkm::List{}), - inoutVariant.ResetTypes(vtkm::List{})); + vtkm::cont::UnknownArrayHandle outputVariant(outputHandle); + vtkm::cont::UnknownArrayHandle inoutVariant(inoutHandle); + dispatcher.Invoke( + inputVariant.ResetTypes, vtkm::List>(), + outputVariant.ResetTypes, vtkm::List>(), + inoutVariant.ResetTypes, vtkm::List>()); CheckPortal(outputHandle.ReadPortal()); CheckPortal(inoutHandle.ReadPortal()); } { //Verify we can pass by pointer - vtkm::cont::VariantArrayHandle outputVariant(outputHandle); - vtkm::cont::VariantArrayHandle inoutVariant(inoutHandle); + vtkm::cont::UnknownArrayHandle outputVariant(outputHandle); + vtkm::cont::UnknownArrayHandle inoutVariant(inoutHandle); vtkm::cont::ArrayCopy(inputHandle, inoutHandle); dispatcher.Invoke(&inputVariant, outputHandle, inoutHandle);