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:
parent
6db51d8f0d
commit
72475177d8
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user