// 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 #include #include 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 { comparison_adaptor( const Compare & comp, const Converter & conv) : compare(comp), converter(conv) {} bool operator()( BOOST_DEDUCED_TYPENAME call_traits::param_type x, BOOST_DEDUCED_TYPENAME call_traits::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 { 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 { unary_check_adaptor( const Compare & comp, const Converter & conv ) : compare(comp), converter(conv) {} bool operator()( BOOST_DEDUCED_TYPENAME call_traits::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