xref: /aosp_15_r20/external/libcxx/test/support/counting_predicates.hpp (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
1*58b9f456SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
2*58b9f456SAndroid Build Coastguard Worker //
3*58b9f456SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*58b9f456SAndroid Build Coastguard Worker //
5*58b9f456SAndroid Build Coastguard Worker // This file is dual licensed under the MIT and the University of Illinois Open
6*58b9f456SAndroid Build Coastguard Worker // Source Licenses. See LICENSE.TXT for details.
7*58b9f456SAndroid Build Coastguard Worker //
8*58b9f456SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*58b9f456SAndroid Build Coastguard Worker 
10*58b9f456SAndroid Build Coastguard Worker #ifndef TEST_SUPPORT_COUNTING_PREDICATES_H
11*58b9f456SAndroid Build Coastguard Worker #define TEST_SUPPORT_COUNTING_PREDICATES_H
12*58b9f456SAndroid Build Coastguard Worker 
13*58b9f456SAndroid Build Coastguard Worker #include <cstddef>
14*58b9f456SAndroid Build Coastguard Worker 
15*58b9f456SAndroid Build Coastguard Worker template <typename Predicate, typename Arg>
16*58b9f456SAndroid Build Coastguard Worker struct unary_counting_predicate {
17*58b9f456SAndroid Build Coastguard Worker public:
18*58b9f456SAndroid Build Coastguard Worker     typedef Arg argument_type;
19*58b9f456SAndroid Build Coastguard Worker     typedef bool result_type;
20*58b9f456SAndroid Build Coastguard Worker 
unary_counting_predicateunary_counting_predicate21*58b9f456SAndroid Build Coastguard Worker     unary_counting_predicate(Predicate p) : p_(p), count_(0) {}
~unary_counting_predicateunary_counting_predicate22*58b9f456SAndroid Build Coastguard Worker     ~unary_counting_predicate() {}
23*58b9f456SAndroid Build Coastguard Worker 
operator ()unary_counting_predicate24*58b9f456SAndroid Build Coastguard Worker     bool operator () (const Arg &a) const { ++count_; return p_(a); }
countunary_counting_predicate25*58b9f456SAndroid Build Coastguard Worker     size_t count() const { return count_; }
resetunary_counting_predicate26*58b9f456SAndroid Build Coastguard Worker     void reset() { count_ = 0; }
27*58b9f456SAndroid Build Coastguard Worker 
28*58b9f456SAndroid Build Coastguard Worker private:
29*58b9f456SAndroid Build Coastguard Worker     Predicate p_;
30*58b9f456SAndroid Build Coastguard Worker     mutable size_t count_;
31*58b9f456SAndroid Build Coastguard Worker };
32*58b9f456SAndroid Build Coastguard Worker 
33*58b9f456SAndroid Build Coastguard Worker 
34*58b9f456SAndroid Build Coastguard Worker template <typename Predicate, typename Arg1, typename Arg2=Arg1>
35*58b9f456SAndroid Build Coastguard Worker struct binary_counting_predicate {
36*58b9f456SAndroid Build Coastguard Worker public:
37*58b9f456SAndroid Build Coastguard Worker     typedef Arg1 first_argument_type;
38*58b9f456SAndroid Build Coastguard Worker     typedef Arg2 second_argument_type;
39*58b9f456SAndroid Build Coastguard Worker     typedef bool result_type;
40*58b9f456SAndroid Build Coastguard Worker 
binary_counting_predicatebinary_counting_predicate41*58b9f456SAndroid Build Coastguard Worker     binary_counting_predicate ( Predicate p ) : p_(p), count_(0) {}
~binary_counting_predicatebinary_counting_predicate42*58b9f456SAndroid Build Coastguard Worker     ~binary_counting_predicate() {}
43*58b9f456SAndroid Build Coastguard Worker 
operator ()binary_counting_predicate44*58b9f456SAndroid Build Coastguard Worker     bool operator () (const Arg1 &a1, const Arg2 &a2) const { ++count_; return p_(a1, a2); }
countbinary_counting_predicate45*58b9f456SAndroid Build Coastguard Worker     size_t count() const { return count_; }
resetbinary_counting_predicate46*58b9f456SAndroid Build Coastguard Worker     void reset() { count_ = 0; }
47*58b9f456SAndroid Build Coastguard Worker 
48*58b9f456SAndroid Build Coastguard Worker private:
49*58b9f456SAndroid Build Coastguard Worker     Predicate p_;
50*58b9f456SAndroid Build Coastguard Worker     mutable size_t count_;
51*58b9f456SAndroid Build Coastguard Worker };
52*58b9f456SAndroid Build Coastguard Worker 
53*58b9f456SAndroid Build Coastguard Worker #endif // TEST_SUPPORT_COUNTING_PREDICATES_H
54