Make number of buffers in an ArrayHandle runtime selectable

This has no real change in the operation, but it will simplify code as
we convert `ArrayHandle`s to the new type. We will be able to write
simple runtime code rather than complex metaprogramming to determine the
number of buffers to use.
This commit is contained in:
Kenneth Moreland 2020-08-11 13:25:06 -06:00
parent 6db51d8f0d
commit 72475177d8
2 changed files with 14 additions and 11 deletions

@ -904,9 +904,6 @@ public:
using ReadPortalType = typename StorageType::ReadPortalType;
using WritePortalType = typename StorageType::WritePortalType;
static constexpr vtkm::IdComponent NUMBER_OF_BUFFERS = StorageType::NUMBER_OF_BUFFERS;
static constexpr vtkm::IdComponent GetNumberOfBuffers() { return NUMBER_OF_BUFFERS; }
// TODO: Deprecate this
template <typename Device>
struct ExecutionTypes
@ -961,7 +958,7 @@ public:
: Internals(std::make_shared<InternalsStruct>(buffers.data(), storage))
{
VTKM_ASSERT(static_cast<vtkm::IdComponent>(this->Internals->Buffers.size()) ==
GetNumberOfBuffers());
this->GetNumberOfBuffers());
}
VTKM_CONT ArrayHandleNewStyle(const vtkm::cont::internal::Buffer* buffers,
@ -1027,6 +1024,11 @@ public:
return true; // different valuetype and/or storage
}
VTKM_CONT vtkm::IdComponent GetNumberOfBuffers() const
{
return this->Internals->Storage.GetNumberOfBuffers();
}
/// Get the storage.
///
VTKM_CONT const StorageType& GetStorage() const { return this->Internals->Storage; }
@ -1313,17 +1315,18 @@ private:
mutable std::vector<vtkm::cont::internal::Buffer> Buffers;
mutable StorageType Storage;
VTKM_CONT InternalsStruct()
: Buffers(GetNumberOfBuffers())
VTKM_CONT InternalsStruct(StorageType storage = StorageType())
: Buffers(static_cast<std::size_t>(storage.GetNumberOfBuffers()))
, Storage(storage)
{
}
VTKM_CONT InternalsStruct(const vtkm::cont::internal::Buffer* buffers,
const StorageType& storage)
: Buffers(GetNumberOfBuffers())
: Buffers(static_cast<std::size_t>(storage.GetNumberOfBuffers()))
, Storage(storage)
{
std::copy(buffers, buffers + GetNumberOfBuffers(), this->Buffers.begin());
std::copy(buffers, buffers + storage.GetNumberOfBuffers(), this->Buffers.begin());
}
};
std::shared_ptr<InternalsStruct> Internals;

@ -39,11 +39,11 @@ template <typename T>
class VTKM_ALWAYS_EXPORT Storage<T, vtkm::cont::StorageTagBasic>
{
public:
static constexpr vtkm::IdComponent NUMBER_OF_BUFFERS = 1;
using ReadPortalType = vtkm::internal::ArrayPortalBasicRead<T>;
using WritePortalType = vtkm::internal::ArrayPortalBasicWrite<T>;
VTKM_CONT vtkm::IdComponent GetNumberOfBuffers() const { return 1; }
VTKM_CONT void ResizeBuffers(vtkm::Id numValues,
vtkm::cont::internal::Buffer* buffers,
vtkm::CopyFlag preserve,
@ -65,7 +65,7 @@ public:
this->GetNumberOfValues(buffers));
}
VTKM_CONT WritePortalType CreateWritePortal(const vtkm::cont::internal::Buffer* buffers,
VTKM_CONT WritePortalType CreateWritePortal(vtkm::cont::internal::Buffer* buffers,
vtkm::cont::DeviceAdapterId device,
vtkm::cont::Token& token)
{