diff options
Diffstat (limited to 'test/support/counting_predicates.hpp')
-rw-r--r-- | test/support/counting_predicates.hpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/test/support/counting_predicates.hpp b/test/support/counting_predicates.hpp new file mode 100644 index 000000000000..aab6a9785772 --- /dev/null +++ b/test/support/counting_predicates.hpp @@ -0,0 +1,46 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef __COUNTING_PREDICATES_H +#define __COUNTING_PREDICATES_H + + +template <typename Predicate, typename Arg> +struct unary_counting_predicate : public std::unary_function<Arg, bool> { +public: + 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 std::binary_function<Arg1, Arg2, bool> { +public: + + 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 // __COUNTING_PREDICATES_H |