12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- //===----------------------------------------------------------------------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #ifndef TEST_SUPPORT_COUNTING_PREDICATES_H
- #define TEST_SUPPORT_COUNTING_PREDICATES_H
- #include <cstddef>
- template <typename Predicate, typename Arg>
- struct unary_counting_predicate {
- public:
- typedef Arg argument_type;
- typedef bool result_type;
- unary_counting_predicate(Predicate p) : p_(p), count_(0) {}
- ~unary_counting_predicate() {}
- bool operator () (const Arg &a) const { ++count_; return p_(a); }
- size_t count() const { return count_; }
- void reset() { count_ = 0; }
- private:
- Predicate p_;
- mutable size_t count_;
- };
- template <typename Predicate, typename Arg1, typename Arg2=Arg1>
- struct binary_counting_predicate {
- public:
- typedef Arg1 first_argument_type;
- typedef Arg2 second_argument_type;
- typedef bool result_type;
- binary_counting_predicate ( Predicate p ) : p_(p), count_(0) {}
- ~binary_counting_predicate() {}
- bool operator () (const Arg1 &a1, const Arg2 &a2) const { ++count_; return p_(a1, a2); }
- size_t count() const { return count_; }
- void reset() { count_ = 0; }
- private:
- Predicate p_;
- mutable size_t count_;
- };
- #endif // TEST_SUPPORT_COUNTING_PREDICATES_H
|