ossrv_pub/boost_apis/boost/mpl/aux_/advance_backward.hpp
changeset 0 e4d67989cc36
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 
       
     2 #if !defined(BOOST_PP_IS_ITERATING)
       
     3 
       
     4 ///// header body
       
     5 
       
     6 #ifndef BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED
       
     7 #define BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED
       
     8 
       
     9 // Copyright Aleksey Gurtovoy 2000-2004
       
    10 //
       
    11 // Distributed under the Boost Software License, Version 1.0. 
       
    12 // (See accompanying file LICENSE_1_0.txt or copy at 
       
    13 // http://www.boost.org/LICENSE_1_0.txt)
       
    14 //
       
    15 // See http://www.boost.org/libs/mpl for documentation.
       
    16 
       
    17 // $Source: /cvsroot/boost/boost/boost/mpl/aux_/advance_backward.hpp,v $
       
    18 // $Date: 2004/09/02 15:40:43 $
       
    19 // $Revision: 1.9 $
       
    20 
       
    21 #if !defined(BOOST_MPL_PREPROCESSING_MODE)
       
    22 #   include <boost/mpl/prior.hpp>
       
    23 #   include <boost/mpl/apply_wrap.hpp>
       
    24 #endif
       
    25 
       
    26 #include <boost/mpl/aux_/config/use_preprocessed.hpp>
       
    27 
       
    28 #if    !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
       
    29     && !defined(BOOST_MPL_PREPROCESSING_MODE)
       
    30 
       
    31 #   define BOOST_MPL_PREPROCESSED_HEADER advance_backward.hpp
       
    32 #   include <boost/mpl/aux_/include_preprocessed.hpp>
       
    33 
       
    34 #else
       
    35 
       
    36 #   include <boost/mpl/limits/unrolling.hpp>
       
    37 #   include <boost/mpl/aux_/nttp_decl.hpp>
       
    38 #   include <boost/mpl/aux_/config/eti.hpp>
       
    39 
       
    40 #   include <boost/preprocessor/iterate.hpp>
       
    41 #   include <boost/preprocessor/cat.hpp>
       
    42 #   include <boost/preprocessor/inc.hpp>
       
    43 
       
    44 namespace boost { namespace mpl { namespace aux {
       
    45 
       
    46 // forward declaration
       
    47 template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct advance_backward;
       
    48 
       
    49 #   define BOOST_PP_ITERATION_PARAMS_1 \
       
    50     (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/advance_backward.hpp>))
       
    51 #   include BOOST_PP_ITERATE()
       
    52 
       
    53 // implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
       
    54 template< BOOST_MPL_AUX_NTTP_DECL(long, N) >
       
    55 struct advance_backward
       
    56 {
       
    57     template< typename Iterator > struct apply
       
    58     {
       
    59         typedef typename apply_wrap1<
       
    60               advance_backward<BOOST_MPL_LIMIT_UNROLLING>
       
    61             , Iterator
       
    62             >::type chunk_result_;
       
    63 
       
    64         typedef typename apply_wrap1<
       
    65               advance_backward<(
       
    66                 (N - BOOST_MPL_LIMIT_UNROLLING) < 0
       
    67                     ? 0
       
    68                     : N - BOOST_MPL_LIMIT_UNROLLING
       
    69                     )>
       
    70             , chunk_result_
       
    71             >::type type;
       
    72     };
       
    73 };
       
    74 
       
    75 }}}
       
    76 
       
    77 #endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
       
    78 #endif // BOOST_MPL_AUX778076_ADVANCE_BACKWARD_HPP_INCLUDED
       
    79 
       
    80 ///// iteration, depth == 1
       
    81 
       
    82 #elif BOOST_PP_ITERATION_DEPTH() == 1
       
    83 #define i_ BOOST_PP_FRAME_ITERATION(1)
       
    84 
       
    85 template<>
       
    86 struct advance_backward< BOOST_PP_FRAME_ITERATION(1) >
       
    87 {
       
    88     template< typename Iterator > struct apply
       
    89     {
       
    90         typedef Iterator iter0;
       
    91 
       
    92 #if i_ > 0
       
    93 #   define BOOST_PP_ITERATION_PARAMS_2 \
       
    94     (3,(1, BOOST_PP_FRAME_ITERATION(1), <boost/mpl/aux_/advance_backward.hpp>))
       
    95 #   include BOOST_PP_ITERATE()
       
    96 #endif
       
    97 
       
    98         typedef BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(1)) type;
       
    99     };
       
   100 
       
   101 #if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
       
   102     /// ETI workaround
       
   103     template<> struct apply<int>
       
   104     {
       
   105         typedef int type;
       
   106     };
       
   107 #endif
       
   108 };
       
   109 
       
   110 #undef i_
       
   111 
       
   112 ///// iteration, depth == 2
       
   113 
       
   114 #elif BOOST_PP_ITERATION_DEPTH() == 2
       
   115 
       
   116 #   define AUX778076_ITER_0 BOOST_PP_CAT(iter,BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(2)))
       
   117 #   define AUX778076_ITER_1 BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(2))
       
   118 
       
   119         typedef typename prior<AUX778076_ITER_0>::type AUX778076_ITER_1;
       
   120         
       
   121 #   undef AUX778076_ITER_1
       
   122 #   undef AUX778076_ITER_0
       
   123 
       
   124 #endif // BOOST_PP_IS_ITERATING