Handle read-only portals in ArrayHandleMultiplexer
The ArrayPortalMultiplexer always called Set on the delegate portals. However, sometimes the portals were not supported. Instead, only call when the delegate is supported. Probably the "right" thing to do would be to check all posible portals for support, but that sounds like it would slow down the compile.
This commit is contained in:
parent
ed2f4aabf7
commit
f8a09d6de5
@ -10,6 +10,7 @@
|
||||
#ifndef vtk_m_cont_ArrayHandleMultiplexer_h
|
||||
#define vtk_m_cont_ArrayHandleMultiplexer_h
|
||||
|
||||
#include <vtkm/Assert.h>
|
||||
#include <vtkm/TypeTraits.h>
|
||||
|
||||
#include <vtkm/internal/Variant.h>
|
||||
@ -50,14 +51,36 @@ struct ArrayPortalMultiplexerGetFunctor
|
||||
|
||||
struct ArrayPortalMultiplexerSetFunctor
|
||||
{
|
||||
VTKM_SUPPRESS_EXEC_WARNINGS
|
||||
template <typename PortalType>
|
||||
VTKM_EXEC_CONT void operator()(const PortalType& portal,
|
||||
vtkm::Id index,
|
||||
const typename PortalType::ValueType& value) const noexcept
|
||||
{
|
||||
this->DoSet(
|
||||
portal, index, value, typename vtkm::internal::PortalSupportsSets<PortalType>::type{});
|
||||
}
|
||||
|
||||
private:
|
||||
VTKM_SUPPRESS_EXEC_WARNINGS
|
||||
template <typename PortalType>
|
||||
VTKM_EXEC_CONT void DoSet(const PortalType& portal,
|
||||
vtkm::Id index,
|
||||
const typename PortalType::ValueType& value,
|
||||
std::true_type) const noexcept
|
||||
{
|
||||
portal.Set(index, value);
|
||||
}
|
||||
|
||||
VTKM_SUPPRESS_EXEC_WARNINGS
|
||||
template <typename PortalType>
|
||||
VTKM_EXEC_CONT void DoSet(const PortalType&,
|
||||
vtkm::Id,
|
||||
const typename PortalType::ValueType&,
|
||||
std::false_type) const noexcept
|
||||
{
|
||||
// This is an error but whatever.
|
||||
VTKM_ASSERT(false && "Calling Set on a portal that does not support it.");
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace detail
|
||||
|
Loading…
Reference in New Issue
Block a user