Boost C++ Libraries Boost.Bimap Home Libraries People FAQ More

PrevUpHomeNext

comparison_adaptor.hpp

Go to the documentation of this file.
00001 // Boost.Bimap
00002 //
00003 // Copyright (c) 2006-2007 Matias Capeletto
00004 //
00005 // Distributed under the Boost Software License, Version 1.0.
00006 // (See accompanying file LICENSE_1_0.txt or copy at
00007 // http://www.boost.org/LICENSE_1_0.txt)
00008 
00009 /// \file container_adaptor/detail/comparison_adaptor.hpp
00010 /// \brief Comparison adaptor.
00011 
00012 #ifndef BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_COMPARISON_ADAPTOR_HPP
00013 #define BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_COMPARISON_ADAPTOR_HPP
00014 
00015 #if defined(_MSC_VER) && (_MSC_VER>=1200)
00016 #pragma once
00017 #endif
00018 
00019 #include <boost/config.hpp>
00020 
00021 #include <boost/call_traits.hpp>
00022 #include <functional>
00023 
00024 namespace boost {
00025 namespace bimaps {
00026 namespace container_adaptor {
00027 namespace detail {
00028 
00029 /// \brief Comparison adaptor
00030 /**
00031 
00032 A simple comparison adaptor.
00033                                                                                     **/
00034 
00035 template < class Compare, class NewType, class Converter >
00036 struct comparison_adaptor : std::binary_function<NewType,NewType,bool>
00037 {
00038     comparison_adaptor( const Compare & comp, const Converter & conv)
00039         : compare(comp), converter(conv) {}
00040 
00041     bool operator()( BOOST_DEDUCED_TYPENAME call_traits<NewType>::param_type x,
00042                      BOOST_DEDUCED_TYPENAME call_traits<NewType>::param_type y) const
00043     {
00044         return compare( converter(x), converter(y) );
00045     }
00046 
00047     private:
00048     Compare     compare;
00049     Converter   converter;
00050 };
00051 
00052 template < class Compare, class NewType, class Converter >
00053 struct compatible_comparison_adaptor : std::binary_function<NewType,NewType,bool>
00054 {
00055     compatible_comparison_adaptor( const Compare & comp, const Converter & conv)
00056         : compare(comp), converter(conv) {}
00057 
00058     template< class CompatibleTypeLeft, class CompatibleTypeRight >
00059     bool operator()( const CompatibleTypeLeft  & x,
00060                      const CompatibleTypeRight & y) const
00061     {
00062         return compare( converter(x), converter(y) );
00063     }
00064 
00065     private:
00066     Compare     compare;
00067     Converter   converter;
00068 };
00069 
00070 
00071 /// \brief Unary Check adaptor
00072 /**
00073 
00074 A simple unary check adaptor.
00075                                                                                     **/
00076 
00077 template < class Compare, class NewType, class Converter >
00078 struct unary_check_adaptor : std::unary_function<NewType,bool>
00079 {
00080     unary_check_adaptor( const Compare & comp, const Converter & conv ) :
00081         compare(comp), converter(conv) {}
00082 
00083     bool operator()( BOOST_DEDUCED_TYPENAME call_traits<NewType>::param_type x) const
00084     {
00085         return compare( converter(x) );
00086     }
00087 
00088     private:
00089     Compare   compare;
00090     Converter converter;
00091 };
00092 
00093 } // namespace detail
00094 } // namespace container_adaptor
00095 } // namespace bimaps
00096 } // namespace boost
00097 
00098 
00099 #endif // BOOST_BIMAP_CONTAINER_ADAPTOR_DETAIL_COMPARISON_ADAPTOR_HPP
00100 
00101 
Copyright 2006 Matias Capeletto

PrevUpHomeNext