//============================================================================ // Copyright (c) Kitware, Inc. // All rights reserved. // See LICENSE.txt for details. // This software is distributed WITHOUT ANY WARRANTY; without even // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // PURPOSE. See the above copyright notice for more information. // // Copyright 2014 Sandia Corporation. // Copyright 2014 UT-Battelle, LLC. // Copyright 2014 Los Alamos National Security. // // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, // the U.S. Government retains certain rights in this software. // // Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National // Laboratory (LANL), the U.S. Government retains certain rights in // this software. //============================================================================ #ifndef vtk_m_worklet_Dispatcher_MapField_h #define vtk_m_worklet_Dispatcher_MapField_h #include #include #include namespace vtkm { namespace worklet { /// \brief Dispatcher for worklets that inherit from \c WorkletMapField. /// template class DispatcherMapField : public vtkm::worklet::internal::DispatcherBase< DispatcherMapField, WorkletType, vtkm::worklet::WorkletMapField> { typedef vtkm::worklet::internal::DispatcherBase< DispatcherMapField, WorkletType, vtkm::worklet::WorkletMapField> Superclass; public: VTKM_CONT_EXPORT DispatcherMapField(const WorkletType &worklet = WorkletType()) : Superclass(worklet) { } template VTKM_CONT_EXPORT void DoInvoke(const Invocation &invocation) const { // This is the type for the input domain typedef typename Invocation::InputDomainType InputDomainType; // We can pull the input domain parameter (the data specifying the input // domain) from the invocation object. InputDomainType inputDomain = invocation.GetInputDomain(); // For a DispatcherMapField, the inputDomain must be an ArrayHandle (or // a DynamicArrayHandle that gets cast to one). The size of the domain // (number of threads/worklet instances) is equal to the size of the // array. vtkm::Id numInstances = inputDomain.GetNumberOfValues(); // A MapField is a pretty straightforward dispatch. Once we know the number // of invocations, the superclass can take care of the rest. this->BasicInvoke(invocation, numInstances, Device()); } }; } } // namespace vtkm::worklet #endif //vtk_m_worklet_Dispatcher_MapField_h