Update Field to use new ArrayRangeCompute features

Reduces the amount of code that has to be generated. Also improves the
number of arrays supported and has better support for deprecated
versions of `GetRange`.
This commit is contained in:
Kenneth Moreland 2021-02-17 08:19:38 -07:00
parent 2a41428fe4
commit 04f020ae65
5 changed files with 8 additions and 70 deletions

@ -8,6 +8,7 @@
// PURPOSE. See the above copyright notice for more information.
//============================================================================
#include <vtkm/cont/ArrayHandleCompositeVector.h>
#include <vtkm/cont/ArrayHandleUniformPointCoordinates.h>
#include <vtkm/cont/CoordinateSystem.h>

@ -12,30 +12,7 @@
#include <vtkm/TypeList.h>
#include <vtkm/cont/ArrayHandleConstant.h>
#include <vtkm/cont/ArrayHandleCounting.h>
#include <vtkm/cont/ArrayHandleIndex.h>
#include <vtkm/cont/UncertainArrayHandle.h>
namespace
{
using ComputeRangeTypes = vtkm::TypeListAll;
using ComputeRangeStorage = vtkm::ListAppend<VTKM_DEFAULT_STORAGE_LIST,
vtkm::List<vtkm::cont::StorageTagConstant,
vtkm::cont::StorageTagCounting,
vtkm::cont::StorageTagIndex>>;
struct ComputeRange
{
template <typename ArrayHandleType>
void operator()(const ArrayHandleType& input, vtkm::cont::ArrayHandle<vtkm::Range>& range) const
{
range = vtkm::cont::ArrayRangeCompute(input);
}
};
} // anonymous namespace
#include <vtkm/cont/ArrayRangeCompute.h>
namespace vtkm
{
@ -142,8 +119,7 @@ VTKM_CONT const vtkm::cont::ArrayHandle<vtkm::Range>& Field::GetRange() const
if (this->ModifiedFlag)
{
vtkm::cont::CastAndCall(
this->Data.ResetTypes<ComputeRangeTypes, ComputeRangeStorage>(), ComputeRange{}, this->Range);
this->Range = vtkm::cont::ArrayRangeCompute(this->Data);
this->ModifiedFlag = false;
}

@ -16,7 +16,6 @@
#include <vtkm/Types.h>
#include <vtkm/cont/ArrayHandle.h>
#include <vtkm/cont/ArrayRangeCompute.h>
#include <vtkm/cont/UnknownArrayHandle.h>
namespace vtkm
@ -24,21 +23,6 @@ namespace vtkm
namespace cont
{
namespace internal
{
// This implements deprecated functionality.
struct ComputeRange
{
template <typename ArrayHandleType>
void operator()(const ArrayHandleType& input, vtkm::cont::ArrayHandle<vtkm::Range>& range) const
{
range = vtkm::cont::ArrayRangeCompute(input);
}
};
} // namespace internal
/// A \c Field encapsulates an array on some piece of the mesh, such as
/// the points, a cell set, a point logical dimension, or the whole mesh.
@ -91,22 +75,14 @@ public:
VTKM_DEPRECATED(1.6, "TypeList no longer supported in Field::GetRange.")
VTKM_CONT void GetRange(vtkm::Range* range, TypeList) const
{
this->GetRangeImpl(TypeList());
const vtkm::Id length = this->Range.GetNumberOfValues();
auto portal = this->Range.ReadPortal();
for (vtkm::Id i = 0; i < length; ++i)
{
range[i] = portal.Get(i);
}
this->GetRange(range);
}
template <typename TypeList>
VTKM_DEPRECATED(1.6, "TypeList no longer supported in Field::GetRange.")
VTKM_CONT const vtkm::cont::ArrayHandle<vtkm::Range>& GetRange(TypeList) const
{
VTKM_STATIC_ASSERT_MSG((!std::is_same<TypeList, vtkm::ListUniversal>::value),
"Cannot get the field range with vtkm::ListUniversal.");
return this->GetRangeImpl(TypeList());
return this->GetRange();
}
VTKM_CONT const vtkm::cont::ArrayHandle<vtkm::Range>& GetRange() const;
@ -138,24 +114,6 @@ private:
vtkm::cont::UnknownArrayHandle Data;
mutable vtkm::cont::ArrayHandle<vtkm::Range> Range;
mutable bool ModifiedFlag = true;
// This implements deprecated functionality
template <typename TypeList>
VTKM_CONT const vtkm::cont::ArrayHandle<vtkm::Range>& GetRangeImpl(TypeList) const
{
VTKM_IS_LIST(TypeList);
VTKM_LOG_SCOPE(vtkm::cont::LogLevel::Perf, "Field::GetRange");
if (this->ModifiedFlag)
{
vtkm::cont::CastAndCall(
this->Data.ResetTypes(TypeList()), internal::ComputeRange{}, this->Range);
this->ModifiedFlag = false;
}
return this->Range;
}
};
template <typename Functor, typename... Args>

@ -15,6 +15,8 @@
#include <vtkm/filter/FilterField.h>
#include <vtkm/cont/ArrayHandleSOA.h>
namespace vtkm
{
namespace filter

@ -11,6 +11,7 @@
#include <complex>
#include <cstdio>
#include <vector>
#include <vtkm/cont/ArrayHandleSOA.h>
#include <vtkm/io/VTKDataSetReader.h>
#include <vtkm/io/VTKDataSetWriter.h>