//============================================================================ // 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 2017 National Technology & Engineering Solutions of Sandia, LLC (NTESS). // Copyright 2017 UT-Battelle, LLC. // Copyright 2017 Los Alamos National Security. // // Under the terms of Contract DE-NA0003525 with NTESS, // 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_cont_internal_ArrayExportMacros_h #define vtk_m_cont_internal_ArrayExportMacros_h /// Declare extern template instantiations for all ArrayHandle transfer /// infrastructure from a header file. #define VTKM_EXPORT_ARRAYHANDLE_FOR_VALUE_TYPE_AND_DEVICE_ADAPTER(Type, Device) \ namespace internal \ { \ extern template struct VTKM_CONT_TEMPLATE_EXPORT ExecutionPortalFactoryBasic; \ } \ extern template VTKM_CONT_TEMPLATE_EXPORT ArrayHandle::ExecutionTypes< \ Device>::PortalConst ArrayHandle::PrepareForInput(Device) const; \ extern template VTKM_CONT_TEMPLATE_EXPORT ArrayHandle::ExecutionTypes< \ Device>::Portal ArrayHandle::PrepareForOutput(vtkm::Id, Device); \ extern template VTKM_CONT_TEMPLATE_EXPORT ArrayHandle::ExecutionTypes< \ Device>::Portal ArrayHandle::PrepareForInPlace(Device); \ extern template VTKM_CONT_TEMPLATE_EXPORT void \ ArrayHandle::PrepareForDevice(Device) const; #define VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(BasicType, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_VALUE_TYPE_AND_DEVICE_ADAPTER(BasicType, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_VALUE_TYPE_AND_DEVICE_ADAPTER( \ VTKM_PASS_COMMAS(vtkm::Vec), Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_VALUE_TYPE_AND_DEVICE_ADAPTER( \ VTKM_PASS_COMMAS(vtkm::Vec), Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_VALUE_TYPE_AND_DEVICE_ADAPTER( \ VTKM_PASS_COMMAS(vtkm::Vec), Device) /// call VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER for all vtkm types. #define VTKM_EXPORT_ARRAYHANDLES_FOR_DEVICE_ADAPTER(Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(char, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Int8, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::UInt8, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Int16, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::UInt16, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Int32, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::UInt32, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Int64, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::UInt64, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Float32, Device) \ VTKM_EXPORT_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Float64, Device) /// Instantiate templates for all ArrayHandle transfer infrastructure from an /// implementation file. #define VTKM_INSTANTIATE_ARRAYHANDLE_FOR_VALUE_TYPE_AND_DEVICE_ADAPTER(Type, Device) \ namespace internal \ { \ template struct VTKM_CONT_EXPORT ExecutionPortalFactoryBasic; \ } \ template VTKM_CONT_EXPORT ArrayHandle::ExecutionTypes< \ Device>::PortalConst ArrayHandle::PrepareForInput(Device) const; \ template VTKM_CONT_EXPORT ArrayHandle::ExecutionTypes::Portal \ ArrayHandle::PrepareForOutput(vtkm::Id, Device); \ template VTKM_CONT_EXPORT ArrayHandle::ExecutionTypes::Portal \ ArrayHandle::PrepareForInPlace(Device); \ template VTKM_CONT_EXPORT void ArrayHandle::PrepareForDevice(Device) const; #define VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(BasicType, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_VALUE_TYPE_AND_DEVICE_ADAPTER(BasicType, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_VALUE_TYPE_AND_DEVICE_ADAPTER( \ VTKM_PASS_COMMAS(vtkm::Vec), Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_VALUE_TYPE_AND_DEVICE_ADAPTER( \ VTKM_PASS_COMMAS(vtkm::Vec), Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_VALUE_TYPE_AND_DEVICE_ADAPTER( \ VTKM_PASS_COMMAS(vtkm::Vec), Device) #define VTKM_INSTANTIATE_ARRAYHANDLES_FOR_DEVICE_ADAPTER(Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(char, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Int8, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::UInt8, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Int16, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::UInt16, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Int32, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::UInt32, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Int64, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::UInt64, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Float32, Device) \ VTKM_INSTANTIATE_ARRAYHANDLE_FOR_DEVICE_ADAPTER(vtkm::Float64, Device) #include #endif // vtk_m_cont_internal_ArrayExportMacros_h