1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include "vtkDataArray.h"
#include "vtkArrayDispatch.h"
namespace
{
//-----------------GetTuples (tuple range)--------------------------------------
struct GetTuplesRangeWorker
{
vtkIdType Start;
vtkIdType End; // Note that End is inclusive.
GetTuplesRangeWorker(vtkIdType start, vtkIdType end)
: Start(start)
, End(end)
{
}
template <typename Array1T, typename Array2T>
void operator()(Array1T* src, Array2T* dst) const
{
const auto srcTuples = vtk::DataArrayTupleRange(src);
auto dstTuples = vtk::DataArrayTupleRange(dst);
for (vtkIdType srcT = this->Start, dstT = 0; srcT <= this->End; ++srcT, ++dstT)
{
dstTuples[dstT] = srcTuples[srcT];
}
}
};
} // end anon namespace
VTK_ABI_NAMESPACE_BEGIN
//------------------------------------------------------------------------------
void vtkDataArray::GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray* aa)
{
vtkDataArray* da = vtkDataArray::FastDownCast(aa);
if (!da)
{
vtkWarningMacro("Input is not a vtkDataArray.");
return;
}
if ((da->GetNumberOfComponents() != this->GetNumberOfComponents()))
{
vtkErrorMacro("Number of components for input and output do not match.\n"
"Source: "
<< this->GetNumberOfComponents()
<< "\n"
"Destination: "
<< da->GetNumberOfComponents());
return;
}
GetTuplesRangeWorker worker(p1, p2);
if (!vtkArrayDispatch::Dispatch2::Execute(this, da, worker))
{
// Use fallback if dispatch fails.
worker(this, da);
}
}
VTK_ABI_NAMESPACE_END
|