-
Notifications
You must be signed in to change notification settings - Fork 14.8k
[ADT] Make ilist_select_iterator_type a type alias (NFC) #160446
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ADT] Make ilist_select_iterator_type a type alias (NFC) #160446
Conversation
Without this patch, we have: template <bool use_iterator_bits, typename Opts, bool arg1, bool arg2> struct ilist_select_iterator_type { using type = ...; } This means that we must reference "type" with somewhat mouthful: typename ilist_select_iterator_type<...>::type This patch simplifies the reference by making ilist_select_iterator_type a type alias. Now, we always obtain "bool use_iterator_bit" from OptionsT::has_iterator_bits, so this patch folds the logic into the type alias.
@llvm/pr-subscribers-llvm-adt Author: Kazu Hirata (kazutakahirata) ChangesWithout this patch, we have: template <bool use_iterator_bits, typename Opts, bool arg1, bool arg2> This means that we must reference "type" with somewhat mouthful: typename ilist_select_iterator_type<...>::type This patch simplifies the reference by making Now, we always obtain "bool use_iterator_bit" from Full diff: https://github.com/llvm/llvm-project/pull/160446.diff 2 Files Affected:
diff --git a/llvm/include/llvm/ADT/ilist_node.h b/llvm/include/llvm/ADT/ilist_node.h
index 8d78d5dbbda44..2af1c6ebbffce 100644
--- a/llvm/include/llvm/ADT/ilist_node.h
+++ b/llvm/include/llvm/ADT/ilist_node.h
@@ -51,12 +51,11 @@ class ilist_iterator_w_bits;
template <class OptionsT> class ilist_sentinel;
// Selector for which iterator type to pick given the iterator-bits node option.
-template <bool use_iterator_bits, typename Opts, bool arg1, bool arg2>
-struct ilist_select_iterator_type {
- using type = std::conditional_t<use_iterator_bits,
- ilist_iterator_w_bits<Opts, arg1, arg2>,
- ilist_iterator<Opts, arg1, arg2>>;
-};
+template <class OptionsT, bool IsReverse, bool IsConst>
+using ilist_select_iterator_type =
+ std::conditional_t<OptionsT::has_iterator_bits,
+ ilist_iterator_w_bits<OptionsT, IsReverse, IsConst>,
+ ilist_iterator<OptionsT, IsReverse, IsConst>>;
/// Implementation for an ilist node.
///
@@ -91,18 +90,12 @@ class ilist_node_impl
friend class ilist_iterator_w_bits<OptionsT, true, true>;
protected:
- using self_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- false, false>::type;
- using const_self_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- false, true>::type;
+ using self_iterator = ilist_select_iterator_type<OptionsT, false, false>;
+ using const_self_iterator = ilist_select_iterator_type<OptionsT, false, true>;
using reverse_self_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- true, false>::type;
+ ilist_select_iterator_type<OptionsT, true, false>;
using const_reverse_self_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- true, true>::type;
+ ilist_select_iterator_type<OptionsT, true, true>;
ilist_node_impl() = default;
diff --git a/llvm/include/llvm/ADT/simple_ilist.h b/llvm/include/llvm/ADT/simple_ilist.h
index 7236b3fa5a7d2..fcb2e41f62bf0 100644
--- a/llvm/include/llvm/ADT/simple_ilist.h
+++ b/llvm/include/llvm/ADT/simple_ilist.h
@@ -92,18 +92,11 @@ class simple_ilist
using reference = typename OptionsT::reference;
using const_pointer = typename OptionsT::const_pointer;
using const_reference = typename OptionsT::const_reference;
- using iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- false, false>::type;
- using const_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- false, true>::type;
- using reverse_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- true, false>::type;
+ using iterator = ilist_select_iterator_type<OptionsT, false, false>;
+ using const_iterator = ilist_select_iterator_type<OptionsT, false, true>;
+ using reverse_iterator = ilist_select_iterator_type<OptionsT, true, false>;
using const_reverse_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- true, true>::type;
+ ilist_select_iterator_type<OptionsT, true, true>;
using size_type = size_t;
using difference_type = ptrdiff_t;
|
Without this patch, we have: template <bool use_iterator_bits, typename Opts, bool arg1, bool arg2> struct ilist_select_iterator_type { using type = ...; } This means that we must reference "type" with somewhat mouthful: typename ilist_select_iterator_type<...>::type This patch simplifies the reference by making ilist_select_iterator_type a type alias. Now, we always obtain "bool use_iterator_bit" from OptionsT::has_iterator_bits, so this patch folds the logic into the type alias.
Without this patch, we have:
template <bool use_iterator_bits, typename Opts, bool arg1, bool arg2>
struct ilist_select_iterator_type {
using type = ...;
}
This means that we must reference "type" with somewhat mouthful:
typename ilist_select_iterator_type<...>::type
This patch simplifies the reference by making
ilist_select_iterator_type a type alias.
Now, we always obtain "bool use_iterator_bit" from
OptionsT::has_iterator_bits, so this patch folds the logic into the
type alias.