// 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) #pragma once #endif #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 { typedef NewType first_argument_type; typedef NewType second_argument_type; typedef bool result_type; 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 { typedef NewType first_argument_type; typedef NewType second_argument_type; typedef bool result_type; 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 { typedef BOOST_DEDUCED_TYPENAME call_traits::param_type argument_type; typedef bool result_type; 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