105 lines · c
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef TEST_SUPPORT_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS10#define TEST_SUPPORT_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS11 12struct iterator_traits_cpp17_iterator {13 int& operator*();14 iterator_traits_cpp17_iterator& operator++();15 iterator_traits_cpp17_iterator operator++(int);16};17 18struct iterator_traits_cpp17_proxy_iterator {19 int operator*();20 iterator_traits_cpp17_proxy_iterator& operator++();21 22 // this returns legacy_iterator, not iterator_traits_cpp17_proxy_iterator23 iterator_traits_cpp17_iterator operator++(int);24};25 26struct iterator_traits_cpp17_input_iterator {27 using difference_type = int;28 using value_type = long;29 30 int& operator*();31 iterator_traits_cpp17_input_iterator& operator++();32 iterator_traits_cpp17_input_iterator operator++(int);33 34 bool operator==(iterator_traits_cpp17_input_iterator const&) const;35};36 37struct iterator_traits_cpp17_proxy_input_iterator {38 using difference_type = int;39 using value_type = long;40 41 int operator*();42 iterator_traits_cpp17_proxy_input_iterator& operator++();43 44 // this returns legacy_input_iterator, not iterator_traits_cpp17_proxy_input_iterator45 iterator_traits_cpp17_input_iterator operator++(int);46 47 bool operator==(iterator_traits_cpp17_proxy_input_iterator const&) const;48};49 50struct iterator_traits_cpp17_forward_iterator {51 using difference_type = int;52 using value_type = int;53 54 int& operator*();55 iterator_traits_cpp17_forward_iterator& operator++();56 iterator_traits_cpp17_forward_iterator operator++(int);57 58 bool operator==(iterator_traits_cpp17_forward_iterator const&) const;59};60 61struct iterator_traits_cpp17_bidirectional_iterator {62 using difference_type = int;63 using value_type = int;64 65 int& operator*();66 iterator_traits_cpp17_bidirectional_iterator& operator++();67 iterator_traits_cpp17_bidirectional_iterator operator++(int);68 iterator_traits_cpp17_bidirectional_iterator& operator--();69 iterator_traits_cpp17_bidirectional_iterator operator--(int);70 71 bool operator==(iterator_traits_cpp17_bidirectional_iterator const&) const;72};73 74struct iterator_traits_cpp17_random_access_iterator {75 using difference_type = int;76 using value_type = int;77 78 int& operator*();79 int& operator[](difference_type);80 iterator_traits_cpp17_random_access_iterator& operator++();81 iterator_traits_cpp17_random_access_iterator operator++(int);82 iterator_traits_cpp17_random_access_iterator& operator--();83 iterator_traits_cpp17_random_access_iterator operator--(int);84 85 bool operator==(iterator_traits_cpp17_random_access_iterator const&) const;86 bool operator<(iterator_traits_cpp17_random_access_iterator const&) const;87 bool operator>(iterator_traits_cpp17_random_access_iterator const&) const;88 bool operator<=(iterator_traits_cpp17_random_access_iterator const&) const;89 bool operator>=(iterator_traits_cpp17_random_access_iterator const&) const;90 91 iterator_traits_cpp17_random_access_iterator& operator+=(difference_type);92 iterator_traits_cpp17_random_access_iterator& operator-=(difference_type);93 94 friend iterator_traits_cpp17_random_access_iterator operator+(iterator_traits_cpp17_random_access_iterator,95 difference_type);96 friend iterator_traits_cpp17_random_access_iterator operator+(difference_type,97 iterator_traits_cpp17_random_access_iterator);98 friend iterator_traits_cpp17_random_access_iterator operator-(iterator_traits_cpp17_random_access_iterator,99 difference_type);100 friend difference_type operator-(iterator_traits_cpp17_random_access_iterator,101 iterator_traits_cpp17_random_access_iterator);102};103 104#endif // TEST_SUPPORT_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS105