iter_fold_if_impl.hpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // Copyright Aleksey Gurtovoy 2001-2004
  2. // Copyright David Abrahams 2001-2002
  3. //
  4. // Distributed under the Boost Software License, Version 1.0.
  5. // (See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt)
  7. //
  8. // Preprocessed version of "boost/mpl/aux_/iter_fold_if_impl.hpp" header
  9. // -- DO NOT modify by hand!
  10. namespace boost { namespace mpl { namespace aux {
  11. template< typename Iterator, typename State >
  12. struct iter_fold_if_null_step
  13. {
  14. typedef State state;
  15. typedef Iterator iterator;
  16. };
  17. template< bool >
  18. struct iter_fold_if_step_impl
  19. {
  20. template<
  21. typename Iterator
  22. , typename State
  23. , typename StateOp
  24. , typename IteratorOp
  25. >
  26. struct result_
  27. {
  28. typedef typename apply2< StateOp,State,Iterator >::type state;
  29. typedef typename IteratorOp::type iterator;
  30. };
  31. };
  32. template<>
  33. struct iter_fold_if_step_impl<false>
  34. {
  35. template<
  36. typename Iterator
  37. , typename State
  38. , typename StateOp
  39. , typename IteratorOp
  40. >
  41. struct result_
  42. {
  43. typedef State state;
  44. typedef Iterator iterator;
  45. };
  46. };
  47. template<
  48. typename Iterator
  49. , typename State
  50. , typename ForwardOp
  51. , typename Predicate
  52. >
  53. struct iter_fold_if_forward_step
  54. {
  55. typedef typename apply2< Predicate,State,Iterator >::type not_last;
  56. typedef typename iter_fold_if_step_impl<
  57. BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
  58. >::template result_< Iterator,State,ForwardOp, mpl::next<Iterator> > impl_;
  59. typedef typename impl_::state state;
  60. typedef typename impl_::iterator iterator;
  61. };
  62. template<
  63. typename Iterator
  64. , typename State
  65. , typename BackwardOp
  66. , typename Predicate
  67. >
  68. struct iter_fold_if_backward_step
  69. {
  70. typedef typename apply2< Predicate,State,Iterator >::type not_last;
  71. typedef typename iter_fold_if_step_impl<
  72. BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
  73. >::template result_< Iterator,State,BackwardOp, identity<Iterator> > impl_;
  74. typedef typename impl_::state state;
  75. typedef typename impl_::iterator iterator;
  76. };
  77. template<
  78. typename Iterator
  79. , typename State
  80. , typename ForwardOp
  81. , typename ForwardPredicate
  82. , typename BackwardOp
  83. , typename BackwardPredicate
  84. >
  85. struct iter_fold_if_impl
  86. {
  87. private:
  88. typedef iter_fold_if_null_step< Iterator,State > forward_step0;
  89. typedef iter_fold_if_forward_step< typename forward_step0::iterator, typename forward_step0::state, ForwardOp, ForwardPredicate > forward_step1;
  90. typedef iter_fold_if_forward_step< typename forward_step1::iterator, typename forward_step1::state, ForwardOp, ForwardPredicate > forward_step2;
  91. typedef iter_fold_if_forward_step< typename forward_step2::iterator, typename forward_step2::state, ForwardOp, ForwardPredicate > forward_step3;
  92. typedef iter_fold_if_forward_step< typename forward_step3::iterator, typename forward_step3::state, ForwardOp, ForwardPredicate > forward_step4;
  93. typedef typename if_<
  94. typename forward_step4::not_last
  95. , iter_fold_if_impl<
  96. typename forward_step4::iterator
  97. , typename forward_step4::state
  98. , ForwardOp
  99. , ForwardPredicate
  100. , BackwardOp
  101. , BackwardPredicate
  102. >
  103. , iter_fold_if_null_step<
  104. typename forward_step4::iterator
  105. , typename forward_step4::state
  106. >
  107. >::type backward_step4;
  108. typedef iter_fold_if_backward_step< typename forward_step3::iterator, typename backward_step4::state, BackwardOp, BackwardPredicate > backward_step3;
  109. typedef iter_fold_if_backward_step< typename forward_step2::iterator, typename backward_step3::state, BackwardOp, BackwardPredicate > backward_step2;
  110. typedef iter_fold_if_backward_step< typename forward_step1::iterator, typename backward_step2::state, BackwardOp, BackwardPredicate > backward_step1;
  111. typedef iter_fold_if_backward_step< typename forward_step0::iterator, typename backward_step1::state, BackwardOp, BackwardPredicate > backward_step0;
  112. public:
  113. typedef typename backward_step0::state state;
  114. typedef typename backward_step4::iterator iterator;
  115. };
  116. }}}