Make VTKM_ARRAY_HANDLE_NEW_STYLE macro
While in the transition between two types of `ArrayHandle` implementations, we need to declare when an `ArrayHandle` is implemented with the new style. To consolidate, create a `VTKM_ARRAY_HANDLE_NEW_STYLE` to override the default `ArrayHandle` implementation with the `ArrayHandleNewStyle` implementation.
This commit is contained in:
parent
83f792b64c
commit
b526c4c914
@ -895,6 +895,86 @@ VTKM_CONT_EXPORT VTKM_CONT vtkm::cont::DeviceAdapterId ArrayHandleGetDeviceAdapt
|
||||
|
||||
} // namespace detail
|
||||
|
||||
// This macro is used to declare an ArrayHandle that uses the new style of Storage
|
||||
// that leverages Buffer objects. This macro will go away once ArrayHandle
|
||||
// is replaced with ArrayHandleNewStyle. To use this macro, first have a declaration
|
||||
// of the template and then put the macro like this:
|
||||
//
|
||||
// template <typename T>
|
||||
// VTKM_ARRAY_HANDLE_NEW_STYLE(T, vtkm::cont::StorageTagFoo);
|
||||
//
|
||||
// Don't forget to use VTKM_PASS_COMMAS if one of the macro arguments contains
|
||||
// a template with multiple parameters.
|
||||
#define VTKM_ARRAY_HANDLE_NEW_STYLE(ValueType_, StorageType_) \
|
||||
class VTKM_ALWAYS_EXPORT ArrayHandle<ValueType_, StorageType_> \
|
||||
: public ArrayHandleNewStyle<ValueType_, StorageType_> \
|
||||
{ \
|
||||
using Superclass = ArrayHandleNewStyle<ValueType_, StorageType_>; \
|
||||
\
|
||||
public: \
|
||||
VTKM_CONT \
|
||||
ArrayHandle() \
|
||||
: Superclass() \
|
||||
{ \
|
||||
} \
|
||||
\
|
||||
VTKM_CONT \
|
||||
ArrayHandle(const ArrayHandle<ValueType_, StorageType_>& src) \
|
||||
: Superclass(src) \
|
||||
{ \
|
||||
} \
|
||||
\
|
||||
VTKM_CONT \
|
||||
ArrayHandle(ArrayHandle<ValueType_, StorageType_>&& src) noexcept \
|
||||
: Superclass(std::move(src)) \
|
||||
{ \
|
||||
} \
|
||||
\
|
||||
VTKM_CONT \
|
||||
ArrayHandle(const ArrayHandleNewStyle<ValueType_, StorageType_>& src) \
|
||||
: Superclass(src) \
|
||||
{ \
|
||||
} \
|
||||
\
|
||||
VTKM_CONT \
|
||||
ArrayHandle(ArrayHandleNewStyle<ValueType_, StorageType_>&& src) noexcept \
|
||||
: Superclass(std::move(src)) \
|
||||
{ \
|
||||
} \
|
||||
\
|
||||
VTKM_CONT ArrayHandle( \
|
||||
const vtkm::cont::internal::Buffer* buffers, \
|
||||
const typename Superclass::StorageType& storage = typename Superclass::StorageType()) \
|
||||
: Superclass(buffers, storage) \
|
||||
{ \
|
||||
} \
|
||||
\
|
||||
VTKM_CONT ArrayHandle( \
|
||||
const std::vector<vtkm::cont::internal::Buffer>& buffers, \
|
||||
const typename Superclass::StorageType& storage = typename Superclass::StorageType()) \
|
||||
: Superclass(buffers, storage) \
|
||||
{ \
|
||||
} \
|
||||
\
|
||||
VTKM_CONT \
|
||||
ArrayHandle<ValueType_, StorageType_>& operator=( \
|
||||
const ArrayHandle<ValueType_, StorageType_>& src) \
|
||||
{ \
|
||||
this->Superclass::operator=(src); \
|
||||
return *this; \
|
||||
} \
|
||||
\
|
||||
VTKM_CONT \
|
||||
ArrayHandle<ValueType_, StorageType_>& operator=( \
|
||||
ArrayHandle<ValueType_, StorageType_>&& src) noexcept \
|
||||
{ \
|
||||
this->Superclass::operator=(std::move(src)); \
|
||||
return *this; \
|
||||
} \
|
||||
\
|
||||
VTKM_CONT ~ArrayHandle() {} \
|
||||
}
|
||||
|
||||
/// This new style of ArrayHandle will eventually replace the classic ArrayHandle
|
||||
template <typename T, typename StorageTag_ = VTKM_DEFAULT_STORAGE_TAG>
|
||||
class VTKM_ALWAYS_EXPORT ArrayHandleNewStyle : public internal::ArrayHandleBase
|
||||
|
@ -69,76 +69,8 @@ public:
|
||||
|
||||
} // namespace internal
|
||||
|
||||
// This can go away once ArrayHandle is replaced with ArrayHandleNewStyle
|
||||
template <typename T>
|
||||
class VTKM_ALWAYS_EXPORT ArrayHandle<T, vtkm::cont::StorageTagBasic>
|
||||
: public ArrayHandleNewStyle<T, vtkm::cont::StorageTagBasic>
|
||||
{
|
||||
using Superclass = ArrayHandleNewStyle<T, vtkm::cont::StorageTagBasic>;
|
||||
|
||||
public:
|
||||
VTKM_CONT
|
||||
ArrayHandle()
|
||||
: Superclass()
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(const ArrayHandle<T, vtkm::cont::StorageTagBasic>& src)
|
||||
: Superclass(src)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(ArrayHandle<T, vtkm::cont::StorageTagBasic>&& src) noexcept
|
||||
: Superclass(std::move(src))
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(const ArrayHandleNewStyle<T, vtkm::cont::StorageTagBasic>& src)
|
||||
: Superclass(src)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(ArrayHandleNewStyle<T, vtkm::cont::StorageTagBasic>&& src) noexcept
|
||||
: Superclass(std::move(src))
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT ArrayHandle(
|
||||
const vtkm::cont::internal::Buffer* buffers,
|
||||
const typename Superclass::StorageType& storage = typename Superclass::StorageType())
|
||||
: Superclass(buffers, storage)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT ArrayHandle(
|
||||
const std::vector<vtkm::cont::internal::Buffer>& buffers,
|
||||
const typename Superclass::StorageType& storage = typename Superclass::StorageType())
|
||||
: Superclass(buffers, storage)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle<T, vtkm::cont::StorageTagBasic>& operator=(
|
||||
const ArrayHandle<T, vtkm::cont::StorageTagBasic>& src)
|
||||
{
|
||||
this->Superclass::operator=(src);
|
||||
return *this;
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle<T, vtkm::cont::StorageTagBasic>& operator=(
|
||||
ArrayHandle<T, vtkm::cont::StorageTagBasic>&& src) noexcept
|
||||
{
|
||||
this->Superclass::operator=(std::move(src));
|
||||
return *this;
|
||||
}
|
||||
|
||||
VTKM_CONT ~ArrayHandle() {}
|
||||
};
|
||||
VTKM_ARRAY_HANDLE_NEW_STYLE(T, vtkm::cont::StorageTagBasic);
|
||||
|
||||
template <typename T>
|
||||
class VTKM_ALWAYS_EXPORT ArrayHandleBasic : public ArrayHandle<T, vtkm::cont::StorageTagBasic>
|
||||
|
@ -137,76 +137,8 @@ public:
|
||||
} // end namespace internal
|
||||
|
||||
|
||||
// This can go away once ArrayHandle is replaced with ArrayHandleNewStyle
|
||||
template <typename T>
|
||||
class VTKM_ALWAYS_EXPORT ArrayHandle<T, vtkm::cont::internal::StorageTagBitField>
|
||||
: public ArrayHandleNewStyle<T, vtkm::cont::internal::StorageTagBitField>
|
||||
{
|
||||
using Superclass = ArrayHandleNewStyle<T, vtkm::cont::internal::StorageTagBitField>;
|
||||
|
||||
public:
|
||||
VTKM_CONT
|
||||
ArrayHandle()
|
||||
: Superclass()
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(const ArrayHandle<T, vtkm::cont::internal::StorageTagBitField>& src)
|
||||
: Superclass(src)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(ArrayHandle<T, vtkm::cont::internal::StorageTagBitField>&& src) noexcept
|
||||
: Superclass(std::move(src))
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(const ArrayHandleNewStyle<T, vtkm::cont::internal::StorageTagBitField>& src)
|
||||
: Superclass(src)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(ArrayHandleNewStyle<T, vtkm::cont::internal::StorageTagBitField>&& src) noexcept
|
||||
: Superclass(std::move(src))
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT ArrayHandle(
|
||||
const vtkm::cont::internal::Buffer* buffers,
|
||||
const typename Superclass::StorageType& storage = typename Superclass::StorageType())
|
||||
: Superclass(buffers, storage)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT ArrayHandle(
|
||||
const std::vector<vtkm::cont::internal::Buffer>& buffers,
|
||||
const typename Superclass::StorageType& storage = typename Superclass::StorageType())
|
||||
: Superclass(buffers, storage)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle<T, vtkm::cont::internal::StorageTagBitField>& operator=(
|
||||
const ArrayHandle<T, vtkm::cont::internal::StorageTagBitField>& src)
|
||||
{
|
||||
this->Superclass::operator=(src);
|
||||
return *this;
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle<T, vtkm::cont::internal::StorageTagBitField>& operator=(
|
||||
ArrayHandle<T, vtkm::cont::internal::StorageTagBitField>&& src) noexcept
|
||||
{
|
||||
this->Superclass::operator=(std::move(src));
|
||||
return *this;
|
||||
}
|
||||
|
||||
VTKM_CONT ~ArrayHandle() {}
|
||||
};
|
||||
VTKM_ARRAY_HANDLE_NEW_STYLE(T, vtkm::cont::internal::StorageTagBitField);
|
||||
|
||||
/// The ArrayHandleBitField class is a boolean-valued ArrayHandle that is backed
|
||||
/// by a BitField.
|
||||
|
@ -203,76 +203,8 @@ public:
|
||||
|
||||
} // namespace internal
|
||||
|
||||
// This can go away once ArrayHandle is replaced with ArrayHandleNewStyle
|
||||
template <typename T>
|
||||
class VTKM_ALWAYS_EXPORT ArrayHandle<T, vtkm::cont::StorageTagSOA>
|
||||
: public ArrayHandleNewStyle<T, vtkm::cont::StorageTagSOA>
|
||||
{
|
||||
using Superclass = ArrayHandleNewStyle<T, vtkm::cont::StorageTagSOA>;
|
||||
|
||||
public:
|
||||
VTKM_CONT
|
||||
ArrayHandle()
|
||||
: Superclass()
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(const ArrayHandle<T, vtkm::cont::StorageTagSOA>& src)
|
||||
: Superclass(src)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(ArrayHandle<T, vtkm::cont::StorageTagSOA>&& src) noexcept
|
||||
: Superclass(std::move(src))
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(const ArrayHandleNewStyle<T, vtkm::cont::StorageTagSOA>& src)
|
||||
: Superclass(src)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle(ArrayHandleNewStyle<T, vtkm::cont::StorageTagSOA>&& src) noexcept
|
||||
: Superclass(std::move(src))
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT ArrayHandle(
|
||||
const vtkm::cont::internal::Buffer* buffers,
|
||||
const typename Superclass::StorageType& storage = typename Superclass::StorageType())
|
||||
: Superclass(buffers, storage)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT ArrayHandle(
|
||||
const std::vector<vtkm::cont::internal::Buffer>& buffers,
|
||||
const typename Superclass::StorageType& storage = typename Superclass::StorageType())
|
||||
: Superclass(buffers, storage)
|
||||
{
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle<T, vtkm::cont::StorageTagSOA>& operator=(
|
||||
const ArrayHandle<T, vtkm::cont::StorageTagSOA>& src)
|
||||
{
|
||||
this->Superclass::operator=(src);
|
||||
return *this;
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
ArrayHandle<T, vtkm::cont::StorageTagSOA>& operator=(
|
||||
ArrayHandle<T, vtkm::cont::StorageTagSOA>&& src) noexcept
|
||||
{
|
||||
this->Superclass::operator=(std::move(src));
|
||||
return *this;
|
||||
}
|
||||
|
||||
VTKM_CONT ~ArrayHandle() {}
|
||||
};
|
||||
VTKM_ARRAY_HANDLE_NEW_STYLE(T, vtkm::cont::StorageTagSOA);
|
||||
|
||||
/// \brief An `ArrayHandle` that for Vecs stores each component in a separate physical array.
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user