mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-16 17:22:55 +00:00
Merge topic 'filter-specifies-own-field-types'
882dcacca Have filter specify its own field types Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Robert Maynard <robert.maynard@kitware.com> Merge-request: !2064
This commit is contained in:
commit
1c703b94c4
@ -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