mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-08 13:23:51 +00:00
Have filter specify its own field types
Previously, the policy specified which field types the filter should operate on. The filter could remove some types, but it was not able to add any types. This is backward. Instead, the filter should specify what types its supports and the policy may cull out some of those.
This commit is contained in:
parent
f7741be0e1
commit
882dcacca4
@ -523,6 +523,8 @@ VTKM_SUPPRESS_EXEC_WARNINGS
|
||||
template <typename Functor, typename... Ts, typename... Args>
|
||||
VTKM_EXEC_CONT void ListForEachImpl(Functor&& f, vtkm::List<Ts...>, Args&&... args)
|
||||
{
|
||||
VTKM_STATIC_ASSERT_MSG((!std::is_same<vtkm::List<Ts...>, vtkm::ListUniversal>::value),
|
||||
"Cannot call ListFor on vtkm::ListUniversal.");
|
||||
auto init_list = { ListForEachCallThrough(
|
||||
std::forward<Functor>(f), Ts{}, std::forward<Args>(args)...)... };
|
||||
(void)init_list;
|
||||
|
@ -101,6 +101,8 @@ public:
|
||||
template <typename TypeList>
|
||||
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());
|
||||
}
|
||||
|
||||
|
@ -75,6 +75,8 @@ VTKM_CONT vtkm::cont::ArrayHandle<vtkm::Range> FieldRangeCompute(
|
||||
TypeList)
|
||||
{
|
||||
VTKM_IS_LIST(TypeList);
|
||||
VTKM_STATIC_ASSERT_MSG((!std::is_same<TypeList, vtkm::ListUniversal>::value),
|
||||
"Cannot use vtkm::ListUniversal with FieldRangeCompute.");
|
||||
return vtkm::cont::detail::FieldRangeComputeImpl(pds, name, assoc, TypeList());
|
||||
}
|
||||
|
||||
|
@ -63,6 +63,9 @@ namespace cont
|
||||
template <typename TypeList>
|
||||
class VTKM_ALWAYS_EXPORT VariantArrayHandleBase
|
||||
{
|
||||
VTKM_STATIC_ASSERT_MSG((!std::is_same<TypeList, vtkm::ListUniversal>::value),
|
||||
"Cannot use vtkm::ListUniversal with VariantArrayHandle.");
|
||||
|
||||
public:
|
||||
VTKM_CONT
|
||||
VariantArrayHandleBase() = default;
|
||||
|
@ -184,7 +184,7 @@ public:
|
||||
/// A filter is able to state what subset of types it supports
|
||||
/// by default. By default we use ListUniversal to represent that the
|
||||
/// filter accepts all types specified by the users provided policy
|
||||
using SupportedTypes = vtkm::ListUniversal;
|
||||
using SupportedTypes = VTKM_DEFAULT_TYPE_LIST;
|
||||
|
||||
/// \brief Specify which additional field storage to support.
|
||||
///
|
||||
|
@ -212,7 +212,12 @@ template <typename DerivedPolicy>
|
||||
inline VTKM_CONT void Histogram::PreExecute(const vtkm::cont::PartitionedDataSet& input,
|
||||
const vtkm::filter::PolicyBase<DerivedPolicy>&)
|
||||
{
|
||||
using TypeList = typename DerivedPolicy::FieldTypeList;
|
||||
// Policies are on their way out, but until they are we want to respect them. In the mean
|
||||
// time, respect the policy if it is defined.
|
||||
using TypeList = typename std::conditional<
|
||||
std::is_same<typename DerivedPolicy::FieldTypeList, vtkm::ListUniversal>::value,
|
||||
VTKM_DEFAULT_TYPE_LIST,
|
||||
typename DerivedPolicy::FieldTypeList>::type;
|
||||
if (this->Range.IsNonEmpty())
|
||||
{
|
||||
this->ComputedRange = this->Range;
|
||||
|
@ -32,7 +32,7 @@ namespace filter
|
||||
template <typename Derived>
|
||||
struct PolicyBase
|
||||
{
|
||||
using FieldTypeList = VTKM_DEFAULT_TYPE_LIST;
|
||||
using FieldTypeList = vtkm::ListUniversal;
|
||||
using StorageList = VTKM_DEFAULT_STORAGE_LIST;
|
||||
|
||||
using StructuredCellSetList = VTKM_DEFAULT_CELL_SET_LIST_STRUCTURED;
|
||||
@ -201,10 +201,18 @@ using ArrayHandleMultiplexerForStorageList = vtkm::cont::ArrayHandleMultiplexerF
|
||||
/// passed to the `DoMapField` method of filters.
|
||||
///
|
||||
template <typename DerivedPolicy>
|
||||
VTKM_CONT vtkm::cont::VariantArrayHandleBase<typename DerivedPolicy::FieldTypeList>
|
||||
VTKM_CONT vtkm::cont::VariantArrayHandleBase<typename std::conditional<
|
||||
std::is_same<typename DerivedPolicy::FieldTypeList, vtkm::ListUniversal>::value,
|
||||
VTKM_DEFAULT_TYPE_LIST,
|
||||
typename DerivedPolicy::FieldTypeList>::type>
|
||||
ApplyPolicyFieldNotActive(const vtkm::cont::Field& field, vtkm::filter::PolicyBase<DerivedPolicy>)
|
||||
{
|
||||
using TypeList = typename DerivedPolicy::FieldTypeList;
|
||||
// Policies are on their way out, but until they are we want to respect them. In the mean
|
||||
// time, respect the policy if it is defined.
|
||||
using TypeList = typename std::conditional<
|
||||
std::is_same<typename DerivedPolicy::FieldTypeList, vtkm::ListUniversal>::value,
|
||||
VTKM_DEFAULT_TYPE_LIST,
|
||||
typename DerivedPolicy::FieldTypeList>::type;
|
||||
return field.GetData().ResetTypes(TypeList());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user