LLVM: include/llvm/ADT/ADL.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9#ifndef LLVM_ADT_ADL_H

10#define LLVM_ADT_ADL_H

11

12#include <type_traits>

13#include

14#include

15

16namespace llvm {

17

18

19

20template <typename T, T> struct SameType;

21

23

24using std::begin;

25

26template

28 -> decltype(begin(std::forward(range))) {

29 return begin(std::forward(range));

30}

31

32using std::end;

33

34template

35constexpr auto end_impl(RangeT &&range)

36 -> decltype(end(std::forward(range))) {

37 return end(std::forward(range));

38}

39

40using std::rbegin;

41

42template

44 -> decltype(rbegin(std::forward(range))) {

45 return rbegin(std::forward(range));

46}

47

48using std::rend;

49

50template

52 -> decltype(rend(std::forward(range))) {

53 return rend(std::forward(range));

54}

55

57

58template

60 T &&rhs) noexcept(noexcept(swap(std::declval(),

61 std::declval()))) {

62 swap(std::forward(lhs), std::forward(rhs));

63}

64

65using std::size;

66

67template

69 -> decltype(size(std::forward(range))) {

70 return size(std::forward(range));

71}

72

73}

74

75

76

77template

82

83

84

85template

90

91

92

93template

98

99

100

101template

106

107

108

109template

114

115

116

117template

122

124

125template

127

128template

130 std::remove_reference_t<decltype(*adl_begin(std::declval<RangeT &>()))>;

131

132}

133}

134

135#endif

constexpr auto size_impl(RangeT &&range) -> decltype(size(std::forward< RangeT >(range)))

Definition ADL.h:68

constexpr auto end_impl(RangeT &&range) -> decltype(end(std::forward< RangeT >(range)))

Definition ADL.h:35

constexpr void swap_impl(T &&lhs, T &&rhs) noexcept(noexcept(swap(std::declval< T >(), std::declval< T >())))

Definition ADL.h:59

constexpr auto rend_impl(RangeT &&range) -> decltype(rend(std::forward< RangeT >(range)))

Definition ADL.h:51

constexpr auto rbegin_impl(RangeT &&range) -> decltype(rbegin(std::forward< RangeT >(range)))

Definition ADL.h:43

void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)

Implement std::swap in terms of BitVector swap.

constexpr auto begin_impl(RangeT &&range) -> decltype(begin(std::forward< RangeT >(range)))

Definition ADL.h:27

decltype(adl_begin(std::declval< RangeT & >())) IterOfRange

Definition ADL.h:126

std::remove_reference_t< decltype(*adl_begin(std::declval< RangeT & >()))> ValueOfRange

Definition ADL.h:129

This is an optimization pass for GlobalISel generic memory operations.

auto size(R &&Range, std::enable_if_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< decltype(Range.begin())>::iterator_category >::value, void > *=nullptr)

Get the size of a range.

constexpr auto adl_begin(RangeT &&range) -> decltype(adl_detail::begin_impl(std::forward< RangeT >(range)))

Returns the begin iterator to range using std::begin and function found through Argument-Dependent Lo...

Definition ADL.h:78

constexpr auto adl_end(RangeT &&range) -> decltype(adl_detail::end_impl(std::forward< RangeT >(range)))

Returns the end iterator to range using std::end and functions found through Argument-Dependent Looku...

Definition ADL.h:86

constexpr auto adl_rbegin(RangeT &&range) -> decltype(adl_detail::rbegin_impl(std::forward< RangeT >(range)))

Returns the reverse-begin iterator to range using std::rbegin and function found through Argument-Dep...

Definition ADL.h:94

constexpr auto adl_size(RangeT &&range) -> decltype(adl_detail::size_impl(std::forward< RangeT >(range)))

Returns the size of range using std::size and functions found through Argument-Dependent Lookup (ADL)...

Definition ADL.h:118

constexpr auto adl_rend(RangeT &&range) -> decltype(adl_detail::rend_impl(std::forward< RangeT >(range)))

Returns the reverse-end iterator to range using std::rend and functions found through Argument-Depend...

Definition ADL.h:102

constexpr void adl_swap(T &&lhs, T &&rhs) noexcept(noexcept(adl_detail::swap_impl(std::declval< T >(), std::declval< T >())))

Swaps lhs with rhs using std::swap and functions found through Argument-Dependent Lookup (ADL).

Definition ADL.h:110

void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)

Implement std::swap in terms of BitVector swap.