Chris@16: // Boost.Bimap Chris@16: // Chris@16: // Copyright (c) 2006-2007 Matias Capeletto Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: /// \file detail/modifier_adaptor.hpp Chris@16: /// \brief A binary to unary functor relation modifier adaptor. Chris@16: Chris@16: #ifndef BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP Chris@16: #define BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP Chris@16: Chris@101: #if defined(_MSC_VER) Chris@16: #pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: Chris@16: #include Chris@16: Chris@16: namespace boost { Chris@16: namespace bimaps { Chris@16: namespace detail { Chris@16: Chris@16: /// \brief A binary to unary functor relation modifier adaptor. Chris@16: Chris@16: template Chris@16: < Chris@16: class Modifier, Chris@16: class NewArgument, Chris@16: class FirstExtractor, Chris@16: class SecondExtractor Chris@16: > Chris@16: struct relation_modifier_adaptor : Chris@16: public std::unary_function, Chris@16: Modifier, Chris@16: FirstExtractor, Chris@16: SecondExtractor Chris@16: { Chris@16: relation_modifier_adaptor( const Modifier & m ) : Modifier(m) {} Chris@16: relation_modifier_adaptor( const Modifier & m, Chris@16: const FirstExtractor & fe, Chris@16: const SecondExtractor & se ) : Chris@16: Modifier(m), FirstExtractor(fe), SecondExtractor(se) {} Chris@16: Chris@16: void operator()( NewArgument & x ) const Chris@16: { Chris@16: Modifier::operator()( Chris@16: FirstExtractor ::operator()( x ), Chris@16: SecondExtractor::operator()( x ) Chris@16: ); Chris@16: } Chris@16: }; Chris@16: Chris@16: /// \brief A simple unary modifier adaptor. Chris@16: // This modifier is equivalent to bind( Modifier, bind( Extractor, _1 ) ) Chris@16: // It may be a good idea to start using Boost.Bind instead of it. Chris@16: Chris@16: template Chris@16: < Chris@16: class Modifier, Chris@16: class NewArgument, Chris@16: class Extractor Chris@16: > Chris@16: struct unary_modifier_adaptor : Chris@16: public std::unary_function, Chris@16: Modifier, Chris@16: Extractor Chris@16: { Chris@16: unary_modifier_adaptor( const Modifier & m ) : Modifier(m) {} Chris@16: unary_modifier_adaptor( const Modifier & m, Chris@16: const Extractor & fe) : Chris@16: Modifier(m), Extractor(fe) {} Chris@16: Chris@16: void operator()( NewArgument & x ) const Chris@16: { Chris@16: Modifier::operator()( Extractor::operator()( x ) ); Chris@16: } Chris@16: }; Chris@16: Chris@16: Chris@16: } // namespace detail Chris@16: } // namespace bimap Chris@16: } // namespace boost Chris@16: Chris@16: Chris@16: #endif // BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP