/*-----------------------------------------------------------------------------+ | |
Copyright (c) 2010-2010: Joachim Faulhaber | |
+------------------------------------------------------------------------------+ | |
Distributed under the Boost Software License, Version 1.0. | |
(See accompanying file LICENCE.txt or copy at | |
http://www.boost.org/LICENSE_1_0.txt) | |
+-----------------------------------------------------------------------------*/ | |
#ifndef BOOST_ICL_TYPE_TRAITS_PREDICATE_HPP_JOFA_101102 | |
#define BOOST_ICL_TYPE_TRAITS_PREDICATE_HPP_JOFA_101102 | |
#include <functional> | |
namespace boost{namespace icl | |
{ | |
// naming convention | |
// predicate: n-ary predicate | |
// property: unary predicate | |
// relation: binary predicate | |
// Unary predicates | |
template <class Type> | |
class property : public std::unary_function<Type,bool>{}; | |
template <class Type> | |
class member_property : public property<Type> | |
{ | |
public: | |
member_property( bool(Type::* pred)()const ): property<Type>(), m_pred(pred){} | |
bool operator()(const Type& x)const { return (x.*m_pred)(); } | |
private: | |
bool(Type::* m_pred)()const; | |
} ; | |
// Binary predicates: relations | |
template <class LeftT, class RightT> | |
class relation : public std::binary_function<LeftT,RightT,bool>{}; | |
}} // namespace icl boost | |
#endif | |