modifier_adaptor.hpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. /// \file detail/modifier_adaptor.hpp
  9. /// \brief A binary to unary functor relation modifier adaptor.
  10. #ifndef BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP
  11. #define BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP
  12. #if defined(_MSC_VER) && (_MSC_VER>=1200)
  13. #pragma once
  14. #endif
  15. #include <boost/config.hpp>
  16. #include <functional>
  17. namespace boost {
  18. namespace bimaps {
  19. namespace detail {
  20. /// \brief A binary to unary functor relation modifier adaptor.
  21. template
  22. <
  23. class Modifier,
  24. class NewArgument,
  25. class FirstExtractor,
  26. class SecondExtractor
  27. >
  28. struct relation_modifier_adaptor :
  29. public std::unary_function<NewArgument,bool>,
  30. Modifier,
  31. FirstExtractor,
  32. SecondExtractor
  33. {
  34. relation_modifier_adaptor( const Modifier & m ) : Modifier(m) {}
  35. relation_modifier_adaptor( const Modifier & m,
  36. const FirstExtractor & fe,
  37. const SecondExtractor & se ) :
  38. Modifier(m), FirstExtractor(fe), SecondExtractor(se) {}
  39. void operator()( NewArgument & x ) const
  40. {
  41. Modifier::operator()(
  42. FirstExtractor ::operator()( x ),
  43. SecondExtractor::operator()( x )
  44. );
  45. }
  46. };
  47. /// \brief A simple unary modifier adaptor.
  48. // This modifier is equivalent to bind( Modifier, bind( Extractor, _1 ) )
  49. // It may be a good idea to start using Boost.Bind instead of it.
  50. template
  51. <
  52. class Modifier,
  53. class NewArgument,
  54. class Extractor
  55. >
  56. struct unary_modifier_adaptor :
  57. public std::unary_function<NewArgument,bool>,
  58. Modifier,
  59. Extractor
  60. {
  61. unary_modifier_adaptor( const Modifier & m ) : Modifier(m) {}
  62. unary_modifier_adaptor( const Modifier & m,
  63. const Extractor & fe) :
  64. Modifier(m), Extractor(fe) {}
  65. void operator()( NewArgument & x ) const
  66. {
  67. Modifier::operator()( Extractor::operator()( x ) );
  68. }
  69. };
  70. } // namespace detail
  71. } // namespace bimap
  72. } // namespace boost
  73. #endif // BOOST_BIMAP_DETAIL_MODIFIER_ADAPTOR_HPP