Skip to content

Commit 9e418c9

Browse files
authored
[ADT] Use adl_* wrappers across STLExtras (#87936)
Update the remaining uses of `std::begin`/`end` functions to `adl_beging`/`end`. This is to make the behavior all the utility functions consistent, rather than trying to fix a specific usecase.
1 parent b1a278d commit 9e418c9

File tree

1 file changed

+24
-25
lines changed

1 file changed

+24
-25
lines changed

llvm/include/llvm/ADT/STLExtras.h

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,8 @@ template <typename T> class Callable<T, true> {
320320

321321
/// Returns true if the given container only contains a single element.
322322
template <typename ContainerTy> bool hasSingleElement(ContainerTy &&C) {
323-
auto B = std::begin(C), E = std::end(C);
323+
auto B = adl_begin(C);
324+
auto E = adl_end(C);
324325
return B != E && std::next(B) == E;
325326
}
326327

@@ -375,8 +376,7 @@ inline mapped_iterator<ItTy, FuncTy> map_iterator(ItTy I, FuncTy F) {
375376

376377
template <class ContainerTy, class FuncTy>
377378
auto map_range(ContainerTy &&C, FuncTy F) {
378-
return make_range(map_iterator(std::begin(C), F),
379-
map_iterator(std::end(C), F));
379+
return make_range(map_iterator(adl_begin(C), F), map_iterator(adl_end(C), F));
380380
}
381381

382382
/// A base type of mapped iterator, that is useful for building derived
@@ -572,11 +572,11 @@ iterator_range<filter_iterator<detail::IterOfRange<RangeT>, PredicateT>>
572572
make_filter_range(RangeT &&Range, PredicateT Pred) {
573573
using FilterIteratorT =
574574
filter_iterator<detail::IterOfRange<RangeT>, PredicateT>;
575-
return make_range(
576-
FilterIteratorT(std::begin(std::forward<RangeT>(Range)),
577-
std::end(std::forward<RangeT>(Range)), Pred),
578-
FilterIteratorT(std::end(std::forward<RangeT>(Range)),
579-
std::end(std::forward<RangeT>(Range)), Pred));
575+
return make_range(FilterIteratorT(adl_begin(std::forward<RangeT>(Range)),
576+
adl_end(std::forward<RangeT>(Range)), Pred),
577+
FilterIteratorT(adl_end(std::forward<RangeT>(Range)),
578+
adl_end(std::forward<RangeT>(Range)),
579+
Pred));
580580
}
581581

582582
/// A pseudo-iterator adaptor that is designed to implement "early increment"
@@ -656,8 +656,8 @@ iterator_range<early_inc_iterator_impl<detail::IterOfRange<RangeT>>>
656656
make_early_inc_range(RangeT &&Range) {
657657
using EarlyIncIteratorT =
658658
early_inc_iterator_impl<detail::IterOfRange<RangeT>>;
659-
return make_range(EarlyIncIteratorT(std::begin(std::forward<RangeT>(Range))),
660-
EarlyIncIteratorT(std::end(std::forward<RangeT>(Range))));
659+
return make_range(EarlyIncIteratorT(adl_begin(std::forward<RangeT>(Range))),
660+
EarlyIncIteratorT(adl_end(std::forward<RangeT>(Range))));
661661
}
662662

663663
// Forward declarations required by zip_shortest/zip_equal/zip_first/zip_longest
@@ -1097,8 +1097,8 @@ class concat_iterator
10971097
/// We need the full range to know how to switch between each of the
10981098
/// iterators.
10991099
template <typename... RangeTs>
1100-
explicit concat_iterator(RangeTs &&... Ranges)
1101-
: Begins(std::begin(Ranges)...), Ends(std::end(Ranges)...) {}
1100+
explicit concat_iterator(RangeTs &&...Ranges)
1101+
: Begins(adl_begin(Ranges)...), Ends(adl_end(Ranges)...) {}
11021102

11031103
using BaseT::operator++;
11041104

@@ -1127,26 +1127,25 @@ template <typename ValueT, typename... RangeTs> class concat_range {
11271127
public:
11281128
using iterator =
11291129
concat_iterator<ValueT,
1130-
decltype(std::begin(std::declval<RangeTs &>()))...>;
1130+
decltype(adl_begin(std::declval<RangeTs &>()))...>;
11311131

11321132
private:
11331133
std::tuple<RangeTs...> Ranges;
11341134

1135-
template <size_t... Ns>
1136-
iterator begin_impl(std::index_sequence<Ns...>) {
1135+
template <size_t... Ns> iterator begin_impl(std::index_sequence<Ns...>) {
11371136
return iterator(std::get<Ns>(Ranges)...);
11381137
}
11391138
template <size_t... Ns>
11401139
iterator begin_impl(std::index_sequence<Ns...>) const {
11411140
return iterator(std::get<Ns>(Ranges)...);
11421141
}
11431142
template <size_t... Ns> iterator end_impl(std::index_sequence<Ns...>) {
1144-
return iterator(make_range(std::end(std::get<Ns>(Ranges)),
1145-
std::end(std::get<Ns>(Ranges)))...);
1143+
return iterator(make_range(adl_end(std::get<Ns>(Ranges)),
1144+
adl_end(std::get<Ns>(Ranges)))...);
11461145
}
11471146
template <size_t... Ns> iterator end_impl(std::index_sequence<Ns...>) const {
1148-
return iterator(make_range(std::end(std::get<Ns>(Ranges)),
1149-
std::end(std::get<Ns>(Ranges)))...);
1147+
return iterator(make_range(adl_end(std::get<Ns>(Ranges)),
1148+
adl_end(std::get<Ns>(Ranges)))...);
11501149
}
11511150

11521151
public:
@@ -1420,7 +1419,7 @@ template <typename EltTy, typename FirstTy> class first_or_second_type {
14201419

14211420
/// Given a container of pairs, return a range over the first elements.
14221421
template <typename ContainerTy> auto make_first_range(ContainerTy &&c) {
1423-
using EltTy = decltype((*std::begin(c)));
1422+
using EltTy = decltype((*adl_begin(c)));
14241423
return llvm::map_range(std::forward<ContainerTy>(c),
14251424
[](EltTy elt) -> typename detail::first_or_second_type<
14261425
EltTy, decltype((elt.first))>::type {
@@ -1430,7 +1429,7 @@ template <typename ContainerTy> auto make_first_range(ContainerTy &&c) {
14301429

14311430
/// Given a container of pairs, return a range over the second elements.
14321431
template <typename ContainerTy> auto make_second_range(ContainerTy &&c) {
1433-
using EltTy = decltype((*std::begin(c)));
1432+
using EltTy = decltype((*adl_begin(c)));
14341433
return llvm::map_range(
14351434
std::forward<ContainerTy>(c),
14361435
[](EltTy elt) ->
@@ -2106,7 +2105,7 @@ template<typename Container, typename Range = std::initializer_list<
21062105
typename Container::value_type>>
21072106
void replace(Container &Cont, typename Container::iterator ContIt,
21082107
typename Container::iterator ContEnd, Range R) {
2109-
replace(Cont, ContIt, ContEnd, R.begin(), R.end());
2108+
replace(Cont, ContIt, ContEnd, adl_begin(R), adl_begin(R));
21102109
}
21112110

21122111
/// An STL-style algorithm similar to std::for_each that applies a second
@@ -2519,19 +2518,19 @@ bool hasNItemsOrLess(
25192518

25202519
/// Returns true if the given container has exactly N items
25212520
template <typename ContainerTy> bool hasNItems(ContainerTy &&C, unsigned N) {
2522-
return hasNItems(std::begin(C), std::end(C), N);
2521+
return hasNItems(adl_begin(C), adl_end(C), N);
25232522
}
25242523

25252524
/// Returns true if the given container has N or more items
25262525
template <typename ContainerTy>
25272526
bool hasNItemsOrMore(ContainerTy &&C, unsigned N) {
2528-
return hasNItemsOrMore(std::begin(C), std::end(C), N);
2527+
return hasNItemsOrMore(adl_begin(C), adl_end(C), N);
25292528
}
25302529

25312530
/// Returns true if the given container has N or less items
25322531
template <typename ContainerTy>
25332532
bool hasNItemsOrLess(ContainerTy &&C, unsigned N) {
2534-
return hasNItemsOrLess(std::begin(C), std::end(C), N);
2533+
return hasNItemsOrLess(adl_begin(C), adl_end(C), N);
25352534
}
25362535

25372536
/// Returns a raw pointer that represents the same address as the argument.

0 commit comments

Comments
 (0)