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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18#ifndef LLVM_ADT_ITERATOR_RANGE_H

19#define LLVM_ADT_ITERATOR_RANGE_H

20

22#include <type_traits>

23#include

24

25namespace llvm {

26

27

28

29

30

31template

33 IteratorT begin_iterator, end_iterator;

34

35 template <typename From, typename To>

36 using explicitly_converted_t = decltype(static_cast<To>(

37 std::declval<std::add_rvalue_reference_t>()));

38

39public:

40#if defined(__GNUC__) && \

41 (__GNUC__ == 7 || (__GNUC__ == 8 && __GNUC_MINOR__ < 4))

42

43

44 template

45#else

46 template <typename Container,

47 std::void_t<explicitly_converted_t<

49#endif

53 iterator_range(IteratorT begin_iterator, IteratorT end_iterator)

54 : begin_iterator(std::move(begin_iterator)),

55 end_iterator(std::move(end_iterator)) {}

56

57 IteratorT begin() const { return begin_iterator; }

58 IteratorT end() const { return end_iterator; }

59 bool empty() const { return begin_iterator == end_iterator; }

60};

61

62template

65

66

67

68

69

73

77

78}

79

80#endif

A range adaptor for a pair of iterators.

Definition iterator_range.h:32

bool empty() const

Definition iterator_range.h:59

iterator_range(IteratorT begin_iterator, IteratorT end_iterator)

Definition iterator_range.h:53

IteratorT end() const

Definition iterator_range.h:58

IteratorT begin() const

Definition iterator_range.h:57

iterator_range(Container &&c)

Definition iterator_range.h:50

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

This is an optimization pass for GlobalISel generic memory operations.

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...

iterator_range< T > make_range(T x, T y)

Convenience function for iterating over sub-ranges.

Definition iterator_range.h:70

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...

iterator_range(Container &&) -> iterator_range< llvm::detail::IterOfRange< Container > >

OutputIt move(R &&Range, OutputIt Out)

Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.

Implement std::hash so that hash_code can be used in STL containers.