diff options
Diffstat (limited to 'boost/bimap/container_adaptor/detail/comparison_adaptor.hpp')
-rw-r--r-- | boost/bimap/container_adaptor/detail/comparison_adaptor.hpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/boost/bimap/container_adaptor/detail/comparison_adaptor.hpp b/boost/bimap/container_adaptor/detail/comparison_adaptor.hpp new file mode 100644 index 0000000000..9051a461af --- /dev/null +++ b/boost/bimap/container_adaptor/detail/comparison_adaptor.hpp @@ -0,0 +1,101 @@ +// 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 + + |