⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fold_impl_body.hpp

📁 CGAL is a collaborative effort of several sites in Europe and Israel. The goal is to make the most i
💻 HPP
字号:
// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION#if !defined(BOOST_PP_IS_ITERATING)// Copyright Aleksey Gurtovoy 2000-2004//// Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/mpl for documentation.// $Source: /CVSROOT/CGAL/Packages/Boost/include/boost/mpl/aux_/fold_impl_body.hpp,v $// $Date: 2004/11/20 10:39:31 $// $Revision: 1.1.1.2 $#   include <boost/mpl/limits/unrolling.hpp>#   include <boost/mpl/aux_/preprocessor/repeat.hpp>#   include <boost/mpl/aux_/config/workaround.hpp>#   include <boost/mpl/aux_/config/ctps.hpp>#   include <boost/mpl/aux_/nttp_decl.hpp>#   include <boost/mpl/aux_/config/eti.hpp>#   include <boost/preprocessor/iterate.hpp>#   include <boost/preprocessor/dec.hpp>#   include <boost/preprocessor/cat.hpp>// local macros, #undef-ined at the end of the header#   define AUX778076_ITER_FOLD_STEP(unused, i, unused2) \    typedef typename apply2< \          ForwardOp \        , BOOST_PP_CAT(state,i) \        , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,i)) \        >::type BOOST_PP_CAT(state,BOOST_PP_INC(i)); \    typedef typename mpl::next<BOOST_PP_CAT(iter,i)>::type \        BOOST_PP_CAT(iter,BOOST_PP_INC(i)); \    /**/#   define AUX778076_FOLD_IMPL_NAME \    BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_impl) \    /**/#   define AUX778076_FOLD_CHUNK_NAME \    BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_chunk) \    /**/namespace boost { namespace mpl { namespace aux {/// forward declarationtemplate<      BOOST_MPL_AUX_NTTP_DECL(int, N)    , typename First    , typename Last    , typename State    , typename ForwardOp    > struct AUX778076_FOLD_IMPL_NAME;#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)#   if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)#   define BOOST_PP_ITERATION_PARAMS_1 \    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/fold_impl_body.hpp>))#   include BOOST_PP_ITERATE()// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLINGtemplate<      BOOST_MPL_AUX_NTTP_DECL(int, N)    , typename First    , typename Last    , typename State    , typename ForwardOp    > struct AUX778076_FOLD_IMPL_NAME{    typedef AUX778076_FOLD_IMPL_NAME<          BOOST_MPL_LIMIT_UNROLLING        , First        , Last        , State        , ForwardOp        > chunk_;    typedef AUX778076_FOLD_IMPL_NAME<          ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )        , typename chunk_::iterator        , Last        , typename chunk_::state        , ForwardOp        > res_;            typedef typename res_::state state;    typedef typename res_::iterator iterator;};// fallback implementation for sequences of unknown sizetemplate<      typename First    , typename Last    , typename State    , typename ForwardOp    > struct AUX778076_FOLD_IMPL_NAME<-1,First,Last,State,ForwardOp>    : AUX778076_FOLD_IMPL_NAME<          -1        , typename mpl::next<First>::type        , Last        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type        , ForwardOp        >{};template<      typename Last    , typename State    , typename ForwardOp    > struct AUX778076_FOLD_IMPL_NAME<-1,Last,Last,State,ForwardOp>{    typedef State state;    typedef Last iterator;};#   else // BOOST_WORKAROUND(__BORLANDC__, < 0x600)// Borland have some serious problems with the unrolled version, so// we always use a basic implementationtemplate<      BOOST_MPL_AUX_NTTP_DECL(int, N)    , typename First    , typename Last    , typename State    , typename ForwardOp    > struct AUX778076_FOLD_IMPL_NAME{    typedef AUX778076_FOLD_IMPL_NAME<          -1        , typename mpl::next<First>::type        , Last        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type        , ForwardOp        > res_;    typedef typename res_::state state;    typedef typename res_::iterator iterator;    typedef state type;};template<      BOOST_MPL_AUX_NTTP_DECL(int, N)     , typename Last    , typename State    , typename ForwardOp    > struct AUX778076_FOLD_IMPL_NAME<N,Last,Last,State,ForwardOp >{    typedef State state;    typedef Last iterator;    typedef state type;};#   endif // BOOST_WORKAROUND(__BORLANDC__, < 0x600) #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONtemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) >struct AUX778076_FOLD_CHUNK_NAME;#   define BOOST_PP_ITERATION_PARAMS_1 \    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/fold_impl_body.hpp>))#   include BOOST_PP_ITERATE()// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLINGtemplate< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct AUX778076_FOLD_CHUNK_NAME{    template<          typename First        , typename Last        , typename State        , typename ForwardOp        >     struct result_    {        typedef AUX778076_FOLD_IMPL_NAME<              BOOST_MPL_LIMIT_UNROLLING            , First            , Last            , State            , ForwardOp            > chunk_;        typedef AUX778076_FOLD_IMPL_NAME<              ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )            , typename chunk_::iterator            , Last            , typename chunk_::state            , ForwardOp            > res_;        typedef typename res_::state state;        typedef typename res_::iterator iterator;    };};// fallback implementation for sequences of unknown sizetemplate<      typename First    , typename Last    , typename State    , typename ForwardOp    > struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step);template<      typename Last    , typename State    >struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step){    typedef Last iterator;    typedef State state;};template<> struct AUX778076_FOLD_CHUNK_NAME<-1>{    template<          typename First        , typename Last        , typename State        , typename ForwardOp        >     struct result_    {        typedef typename if_<              typename is_same<First,Last>::type            , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)<Last,State>            , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)<First,Last,State,ForwardOp>            >::type res_;        typedef typename res_::state state;        typedef typename res_::iterator iterator;    };#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)    /// ETI workaround    template<> struct result_<int,int,int,int>    {        typedef int state;        typedef int iterator;    };#endif};template<      typename First    , typename Last    , typename State    , typename ForwardOp    > struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step){    // can't inherit here - it breaks MSVC 7.0    typedef AUX778076_FOLD_CHUNK_NAME<-1>::template result_<          typename mpl::next<First>::type        , Last        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type        , ForwardOp        > chunk_;    typedef typename chunk_::state state;    typedef typename chunk_::iterator iterator;};template<      BOOST_MPL_AUX_NTTP_DECL(int, N)    , typename First    , typename Last    , typename State    , typename ForwardOp    > struct AUX778076_FOLD_IMPL_NAME    : AUX778076_FOLD_CHUNK_NAME<N>        ::template result_<First,Last,State,ForwardOp>{};#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION}}}#   undef AUX778076_FOLD_IMPL_NAME#   undef AUX778076_FOLD_CHUNK_NAME#   undef AUX778076_ITER_FOLD_STEP#undef AUX778076_FOLD_IMPL_OP#undef AUX778076_FOLD_IMPL_NAME_PREFIX///// iteration#else#   define n_ BOOST_PP_FRAME_ITERATION(1)#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)template<      typename First    , typename Last    , typename State    , typename ForwardOp    >struct AUX778076_FOLD_IMPL_NAME<n_,First,Last,State,ForwardOp>{    typedef First iter0;    typedef State state0;    BOOST_MPL_PP_REPEAT(n_, AUX778076_ITER_FOLD_STEP, unused)    typedef BOOST_PP_CAT(state,n_) state;    typedef BOOST_PP_CAT(iter,n_) iterator;};#elsetemplate<> struct AUX778076_FOLD_CHUNK_NAME<n_>{    template<          typename First        , typename Last        , typename State        , typename ForwardOp        >    struct result_    {        typedef First iter0;        typedef State state0;        BOOST_MPL_PP_REPEAT(n_, AUX778076_ITER_FOLD_STEP, unused)        typedef BOOST_PP_CAT(state,n_) state;        typedef BOOST_PP_CAT(iter,n_) iterator;    };#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)    /// ETI workaround    template<> struct result_<int,int,int,int>    {        typedef int state;        typedef int iterator;    };#endif};#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION#   undef n_#endif // BOOST_PP_IS_ITERATING

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -