PageRenderTime 15ms CodeModel.GetById 10ms app.highlight 3ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/Dependencies/Boost/boost/mpl/aux_/advance_forward.hpp

http://hadesmem.googlecode.com/
C++ Header | 127 lines | 78 code | 31 blank | 18 comment | 3 complexity | 4ec1df5c8b12ffab3040b6c051a51cf7 MD5 | raw file
  1
  2#if !defined(BOOST_PP_IS_ITERATING)
  3
  4///// header body
  5
  6#ifndef BOOST_MPL_AUX_ADVANCE_FORWARD_HPP_INCLUDED
  7#define BOOST_MPL_AUX_ADVANCE_FORWARD_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// $Id: advance_forward.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
 18// $Date: 2008-10-11 17:19:02 +1100 (Sat, 11 Oct 2008) $
 19// $Revision: 49267 $
 20
 21#if !defined(BOOST_MPL_PREPROCESSING_MODE)
 22#   include <boost/mpl/next.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_forward.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
 44namespace boost { namespace mpl { namespace aux {
 45
 46// forward declaration
 47template< BOOST_MPL_AUX_NTTP_DECL(long, N) > struct advance_forward;
 48
 49#   define BOOST_PP_ITERATION_PARAMS_1 \
 50    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/advance_forward.hpp>))
 51#   include BOOST_PP_ITERATE()
 52
 53// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
 54template< BOOST_MPL_AUX_NTTP_DECL(long, N) > 
 55struct advance_forward
 56{
 57    template< typename Iterator > struct apply
 58    {
 59        typedef typename apply_wrap1<
 60              advance_forward<BOOST_MPL_LIMIT_UNROLLING>
 61            , Iterator
 62            >::type chunk_result_;
 63
 64        typedef typename apply_wrap1<
 65              advance_forward<(
 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_AUX_ADVANCE_FORWARD_HPP_INCLUDED
 79
 80///// iteration, depth == 1
 81
 82// For gcc 4.4 compatability, we must include the
 83// BOOST_PP_ITERATION_DEPTH test inside an #else clause.
 84#else // BOOST_PP_IS_ITERATING
 85#if BOOST_PP_ITERATION_DEPTH() == 1
 86#define i_ BOOST_PP_FRAME_ITERATION(1)
 87
 88template<>
 89struct advance_forward< BOOST_PP_FRAME_ITERATION(1) >
 90{
 91    template< typename Iterator > struct apply
 92    {
 93        typedef Iterator iter0;
 94
 95#if i_ > 0
 96#   define BOOST_PP_ITERATION_PARAMS_2 \
 97    (3,(1, i_, <boost/mpl/aux_/advance_forward.hpp>))
 98#   include BOOST_PP_ITERATE()
 99#endif
100        typedef BOOST_PP_CAT(iter,i_) type;
101    };
102
103#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
104    /// ETI workaround
105    template<> struct apply<int>
106    {
107        typedef int type;
108    };
109#endif
110};
111
112#undef i_
113
114///// iteration, depth == 2
115
116#elif BOOST_PP_ITERATION_DEPTH() == 2
117
118#   define AUX778076_ITER_0 BOOST_PP_CAT(iter,BOOST_PP_DEC(BOOST_PP_FRAME_ITERATION(2)))
119#   define AUX778076_ITER_1 BOOST_PP_CAT(iter,BOOST_PP_FRAME_ITERATION(2))
120
121        typedef typename next<AUX778076_ITER_0>::type AUX778076_ITER_1;
122        
123#   undef AUX778076_ITER_1
124#   undef AUX778076_ITER_0
125
126#endif // BOOST_PP_ITERATION_DEPTH()
127#endif // BOOST_PP_IS_ITERATING