@@ -320,7 +320,8 @@ template <typename T> class Callable<T, true> {
320
320
321
321
// / Returns true if the given container only contains a single element.
322
322
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);
324
325
return B != E && std::next (B) == E;
325
326
}
326
327
@@ -375,8 +376,7 @@ inline mapped_iterator<ItTy, FuncTy> map_iterator(ItTy I, FuncTy F) {
375
376
376
377
template <class ContainerTy , class FuncTy >
377
378
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));
380
380
}
381
381
382
382
// / A base type of mapped iterator, that is useful for building derived
@@ -572,11 +572,11 @@ iterator_range<filter_iterator<detail::IterOfRange<RangeT>, PredicateT>>
572
572
make_filter_range (RangeT &&Range, PredicateT Pred) {
573
573
using FilterIteratorT =
574
574
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));
580
580
}
581
581
582
582
// / A pseudo-iterator adaptor that is designed to implement "early increment"
@@ -656,8 +656,8 @@ iterator_range<early_inc_iterator_impl<detail::IterOfRange<RangeT>>>
656
656
make_early_inc_range (RangeT &&Range) {
657
657
using EarlyIncIteratorT =
658
658
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))));
661
661
}
662
662
663
663
// Forward declarations required by zip_shortest/zip_equal/zip_first/zip_longest
@@ -1097,8 +1097,8 @@ class concat_iterator
1097
1097
// / We need the full range to know how to switch between each of the
1098
1098
// / iterators.
1099
1099
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)...) {}
1102
1102
1103
1103
using BaseT::operator ++;
1104
1104
@@ -1127,26 +1127,25 @@ template <typename ValueT, typename... RangeTs> class concat_range {
1127
1127
public:
1128
1128
using iterator =
1129
1129
concat_iterator<ValueT,
1130
- decltype (std::begin (std::declval<RangeTs &>()))...>;
1130
+ decltype (adl_begin (std::declval<RangeTs &>()))...>;
1131
1131
1132
1132
private:
1133
1133
std::tuple<RangeTs...> Ranges;
1134
1134
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...>) {
1137
1136
return iterator (std::get<Ns>(Ranges)...);
1138
1137
}
1139
1138
template <size_t ... Ns>
1140
1139
iterator begin_impl (std::index_sequence<Ns...>) const {
1141
1140
return iterator (std::get<Ns>(Ranges)...);
1142
1141
}
1143
1142
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)))...);
1146
1145
}
1147
1146
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)))...);
1150
1149
}
1151
1150
1152
1151
public:
@@ -1420,7 +1419,7 @@ template <typename EltTy, typename FirstTy> class first_or_second_type {
1420
1419
1421
1420
// / Given a container of pairs, return a range over the first elements.
1422
1421
template <typename ContainerTy> auto make_first_range (ContainerTy &&c) {
1423
- using EltTy = decltype ((*std::begin (c)));
1422
+ using EltTy = decltype ((*adl_begin (c)));
1424
1423
return llvm::map_range (std::forward<ContainerTy>(c),
1425
1424
[](EltTy elt) -> typename detail::first_or_second_type<
1426
1425
EltTy, decltype ((elt.first ))>::type {
@@ -1430,7 +1429,7 @@ template <typename ContainerTy> auto make_first_range(ContainerTy &&c) {
1430
1429
1431
1430
// / Given a container of pairs, return a range over the second elements.
1432
1431
template <typename ContainerTy> auto make_second_range (ContainerTy &&c) {
1433
- using EltTy = decltype ((*std::begin (c)));
1432
+ using EltTy = decltype ((*adl_begin (c)));
1434
1433
return llvm::map_range (
1435
1434
std::forward<ContainerTy>(c),
1436
1435
[](EltTy elt) ->
@@ -2106,7 +2105,7 @@ template<typename Container, typename Range = std::initializer_list<
2106
2105
typename Container::value_type>>
2107
2106
void replace (Container &Cont, typename Container::iterator ContIt,
2108
2107
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 ));
2110
2109
}
2111
2110
2112
2111
// / An STL-style algorithm similar to std::for_each that applies a second
@@ -2519,19 +2518,19 @@ bool hasNItemsOrLess(
2519
2518
2520
2519
// / Returns true if the given container has exactly N items
2521
2520
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);
2523
2522
}
2524
2523
2525
2524
// / Returns true if the given container has N or more items
2526
2525
template <typename ContainerTy>
2527
2526
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);
2529
2528
}
2530
2529
2531
2530
// / Returns true if the given container has N or less items
2532
2531
template <typename ContainerTy>
2533
2532
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);
2535
2534
}
2536
2535
2537
2536
// / Returns a raw pointer that represents the same address as the argument.
0 commit comments