Merge topic 'array-copy-const-ref'

e74093470 Allow ArrayCopy into const ref of UnknownArrayHandle

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Li-Ta Lo <ollie@lanl.gov>
Merge-request: !2568
This commit is contained in:
Kenneth Moreland 2021-09-02 15:19:47 +00:00 committed by Kitware Robot
commit 40f26ff4cd
2 changed files with 30 additions and 9 deletions

@ -77,7 +77,7 @@ struct UnknownCopyFunctor1
{
template <typename InType>
void operator()(const vtkm::cont::ArrayHandleRecombineVec<InType>& in,
vtkm::cont::UnknownArrayHandle& out) const
const vtkm::cont::UnknownArrayHandle& out) const
{
out.Allocate(in.GetNumberOfValues());
@ -86,7 +86,7 @@ struct UnknownCopyFunctor1
template <typename InType>
void DoIt(const vtkm::cont::ArrayHandleRecombineVec<InType>& in,
vtkm::cont::UnknownArrayHandle& out,
const vtkm::cont::UnknownArrayHandle& out,
std::false_type) const
{
// Source is not float.
@ -112,7 +112,7 @@ struct UnknownCopyFunctor1
template <typename InType>
void DoIt(const vtkm::cont::ArrayHandleRecombineVec<InType>& in,
vtkm::cont::UnknownArrayHandle& out,
const vtkm::cont::UnknownArrayHandle& out,
std::true_type) const
{
// Source array is FloatDefault. That should be copiable to anything.
@ -120,6 +120,19 @@ struct UnknownCopyFunctor1
}
};
void DoUnknownArrayCopy(const vtkm::cont::UnknownArrayHandle& source,
const vtkm::cont::UnknownArrayHandle& destination)
{
if (source.GetNumberOfValues() > 0)
{
source.CastAndCallWithExtractedArray(UnknownCopyFunctor1{}, destination);
}
else
{
destination.ReleaseResources();
}
}
} // anonymous namespace
namespace vtkm
@ -135,14 +148,19 @@ void ArrayCopy(const vtkm::cont::UnknownArrayHandle& source,
destination = source.NewInstanceBasic();
}
if (source.GetNumberOfValues() > 0)
DoUnknownArrayCopy(source, destination);
}
void ArrayCopy(const vtkm::cont::UnknownArrayHandle& source,
const vtkm::cont::UnknownArrayHandle& destination)
{
if (!destination.IsValid())
{
source.CastAndCallWithExtractedArray(UnknownCopyFunctor1{}, destination);
}
else
{
destination.ReleaseResources();
throw vtkm::cont::ErrorBadValue(
"Attempty to copy to a constant UnknownArrayHandle with no valid array.");
}
DoUnknownArrayCopy(source, destination);
}
}

@ -144,6 +144,9 @@ VTKM_CONT void ArrayCopy(const vtkm::cont::ArrayHandle<InValueType, InStorage>&
VTKM_CONT_EXPORT void ArrayCopy(const vtkm::cont::UnknownArrayHandle& source,
vtkm::cont::UnknownArrayHandle& destination);
VTKM_CONT_EXPORT void ArrayCopy(const vtkm::cont::UnknownArrayHandle& source,
const vtkm::cont::UnknownArrayHandle& destination);
template <typename T, typename S>
VTKM_CONT void ArrayCopy(const vtkm::cont::UnknownArrayHandle& source,
vtkm::cont::ArrayHandle<T, S>& destination)