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