mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-19 02:25:42 +00:00
Refactor MinAndMax to use vtkm::Vec<T,2> instead of Pair.
The types are the same which makes Vec a more suitable container.
This commit is contained in:
parent
8d60ed57ad
commit
64bcc34389
@ -22,7 +22,6 @@
|
||||
|
||||
#include <vtkm/internal/ExportMacros.h>
|
||||
#include <vtkm/Math.h>
|
||||
#include <vtkm/Pair.h>
|
||||
|
||||
namespace vtkm {
|
||||
|
||||
@ -94,35 +93,35 @@ struct Minimum
|
||||
|
||||
|
||||
/// Binary Predicate that takes two arguments argument \c x, and \c y and
|
||||
/// returns a vtkm::Pair<T,T> that represents the minimum and maximum values
|
||||
/// returns a vtkm::Vec<T,2> that represents the minimum and maximum values
|
||||
/// Note: Requires Type \p T implement the vtkm::Min and vtkm::Max functions.
|
||||
template <typename T>
|
||||
struct MinAndMax
|
||||
{
|
||||
VTKM_EXEC_CONT
|
||||
vtkm::Pair<T, T> operator()(const T& a, const T& b) const
|
||||
vtkm::Vec<T,2> operator()(const T& a, const T& b) const
|
||||
{
|
||||
return vtkm::make_Pair(vtkm::Min(a, b), vtkm::Max(a, b));
|
||||
return vtkm::make_Vec(vtkm::Min(a, b), vtkm::Max(a, b));
|
||||
}
|
||||
|
||||
VTKM_EXEC_CONT
|
||||
vtkm::Pair<T, T> operator()(
|
||||
const vtkm::Pair<T, T>& a, const vtkm::Pair<T, T>& b) const
|
||||
vtkm::Vec<T,2> operator()(
|
||||
const vtkm::Vec<T,2>& a, const vtkm::Vec<T,2>& b) const
|
||||
{
|
||||
return vtkm::make_Pair(
|
||||
vtkm::Min(a.first, b.first), vtkm::Max(a.second, b.second));
|
||||
return vtkm::make_Vec(
|
||||
vtkm::Min(a[0], b[0]), vtkm::Max(a[1], b[1]));
|
||||
}
|
||||
|
||||
VTKM_EXEC_CONT
|
||||
vtkm::Pair<T, T> operator()(const T& a, const vtkm::Pair<T, T>& b) const
|
||||
vtkm::Vec<T,2> operator()(const T& a, const vtkm::Vec<T,2>& b) const
|
||||
{
|
||||
return vtkm::make_Pair(vtkm::Min(a, b.first), vtkm::Max(a, b.second));
|
||||
return vtkm::make_Vec(vtkm::Min(a, b[0]), vtkm::Max(a, b[1]));
|
||||
}
|
||||
|
||||
VTKM_EXEC_CONT
|
||||
vtkm::Pair<T, T> operator()(const vtkm::Pair<T, T>& a, const T& b) const
|
||||
vtkm::Vec<T,2> operator()(const vtkm::Vec<T,2>& a, const T& b) const
|
||||
{
|
||||
return vtkm::make_Pair(vtkm::Min(a.first, b), vtkm::Max(a.second, b));
|
||||
return vtkm::make_Vec(vtkm::Min(a[0], b), vtkm::Max(a[1], b));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -56,19 +56,17 @@ public:
|
||||
|
||||
//not the greatest way of doing this for performance reasons. But
|
||||
//this implementation should generate the smallest amount of code
|
||||
const vtkm::Pair<ValueType, ValueType> initial(
|
||||
input.GetPortalConstControl().Get(0),
|
||||
input.GetPortalConstControl().Get(0));
|
||||
vtkm::Vec<ValueType,2> initial(input.GetPortalConstControl().Get(0));
|
||||
|
||||
vtkm::Pair<ValueType, ValueType> result =
|
||||
vtkm::Vec<ValueType, 2> result =
|
||||
Algorithm::Reduce(input, initial, vtkm::MinAndMax<ValueType>());
|
||||
|
||||
this->Range->Allocate(NumberOfComponents);
|
||||
for (vtkm::IdComponent i = 0; i < NumberOfComponents; ++i)
|
||||
{
|
||||
this->Range->GetPortalControl().Set(
|
||||
i, vtkm::Range(VecType::GetComponent(result.first, i),
|
||||
VecType::GetComponent(result.second, i)));
|
||||
i, vtkm::Range(VecType::GetComponent(result[0], i),
|
||||
VecType::GetComponent(result[1], i)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1088,14 +1088,14 @@ private:
|
||||
testData[ARRAY_SIZE/2] = maxValue;
|
||||
|
||||
IdArrayHandle input = vtkm::cont::make_ArrayHandle(testData, ARRAY_SIZE);
|
||||
vtkm::Pair<vtkm::Id,vtkm::Id> range = Algorithm::Reduce(input,
|
||||
vtkm::Pair<vtkm::Id,vtkm::Id>(0,0),
|
||||
vtkm::Vec<vtkm::Id,2> range = Algorithm::Reduce(input,
|
||||
vtkm::Vec<vtkm::Id,2>(0,0),
|
||||
vtkm::MinAndMax<vtkm::Id>());
|
||||
|
||||
VTKM_TEST_ASSERT(maxValue == range.second,
|
||||
VTKM_TEST_ASSERT(maxValue == range[1],
|
||||
"Got bad value from Reduce with comparison object");
|
||||
|
||||
VTKM_TEST_ASSERT(0 == range.first,
|
||||
VTKM_TEST_ASSERT(0 == range[0],
|
||||
"Got bad value from Reduce with comparison object");
|
||||
}
|
||||
|
||||
|
@ -147,15 +147,14 @@ public:
|
||||
|
||||
const vtkm::Id numberOfValues = fieldArray.GetNumberOfValues();
|
||||
|
||||
const vtkm::Pair<FieldType, FieldType> initValue(
|
||||
fieldArray.GetPortalConstControl().Get(0),
|
||||
const vtkm::Vec<FieldType,2> initValue(
|
||||
fieldArray.GetPortalConstControl().Get(0));
|
||||
|
||||
vtkm::Pair<FieldType,FieldType> result =
|
||||
vtkm::Vec<FieldType,2> result =
|
||||
DeviceAlgorithms::Reduce(fieldArray, initValue, vtkm::MinAndMax<FieldType>());
|
||||
|
||||
const FieldType& fieldMinValue = result.first;
|
||||
const FieldType& fieldMaxValue = result.second;
|
||||
const FieldType& fieldMinValue = result[0];
|
||||
const FieldType& fieldMaxValue = result[1];
|
||||
|
||||
|
||||
const FieldType fieldDelta = compute_delta(fieldMinValue, fieldMaxValue, numberOfBins);
|
||||
|
@ -137,12 +137,11 @@ public:
|
||||
statinfo.median = tempPortal.Get(dataSize / 2);
|
||||
|
||||
// Minimum and maximum
|
||||
const vtkm::Pair<FieldType,FieldType> initValue(tempPortal.Get(0),
|
||||
tempPortal.Get(0));
|
||||
vtkm::Pair<FieldType,FieldType> result =
|
||||
const vtkm::Vec<FieldType,2> initValue(tempPortal.Get(0));
|
||||
vtkm::Vec<FieldType,2> result =
|
||||
DeviceAlgorithms::Reduce(fieldArray, initValue, vtkm::MinAndMax<FieldType>());
|
||||
statinfo.minimum = result.first;
|
||||
statinfo.maximum = result.second;
|
||||
statinfo.minimum = result[0];
|
||||
statinfo.maximum = result[1];
|
||||
|
||||
// Mean
|
||||
FieldType sum = DeviceAlgorithms::ScanInclusive(fieldArray, tempArray);
|
||||
|
Loading…
Reference in New Issue
Block a user