| // Boost.Bimap |
| // |
| // Copyright (c) 2006-2007 Matias Capeletto |
| // |
| // Distributed under the Boost Software License, Version 1.0. |
| // (See accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| |
| /// \file container_adaptor/detail/comparison_adaptor.hpp |
| /// \brief Comparison adaptor. |
| |
| #ifndef BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_COMPARISON_ADAPTOR_HPP |
| #define BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_COMPARISON_ADAPTOR_HPP |
| |
| #if defined(_MSC_VER) && (_MSC_VER>=1200) |
| #pragma once |
| #endif |
| |
| #include <boost/config.hpp> |
| |
| #include <boost/call_traits.hpp> |
| #include <functional> |
| |
| namespace boost { |
| namespace bimaps { |
| namespace container_adaptor { |
| namespace detail { |
| |
| /// \brief Comparison adaptor |
| /** |
| |
| A simple comparison adaptor. |
| **/ |
| |
| template < class Compare, class NewType, class Converter > |
| struct comparison_adaptor : std::binary_function<NewType,NewType,bool> |
| { |
| comparison_adaptor( const Compare & comp, const Converter & conv) |
| : compare(comp), converter(conv) {} |
| |
| bool operator()( BOOST_DEDUCED_TYPENAME call_traits<NewType>::param_type x, |
| BOOST_DEDUCED_TYPENAME call_traits<NewType>::param_type y) const |
| { |
| return compare( converter(x), converter(y) ); |
| } |
| |
| private: |
| Compare compare; |
| Converter converter; |
| }; |
| |
| template < class Compare, class NewType, class Converter > |
| struct compatible_comparison_adaptor : std::binary_function<NewType,NewType,bool> |
| { |
| compatible_comparison_adaptor( const Compare & comp, const Converter & conv) |
| : compare(comp), converter(conv) {} |
| |
| template< class CompatibleTypeLeft, class CompatibleTypeRight > |
| bool operator()( const CompatibleTypeLeft & x, |
| const CompatibleTypeRight & y) const |
| { |
| return compare( converter(x), converter(y) ); |
| } |
| |
| private: |
| Compare compare; |
| Converter converter; |
| }; |
| |
| |
| /// \brief Unary Check adaptor |
| /** |
| |
| A simple unary check adaptor. |
| **/ |
| |
| template < class Compare, class NewType, class Converter > |
| struct unary_check_adaptor : std::unary_function<NewType,bool> |
| { |
| unary_check_adaptor( const Compare & comp, const Converter & conv ) : |
| compare(comp), converter(conv) {} |
| |
| bool operator()( BOOST_DEDUCED_TYPENAME call_traits<NewType>::param_type x) const |
| { |
| return compare( converter(x) ); |
| } |
| |
| private: |
| Compare compare; |
| Converter converter; |
| }; |
| |
| } // namespace detail |
| } // namespace container_adaptor |
| } // namespace bimaps |
| } // namespace boost |
| |
| |
| #endif // BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_COMPARISON_ADAPTOR_HPP |
| |
| |