b170549d08c6a6321edb59854933176376806785
[senf.git] / boost / bimap / detail / modifier_adaptor.hpp
1 // Boost.Bimap
2 //
3 // Copyright (c) 2006-2007 Matias Capeletto
4 //
5 // Distributed under the Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8
9 /// \file detail/modifier_adaptor.hpp
10 /// \brief A binary to unary functor relation modifier adaptor.
11
12 #ifndef BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP
13 #define BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP
14
15 #if defined(_MSC_VER) && (_MSC_VER>=1200)
16 #pragma once
17 #endif
18
19 #include <boost/config.hpp>
20
21 #include <functional>
22
23 namespace boost {
24 namespace bimaps {
25 namespace detail {
26
27 /// \brief A binary to unary functor relation modifier adaptor.
28
29 template
30 <
31     class Modifier,
32     class NewArgument,
33     class FirstExtractor,
34     class SecondExtractor 
35 >
36 struct relation_modifier_adaptor :
37     public std::unary_function<NewArgument,bool>,
38     Modifier,
39     FirstExtractor,
40     SecondExtractor
41 {
42     relation_modifier_adaptor( const Modifier & m ) : Modifier(m) {}
43     relation_modifier_adaptor( const Modifier & m,
44                                const FirstExtractor & fe,
45                                const SecondExtractor & se ) :
46         Modifier(m), FirstExtractor(fe), SecondExtractor(se) {}
47
48     void operator()( NewArgument & x ) const
49     {
50         Modifier::operator()(
51             FirstExtractor ::operator()( x ),
52             SecondExtractor::operator()( x )
53         );
54     }
55 };
56
57 /// \brief A simple unary modifier adaptor.
58 // This modifier is equivalent to bind( Modifier, bind( Extractor, _1 ) )
59 // It may be a good idea to start using Boost.Bind instead of it.
60
61 template
62 <
63     class Modifier,
64     class NewArgument,
65     class Extractor
66 >
67 struct unary_modifier_adaptor :
68     public std::unary_function<NewArgument,bool>,
69     Modifier,
70     Extractor
71 {
72     unary_modifier_adaptor( const Modifier & m ) : Modifier(m) {}
73     unary_modifier_adaptor( const Modifier & m,
74                             const Extractor & fe) :
75         Modifier(m), Extractor(fe) {}
76
77     void operator()( NewArgument & x ) const
78     {
79         Modifier::operator()( Extractor::operator()( x ) );
80     }
81 };
82
83
84 } // namespace detail
85 } // namespace bimap
86 } // namespace boost
87
88
89 #endif // BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP