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:
commit
40f26ff4cd
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user