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
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
#include "vtkDataArray.h"
#include "vtkArrayDispatch.h"
namespace
{
// Wrap the DoCompute[Scalar|Vector]Range calls for vtkArrayDispatch:
struct FiniteVectorRangeDispatchWrapper
{
bool Success;
double* Range;
const unsigned char* GhostArray;
unsigned char GhostTypesToSkip;
FiniteVectorRangeDispatchWrapper(
double* range, const unsigned char* ghostArray, unsigned char ghostTypesToSkip)
: Success(false)
, Range(range)
, GhostArray(ghostArray)
, GhostTypesToSkip(ghostTypesToSkip)
{
}
template <typename ArrayT>
void operator()(ArrayT* array)
{
this->Success = vtkDataArrayPrivate::DoComputeVectorRange(array, this->Range,
vtkDataArrayPrivate::FiniteValues(), this->GhostArray, this->GhostTypesToSkip);
}
};
} // end anon namespace
VTK_ABI_NAMESPACE_BEGIN
//------------------------------------------------------------------------------
bool vtkDataArray::ComputeFiniteVectorRange(double range[2])
{
return this->ComputeFiniteVectorRange(range, nullptr);
}
//------------------------------------------------------------------------------
bool vtkDataArray::ComputeFiniteVectorRange(
double range[2], const unsigned char* ghosts, unsigned char ghostsToSkip)
{
FiniteVectorRangeDispatchWrapper worker(range, ghosts, ghostsToSkip);
if (!vtkArrayDispatch::Dispatch::Execute(this, worker))
{
worker(this);
}
return worker.Success;
}
VTK_ABI_NAMESPACE_END
|