You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
89 lines
2.2 KiB
89 lines
2.2 KiB
// 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 detail/modifier_adaptor.hpp |
|
/// \brief A binary to unary functor relation modifier adaptor. |
|
|
|
#ifndef BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP |
|
#define BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP |
|
|
|
#if defined(_MSC_VER) && (_MSC_VER>=1200) |
|
#pragma once |
|
#endif |
|
|
|
#include <boost/config.hpp> |
|
|
|
#include <functional> |
|
|
|
namespace boost { |
|
namespace bimaps { |
|
namespace detail { |
|
|
|
/// \brief A binary to unary functor relation modifier adaptor. |
|
|
|
template |
|
< |
|
class Modifier, |
|
class NewArgument, |
|
class FirstExtractor, |
|
class SecondExtractor |
|
> |
|
struct relation_modifier_adaptor : |
|
public std::unary_function<NewArgument,bool>, |
|
Modifier, |
|
FirstExtractor, |
|
SecondExtractor |
|
{ |
|
relation_modifier_adaptor( const Modifier & m ) : Modifier(m) {} |
|
relation_modifier_adaptor( const Modifier & m, |
|
const FirstExtractor & fe, |
|
const SecondExtractor & se ) : |
|
Modifier(m), FirstExtractor(fe), SecondExtractor(se) {} |
|
|
|
void operator()( NewArgument & x ) const |
|
{ |
|
Modifier::operator()( |
|
FirstExtractor ::operator()( x ), |
|
SecondExtractor::operator()( x ) |
|
); |
|
} |
|
}; |
|
|
|
/// \brief A simple unary modifier adaptor. |
|
// This modifier is equivalent to bind( Modifier, bind( Extractor, _1 ) ) |
|
// It may be a good idea to start using Boost.Bind instead of it. |
|
|
|
template |
|
< |
|
class Modifier, |
|
class NewArgument, |
|
class Extractor |
|
> |
|
struct unary_modifier_adaptor : |
|
public std::unary_function<NewArgument,bool>, |
|
Modifier, |
|
Extractor |
|
{ |
|
unary_modifier_adaptor( const Modifier & m ) : Modifier(m) {} |
|
unary_modifier_adaptor( const Modifier & m, |
|
const Extractor & fe) : |
|
Modifier(m), Extractor(fe) {} |
|
|
|
void operator()( NewArgument & x ) const |
|
{ |
|
Modifier::operator()( Extractor::operator()( x ) ); |
|
} |
|
}; |
|
|
|
|
|
} // namespace detail |
|
} // namespace bimap |
|
} // namespace boost |
|
|
|
|
|
#endif // BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP
|
|
|