From 3a9d4d78a5eb587dbe45a3e5a79eb7983328c443 Mon Sep 17 00:00:00 2001 From: wmdi Date: Thu, 20 Jul 2023 10:50:12 +0800 Subject: [PATCH] fix compile errors from filter and support_interator_tag --- lib/utils/include/utils/containers.h | 13 ++++++++++++- lib/utils/include/utils/type_traits.h | 10 ---------- lib/utils/include/utils/type_traits_core.h | 10 ++++++++++ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lib/utils/include/utils/containers.h b/lib/utils/include/utils/containers.h index 206a817ce8..033e45cf86 100644 --- a/lib/utils/include/utils/containers.h +++ b/lib/utils/include/utils/containers.h @@ -4,7 +4,7 @@ #include "bidict.h" #include "invoke.h" #include "optional.h" -#include "type_traits.h" +#include "type_traits_core.h" #include #include #include @@ -533,6 +533,17 @@ C filter(C const &v, F const &f) { return result; } +template +std::unordered_set filter(std::unordered_set const &v, F const &f) { + std::unordered_set result; + for (T const &t : v) { + if (f(t)) { + result.insert(t); + } + } + return result; +} + template void inplace_filter(C &v, F const &f) { std::remove_if(v.begin(), v.end(), [&](Elem const &e) { return !f(e); }); diff --git a/lib/utils/include/utils/type_traits.h b/lib/utils/include/utils/type_traits.h index ee44f01983..78d995a8b4 100644 --- a/lib/utils/include/utils/type_traits.h +++ b/lib/utils/include/utils/type_traits.h @@ -113,16 +113,6 @@ struct elements_satisfy> : std::true_type {}; static_assert( elements_satisfy>::value, ""); -template -struct supports_iterator_tag - : std::is_base_of::iterator_category> {}; - -#define CHECK_SUPPORTS_ITERATOR_TAG(TAG, ...) \ - static_assert(supports_iterator_tag<__VA_ARGS__, TAG>::value, \ - #__VA_ARGS__ " does not support required iterator tag " #TAG); - template using is_default_constructible = std::is_default_constructible; diff --git a/lib/utils/include/utils/type_traits_core.h b/lib/utils/include/utils/type_traits_core.h index e67cf23eeb..ea8e40db45 100644 --- a/lib/utils/include/utils/type_traits_core.h +++ b/lib/utils/include/utils/type_traits_core.h @@ -93,6 +93,16 @@ struct is_static_castable< void_t(std::declval()))>> : std::true_type { }; +template +struct supports_iterator_tag + : std::is_base_of::iterator_category> {}; + +#define CHECK_SUPPORTS_ITERATOR_TAG(TAG, ...) \ + static_assert(supports_iterator_tag<__VA_ARGS__, TAG>::value, \ + #__VA_ARGS__ " does not support required iterator tag " #TAG); + } // namespace FlexFlow #endif