xref: /llvm-project/libcxx/test/support/iterator_traits_cpp17_iterators.h (revision f5832bab6f5024cabe32a9f668b7f44e6b7cfef5)
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef TEST_SUPPORT_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS
10 #define TEST_SUPPORT_ITERATOR_TRAITS_ITERATOR_TRAITS_CPP17_ITERATORS
11 
12 struct iterator_traits_cpp17_iterator {
13   int& operator*();
14   iterator_traits_cpp17_iterator& operator++();
15   iterator_traits_cpp17_iterator operator++(int);
16 };
17 
18 struct 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_iterator
23   iterator_traits_cpp17_iterator operator++(int);
24 };
25 
26 struct 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 
37 struct 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_iterator
45   iterator_traits_cpp17_input_iterator operator++(int);
46 
47   bool operator==(iterator_traits_cpp17_proxy_input_iterator const&) const;
48 };
49 
50 struct 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 
61 struct 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 
74 struct 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_ITERATORS
105