1968590232
`ArrayTransfer` is used with the old `ArrayHandle` style to move data between host and device. The new version of `ArrayHandle` does not use `ArrayTransfer` at all because this functionality is wrapped in `Buffer` (where it can exist in a precompiled library). Once all the old `ArrayHandle` classes are gone, this class will be removed completely. Although all the remaining `ArrayHandle` classes provide their own versions of `ArrayTransfer`, they still need the prototype to be defined to specialize. Thus, the guts of the default `ArrayTransfer` are removed and replaced with a compile error if you try to compile it.
52 lines
1.9 KiB
C++
52 lines
1.9 KiB
C++
//============================================================================
|
|
// 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.
|
|
//============================================================================
|
|
#ifndef vtk_m_cont_internal_ArrayTransfer_h
|
|
#define vtk_m_cont_internal_ArrayTransfer_h
|
|
|
|
#include <vtkm/cont/Storage.h>
|
|
#include <vtkm/cont/Token.h>
|
|
#include <vtkm/cont/internal/ArrayManagerExecution.h>
|
|
|
|
namespace vtkm
|
|
{
|
|
namespace cont
|
|
{
|
|
namespace internal
|
|
{
|
|
|
|
/// \brief Class that manages the transfer of data between control and execution.
|
|
///
|
|
/// This templated class provides a mechanism (used by the ArrayHandle) to
|
|
/// transfer data from the control environment to the execution environment and
|
|
/// back. The interface for ArrayTransfer is nearly identical to that of
|
|
/// ArrayManagerExecution and the default implementation simply delegates all
|
|
/// calls to that class.
|
|
///
|
|
/// The primary motivation for having a separate class is that the
|
|
/// ArrayManagerExecution is meant to be specialized for each device adapter
|
|
/// whereas the ArrayTransfer is meant to be specialized for each storage type
|
|
/// (or specific combination of storage and device adapter). Thus, transfers
|
|
/// for most storage tyeps will be delegated through the ArrayManagerExecution,
|
|
/// but some storage types, like implicit storage, will be specialized to
|
|
/// transfer through a different path.
|
|
///
|
|
template <typename T, class StorageTag, class DeviceAdapterTag>
|
|
class ArrayTransfer
|
|
{
|
|
VTKM_STATIC_ASSERT_MSG(sizeof(T) == static_cast<std::size_t>(-1),
|
|
"Default implementation of ArrayTransfer no longer available.");
|
|
};
|
|
|
|
}
|
|
}
|
|
} // namespace vtkm::cont::internal
|
|
|
|
#endif //vtk_m_cont_internal_ArrayTransfer_h
|