xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/boost/Inputs/use-ranges/fake_std.h (revision 87ca6386f9389f9d929d660e37701590092cefab)
1*87ca6386SNathan James #ifndef USE_RANGES_FAKE_STD_H
2*87ca6386SNathan James #define USE_RANGES_FAKE_STD_H
3*87ca6386SNathan James namespace std {
4*87ca6386SNathan James 
5*87ca6386SNathan James template <typename T> class vector {
6*87ca6386SNathan James public:
7*87ca6386SNathan James   using iterator = T *;
8*87ca6386SNathan James   using const_iterator = const T *;
9*87ca6386SNathan James   using reverse_iterator = T*;
10*87ca6386SNathan James   using reverse_const_iterator = const T*;
11*87ca6386SNathan James 
12*87ca6386SNathan James   constexpr const_iterator begin() const;
13*87ca6386SNathan James   constexpr const_iterator end() const;
14*87ca6386SNathan James   constexpr const_iterator cbegin() const;
15*87ca6386SNathan James   constexpr const_iterator cend() const;
16*87ca6386SNathan James   constexpr iterator begin();
17*87ca6386SNathan James   constexpr iterator end();
18*87ca6386SNathan James   constexpr reverse_const_iterator rbegin() const;
19*87ca6386SNathan James   constexpr reverse_const_iterator rend() const;
20*87ca6386SNathan James   constexpr reverse_const_iterator crbegin() const;
21*87ca6386SNathan James   constexpr reverse_const_iterator crend() const;
22*87ca6386SNathan James   constexpr reverse_iterator rbegin();
23*87ca6386SNathan James   constexpr reverse_iterator rend();
24*87ca6386SNathan James };
25*87ca6386SNathan James 
26*87ca6386SNathan James template <typename Container> constexpr auto begin(const Container &Cont) {
27*87ca6386SNathan James   return Cont.begin();
28*87ca6386SNathan James }
29*87ca6386SNathan James 
30*87ca6386SNathan James template <typename Container> constexpr auto begin(Container &Cont) {
31*87ca6386SNathan James   return Cont.begin();
32*87ca6386SNathan James }
33*87ca6386SNathan James 
34*87ca6386SNathan James template <typename Container> constexpr auto end(const Container &Cont) {
35*87ca6386SNathan James   return Cont.end();
36*87ca6386SNathan James }
37*87ca6386SNathan James 
38*87ca6386SNathan James template <typename Container> constexpr auto end(Container &Cont) {
39*87ca6386SNathan James   return Cont.end();
40*87ca6386SNathan James }
41*87ca6386SNathan James 
42*87ca6386SNathan James template <typename Container> constexpr auto cbegin(const Container &Cont) {
43*87ca6386SNathan James   return Cont.cbegin();
44*87ca6386SNathan James }
45*87ca6386SNathan James 
46*87ca6386SNathan James template <typename Container> constexpr auto cend(const Container &Cont) {
47*87ca6386SNathan James   return Cont.cend();
48*87ca6386SNathan James }
49*87ca6386SNathan James // Find
50*87ca6386SNathan James template< class InputIt, class T >
51*87ca6386SNathan James InputIt find(InputIt first, InputIt last, const T& value);
52*87ca6386SNathan James 
53*87ca6386SNathan James template <typename Iter> void reverse(Iter begin, Iter end);
54*87ca6386SNathan James 
55*87ca6386SNathan James template <class InputIt1, class InputIt2>
56*87ca6386SNathan James bool includes(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2);
57*87ca6386SNathan James 
58*87ca6386SNathan James template <class ForwardIt1, class ForwardIt2>
59*87ca6386SNathan James bool is_permutation(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2,
60*87ca6386SNathan James                     ForwardIt2 last2);
61*87ca6386SNathan James 
62*87ca6386SNathan James template <class BidirIt>
63*87ca6386SNathan James bool next_permutation(BidirIt first, BidirIt last);
64*87ca6386SNathan James 
65*87ca6386SNathan James inline namespace inline_test{
66*87ca6386SNathan James 
67*87ca6386SNathan James template <class ForwardIt1, class ForwardIt2>
68*87ca6386SNathan James bool equal(ForwardIt1 first1, ForwardIt1 last1,
69*87ca6386SNathan James            ForwardIt2 first2, ForwardIt2 last2);
70*87ca6386SNathan James 
71*87ca6386SNathan James template <class RandomIt>
72*87ca6386SNathan James void push_heap(RandomIt first, RandomIt last);
73*87ca6386SNathan James 
74*87ca6386SNathan James template <class InputIt, class OutputIt, class UnaryPred>
75*87ca6386SNathan James OutputIt copy_if(InputIt first, InputIt last, OutputIt d_first, UnaryPred pred);
76*87ca6386SNathan James 
77*87ca6386SNathan James template <class ForwardIt>
78*87ca6386SNathan James ForwardIt is_sorted_until(ForwardIt first, ForwardIt last);
79*87ca6386SNathan James 
80*87ca6386SNathan James template <class InputIt>
81*87ca6386SNathan James void reduce(InputIt first, InputIt last);
82*87ca6386SNathan James 
83*87ca6386SNathan James template <class InputIt, class T>
84*87ca6386SNathan James T reduce(InputIt first, InputIt last, T init);
85*87ca6386SNathan James 
86*87ca6386SNathan James template <class InputIt, class T, class BinaryOp>
87*87ca6386SNathan James T reduce(InputIt first, InputIt last, T init, BinaryOp op) {
88*87ca6386SNathan James   // Need a definition to suppress undefined_internal_type when invoked with lambda
89*87ca6386SNathan James   return init;
90*87ca6386SNathan James }
91*87ca6386SNathan James 
92*87ca6386SNathan James template <class InputIt, class T>
93*87ca6386SNathan James T accumulate(InputIt first, InputIt last, T init);
94*87ca6386SNathan James 
95*87ca6386SNathan James } // namespace inline_test
96*87ca6386SNathan James 
97*87ca6386SNathan James } // namespace std
98*87ca6386SNathan James 
99*87ca6386SNathan James #endif // USE_RANGES_FAKE_STD_H
100