@@ -328,17 +328,13 @@ class counting_iterator
328
328
return !(*this < __it);
329
329
}
330
330
331
+ friend std::true_type
332
+ is_passed_directly_in_onedpl_device_policies (const counting_iterator&);
333
+
331
334
private:
332
335
_Ip __my_counter_;
333
336
};
334
337
335
- template <typename T>
336
- constexpr auto
337
- is_passed_directly_in_onedpl_device_policies (const oneapi::dpl::counting_iterator<T>&)
338
- {
339
- return std::true_type{};
340
- }
341
-
342
338
template <typename ... _Types>
343
339
class zip_iterator
344
340
{
@@ -467,6 +463,10 @@ class zip_iterator
467
463
return !(*this < __it);
468
464
}
469
465
466
+ friend auto
467
+ is_passed_directly_in_onedpl_device_policies (const zip_iterator&)
468
+ -> std::conjunction<oneapi::dpl::__internal::is_passed_directly_to_device<_Types> ...>;
469
+
470
470
private:
471
471
__it_types __my_it_;
472
472
};
@@ -485,16 +485,6 @@ make_zip_iterator(std::tuple<_Tp...> __arg)
485
485
return zip_iterator<_Tp...>(__arg);
486
486
}
487
487
488
- template <typename ... _Tp>
489
- constexpr auto
490
- is_passed_directly_in_onedpl_device_policies (const oneapi::dpl::zip_iterator<_Tp...>&)
491
- {
492
- if constexpr ((oneapi::dpl::__internal::is_passed_directly_to_device_v<_Tp> && ...))
493
- return std::true_type{};
494
- else
495
- return std::false_type{};
496
- }
497
-
498
488
template <typename _Iter, typename _UnaryFunc>
499
489
class transform_iterator
500
490
{
@@ -653,15 +643,11 @@ class transform_iterator
653
643
{
654
644
return __my_unary_func_;
655
645
}
646
+ friend auto
647
+ is_passed_directly_in_onedpl_device_policies (const transform_iterator&)
648
+ -> oneapi::dpl::__internal::is_passed_directly_to_device<_Iter>;
656
649
};
657
650
658
- template <typename _It, typename _Unary>
659
- constexpr auto
660
- is_passed_directly_in_onedpl_device_policies (const oneapi::dpl::transform_iterator<_It, _Unary>&)
661
- {
662
- return __internal::is_passed_directly_to_device<_It>{};
663
- }
664
-
665
651
template <typename _Iter, typename _UnaryFunc>
666
652
transform_iterator<_Iter, _UnaryFunc>
667
653
make_transform_iterator (_Iter __it, _UnaryFunc __unary_func)
@@ -851,22 +837,15 @@ class permutation_iterator
851
837
return !(*this < it);
852
838
}
853
839
840
+ friend auto is_passed_directly_in_onedpl_device_policies (const permutation_iterator&) -> std::conjunction<oneapi::dpl::__internal::is_passed_directly_to_device<SourceIterator>,
841
+ oneapi::dpl::__internal::is_passed_directly_to_device<
842
+ typename oneapi::dpl::permutation_iterator<SourceIterator, _Permutation>::IndexMap>>;
843
+
854
844
private:
855
845
SourceIterator my_source_it;
856
846
IndexMap my_index;
857
847
};
858
848
859
- template <typename _SourceIterator, typename _IndexIterator>
860
- constexpr auto
861
- is_passed_directly_in_onedpl_device_policies (const oneapi::dpl::permutation_iterator<_SourceIterator, _IndexIterator>&)
862
- {
863
- if constexpr (__internal::is_passed_directly_to_device_v<_SourceIterator> &&
864
- __internal::is_passed_directly_to_device_v<
865
- typename oneapi::dpl::permutation_iterator<_SourceIterator, _IndexIterator>::IndexMap>)
866
- return std::true_type{};
867
- else
868
- return std::false_type{};
869
- }
870
849
871
850
template <typename SourceIterator, typename IndexMap, typename ... StartIndex>
872
851
permutation_iterator<SourceIterator, IndexMap>
@@ -1025,15 +1004,14 @@ class discard_iterator
1025
1004
return !(*this < __it);
1026
1005
}
1027
1006
1028
- private:
1007
+ friend std::true_type
1008
+ is_passed_directly_in_onedpl_device_policies (const discard_iterator&);
1009
+
1010
+ private:
1029
1011
difference_type __my_position_;
1030
1012
};
1031
1013
1032
- constexpr auto
1033
- is_passed_directly_in_onedpl_device_policies (const oneapi::dpl::discard_iterator&)
1034
- {
1035
- return std::true_type{};
1036
- }
1014
+
1037
1015
1038
1016
} // namespace dpl
1039
1017
} // namespace oneapi
0 commit comments