10 #ifndef vtk_m_cont_Invoker_h
11 #define vtk_m_cont_Invoker_h
26 using scatter_or_mask = std::integral_constant<bool,
27 vtkm::worklet::internal::is_mask<T>::value ||
28 vtkm::worklet::internal::is_scatter<T>::value>;
64 template <
typename Worklet,
67 typename std::enable_if<detail::scatter_or_mask<T>::value,
int>::type* =
nullptr>
68 inline void operator()(Worklet&& worklet, T&& scatterOrMask, Args&&... args)
const
70 using WorkletType = vtkm::internal::remove_cvref<Worklet>;
71 using DispatcherType =
typename WorkletType::template Dispatcher<WorkletType>;
73 DispatcherType dispatcher(worklet, scatterOrMask);
74 dispatcher.SetDevice(this->
DeviceId);
75 dispatcher.Invoke(std::forward<Args>(args)...);
88 typename std::enable_if<detail::scatter_or_mask<T>::value && detail::scatter_or_mask<U>::value,
89 int>::type* =
nullptr>
95 using WorkletType = vtkm::internal::remove_cvref<Worklet>;
96 using DispatcherType =
typename WorkletType::template Dispatcher<WorkletType>;
98 DispatcherType dispatcher(worklet, scatterOrMaskA, scatterOrMaskB);
99 dispatcher.SetDevice(this->
DeviceId);
100 dispatcher.Invoke(std::forward<Args>(args)...);
107 template <
typename Worklet,
110 typename std::enable_if<!detail::scatter_or_mask<T>::value,
int>::type* =
nullptr>
111 inline void operator()(Worklet&& worklet, T&& t, Args&&... args)
const
113 using WorkletType = vtkm::internal::remove_cvref<Worklet>;
114 using DispatcherType =
typename WorkletType::template Dispatcher<WorkletType>;
116 DispatcherType dispatcher(worklet);
117 dispatcher.SetDevice(this->
DeviceId);
118 dispatcher.Invoke(std::forward<T>(t), std::forward<Args>(args)...);