mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-08 13:23:51 +00:00
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:
parent
2a41428fe4
commit
04f020ae65
@ -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>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user