diff options
Diffstat (limited to '3rdParty')
118 files changed, 12168 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/blank.hpp b/3rdParty/Boost/src/boost/blank.hpp new file mode 100644 index 0000000..d0fe5ab --- /dev/null +++ b/3rdParty/Boost/src/boost/blank.hpp @@ -0,0 +1,106 @@ +//----------------------------------------------------------------------------- +// boost blank.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_BLANK_HPP +#define BOOST_BLANK_HPP + +#include "boost/blank_fwd.hpp" + +#if !defined(BOOST_NO_IOSTREAM) +#include <iosfwd> // for std::basic_ostream forward declare +#include "boost/detail/templated_streams.hpp" +#endif // BOOST_NO_IOSTREAM + +#include "boost/mpl/bool.hpp" +#include "boost/type_traits/is_empty.hpp" +#include "boost/type_traits/is_pod.hpp" +#include "boost/type_traits/is_stateless.hpp" + +namespace boost { + +struct blank +{ +}; + +// type traits specializations +// + +template <> +struct is_pod< blank > +    : mpl::true_ +{ +}; + +template <> +struct is_empty< blank > +    : mpl::true_ +{ +}; + +template <> +struct is_stateless< blank > +    : mpl::true_ +{ +}; + +// relational operators +// + +inline bool operator==(const blank&, const blank&) +{ +    return true; +} + +inline bool operator<=(const blank&, const blank&) +{ +    return true; +} + +inline bool operator>=(const blank&, const blank&) +{ +    return true; +} + +inline bool operator!=(const blank&, const blank&) +{ +    return false; +} + +inline bool operator<(const blank&, const blank&) +{ +    return false; +} + +inline bool operator>(const blank&, const blank&) +{ +    return false; +} + +// streaming support +// +#if !defined(BOOST_NO_IOSTREAM) + +BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) +inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<( +      BOOST_TEMPLATED_STREAM(ostream, E,T)& out +    , const blank& +    ) +{ +    // (output nothing) +    return out; +} + +#endif // BOOST_NO_IOSTREAM + +} // namespace boost + +#endif // BOOST_BLANK_HPP diff --git a/3rdParty/Boost/src/boost/blank_fwd.hpp b/3rdParty/Boost/src/boost/blank_fwd.hpp new file mode 100644 index 0000000..8bfe97c --- /dev/null +++ b/3rdParty/Boost/src/boost/blank_fwd.hpp @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------------- +// boost blank_fwd.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_BLANK_FWD_HPP +#define BOOST_BLANK_FWD_HPP + +namespace boost { + +struct blank; + +} // namespace boost + +#endif // BOOST_BLANK_FWD_HPP diff --git a/3rdParty/Boost/src/boost/detail/templated_streams.hpp b/3rdParty/Boost/src/boost/detail/templated_streams.hpp new file mode 100644 index 0000000..1fa6ee3 --- /dev/null +++ b/3rdParty/Boost/src/boost/detail/templated_streams.hpp @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// boost detail/templated_streams.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_DETAIL_TEMPLATED_STREAMS_HPP +#define BOOST_DETAIL_TEMPLATED_STREAMS_HPP + +#include "boost/config.hpp" + +/////////////////////////////////////////////////////////////////////////////// +// (detail) BOOST_TEMPLATED_STREAM_* macros +// +// Provides workaround platforms without stream class templates. +// + +#if !defined(BOOST_NO_STD_LOCALE) + +#define BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) \ +    template < typename E , typename T > + +#define BOOST_TEMPLATED_STREAM_TEMPLATE_ALLOC(E,T,A) \ +    template < typename E , typename T , typename A > + +#define BOOST_TEMPLATED_STREAM_ARGS(E,T) \ +    typename E , typename T  + +#define BOOST_TEMPLATED_STREAM_ARGS_ALLOC(E,T,A) \ +    typename E , typename T , typename A  + +#define BOOST_TEMPLATED_STREAM_COMMA        , + +#define BOOST_TEMPLATED_STREAM_ELEM(E)      E +#define BOOST_TEMPLATED_STREAM_TRAITS(T)    T +#define BOOST_TEMPLATED_STREAM_ALLOC(A)     A + +#define BOOST_TEMPLATED_STREAM(X,E,T) \ +    BOOST_JOIN(std::basic_,X)< E , T > + +#define BOOST_TEMPLATED_STREAM_WITH_ALLOC(X,E,T,A) \ +    BOOST_JOIN(std::basic_,X)< E , T , A > + +#else // defined(BOOST_NO_STD_LOCALE) + +#define BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) /**/ + +#define BOOST_TEMPLATED_STREAM_TEMPLATE_ALLOC(E,T,A) /**/ + +#define BOOST_TEMPLATED_STREAM_ARGS(E,T) /**/ + +#define BOOST_TEMPLATED_STREAM_ARGS_ALLOC(E,T,A) /**/ + +#define BOOST_TEMPLATED_STREAM_COMMA        /**/ + +#define BOOST_TEMPLATED_STREAM_ELEM(E)      char +#define BOOST_TEMPLATED_STREAM_TRAITS(T)    std::char_traits<char> +#define BOOST_TEMPLATED_STREAM_ALLOC(A)     std::allocator<char> + +#define BOOST_TEMPLATED_STREAM(X,E,T) \ +    std::X + +#define BOOST_TEMPLATED_STREAM_WITH_ALLOC(X,E,T,A) \ +    std::X + +#endif // BOOST_NO_STD_LOCALE + +#endif // BOOST_DETAIL_TEMPLATED_STREAMS_HPP diff --git a/3rdParty/Boost/src/boost/mpl/O1_size.hpp b/3rdParty/Boost/src/boost/mpl/O1_size.hpp new file mode 100644 index 0000000..84ba521 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/O1_size.hpp @@ -0,0 +1,40 @@ + +#ifndef BOOST_MPL_O1_SIZE_HPP_INCLUDED +#define BOOST_MPL_O1_SIZE_HPP_INCLUDED + +// 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. + +// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/O1_size_fwd.hpp> +#include <boost/mpl/sequence_tag.hpp> +#include <boost/mpl/aux_/O1_size_impl.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +// returns sequence size if it's an O(1) operation; otherwise returns -1 +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    > +struct O1_size +    : O1_size_impl< typename sequence_tag<Sequence>::type > +        ::template apply< Sequence > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, O1_size, (Sequence)) +}; + +BOOST_MPL_AUX_NA_SPEC(1, O1_size) + +}} + +#endif // BOOST_MPL_O1_SIZE_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/O1_size_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/O1_size_impl.hpp new file mode 100644 index 0000000..df408f0 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/O1_size_impl.hpp @@ -0,0 +1,87 @@ + +#ifndef BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED +#define BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED + +// 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. + +// $Id: O1_size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/O1_size_fwd.hpp> +#include <boost/mpl/long.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/aux_/has_size.hpp> +#include <boost/mpl/aux_/config/forwarding.hpp> +#include <boost/mpl/aux_/config/static_constant.hpp> +#include <boost/mpl/aux_/config/msvc.hpp> +#include <boost/mpl/aux_/config/workaround.hpp> + +namespace boost { namespace mpl { + +// default implementation - returns 'Sequence::size' if sequence has a 'size' +// member, and -1 otherwise; conrete sequences might override it by  +// specializing either the 'O1_size_impl' or the primary 'O1_size' template + +#   if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) \ +    && !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) + +namespace aux { +template< typename Sequence > struct O1_size_impl +    : Sequence::size +{ +}; +} + +template< typename Tag > +struct O1_size_impl +{ +    template< typename Sequence > struct apply +#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) +        : if_< +              aux::has_size<Sequence> +            , aux::O1_size_impl<Sequence> +            , long_<-1> +            >::type +    { +#else +    { +        typedef typename if_< +              aux::has_size<Sequence> +            , aux::O1_size_impl<Sequence> +            , long_<-1> +            >::type type; + +        BOOST_STATIC_CONSTANT(long, value = +              (if_< +                  aux::has_size<Sequence> +                , aux::O1_size_impl<Sequence> +                , long_<-1> +                >::type::value) +            ); +#endif +    }; +}; + +#   else // BOOST_MSVC + +template< typename Tag > +struct O1_size_impl +{ +    template< typename Sequence > struct apply +        : long_<-1> +        { +        }; +}; + +#   endif + +}} + +#endif // BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/clear_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/clear_impl.hpp new file mode 100644 index 0000000..84da54b --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/clear_impl.hpp @@ -0,0 +1,35 @@ + +#ifndef BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED + +// 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. + +// $Id: clear_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/clear_fwd.hpp> +#include <boost/mpl/aux_/traits_lambda_spec.hpp> +#include <boost/mpl/aux_/config/eti.hpp> + +namespace boost { namespace mpl { + +// no default implementation; the definition is needed to make MSVC happy + +template< typename Tag > +struct clear_impl +{ +    template< typename Sequence > struct apply; +}; + +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, clear_impl) + +}} + +#endif // BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/empty_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/empty_impl.hpp new file mode 100644 index 0000000..9a553a7 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/empty_impl.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED + +// 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. + +// $Id: empty_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/empty_fwd.hpp> +#include <boost/mpl/begin_end.hpp> +#include <boost/mpl/aux_/traits_lambda_spec.hpp> +#include <boost/type_traits/is_same.hpp> + +namespace boost { namespace mpl { + +// default implementation; conrete sequences might override it by  +// specializing either the 'empty_impl' or the primary 'empty' template + +template< typename Tag > +struct empty_impl +{ +    template< typename Sequence > struct apply +        : is_same< +              typename begin<Sequence>::type +            , typename end<Sequence>::type +            > +    { +    }; +}; + +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1,empty_impl) + +}} + +#endif // BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/find_if_pred.hpp b/3rdParty/Boost/src/boost/mpl/aux_/find_if_pred.hpp new file mode 100644 index 0000000..c07d89d --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/find_if_pred.hpp @@ -0,0 +1,31 @@ + +#ifndef BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED +#define BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright Eric Friedman 2002 +// +// 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. + +#include <boost/mpl/aux_/iter_apply.hpp> +#include <boost/mpl/not.hpp> + +namespace boost { namespace mpl { namespace aux { + +template< typename Predicate > +struct find_if_pred +{ +    template< typename Iterator > +    struct apply +    { +        typedef not_< aux::iter_apply1<Predicate,Iterator> > type; +    }; +}; + +}}} + +#endif // BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/fold_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/fold_impl.hpp new file mode 100644 index 0000000..89e42f8 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/fold_impl.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED + +// 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. + +// $Id: fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/next_prior.hpp> +#   include <boost/mpl/apply.hpp> +#   include <boost/mpl/deref.hpp> +#   include <boost/mpl/aux_/config/ctps.hpp> +#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +#       include <boost/mpl/if.hpp> +#       include <boost/type_traits/is_same.hpp> +#   endif +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ +    && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER fold_impl.hpp +#   include <boost/mpl/aux_/include_preprocessed.hpp> + +#else + +#   define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type +#   define AUX778076_FOLD_IMPL_NAME_PREFIX fold +#   include <boost/mpl/aux_/fold_impl_body.hpp> + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/fold_impl_body.hpp b/3rdParty/Boost/src/boost/mpl/aux_/fold_impl_body.hpp new file mode 100644 index 0000000..41f80b4 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/fold_impl_body.hpp @@ -0,0 +1,365 @@ + +// 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. + +// $Id: fold_impl_body.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#   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 declaration +template< +      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_UNROLLING +template< +      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 size +template< +      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 implementation +template< +      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_SPECIALIZATION + +template< 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_UNROLLING +template< 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 size +template< +      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; +}; + +#else + +template<> 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 diff --git a/3rdParty/Boost/src/boost/mpl/aux_/front_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/front_impl.hpp new file mode 100644 index 0000000..9bfa643 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/front_impl.hpp @@ -0,0 +1,41 @@ + +#ifndef BOOST_MPL_AUX_FRONT_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_FRONT_IMPL_HPP_INCLUDED + +// 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. + +// $Id: front_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/front_fwd.hpp> +#include <boost/mpl/begin_end.hpp> +#include <boost/mpl/deref.hpp> +#include <boost/mpl/aux_/traits_lambda_spec.hpp> + +namespace boost { namespace mpl { + +// default implementation; conrete sequences might override it by  +// specializing either the 'front_impl' or the primary 'front' template + +template< typename Tag > +struct front_impl +{ +    template< typename Sequence > struct apply +    { +        typedef typename begin<Sequence>::type iter_; +        typedef typename deref<iter_>::type type; +    }; +}; + +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1,front_impl) + +}} + +#endif // BOOST_MPL_AUX_FRONT_IMPL_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/has_size.hpp b/3rdParty/Boost/src/boost/mpl/aux_/has_size.hpp new file mode 100644 index 0000000..3f72c44 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/has_size.hpp @@ -0,0 +1,23 @@ + +#ifndef BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED +#define BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-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. + +// $Id: has_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/has_xxx.hpp> + +namespace boost { namespace mpl { namespace aux { +BOOST_MPL_HAS_XXX_TRAIT_DEF(size) +}}} + +#endif // BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/inserter_algorithm.hpp b/3rdParty/Boost/src/boost/mpl/aux_/inserter_algorithm.hpp new file mode 100644 index 0000000..a6f340c --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/inserter_algorithm.hpp @@ -0,0 +1,159 @@ + +#ifndef BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED +#define BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// Copyright David Abrahams 2003-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. + +// $Id: inserter_algorithm.hpp 55648 2009-08-18 05:16:53Z agurtovoy $ +// $Date: 2009-08-18 01:16:53 -0400 (Tue, 18 Aug 2009) $ +// $Revision: 55648 $ + +#include <boost/mpl/back_inserter.hpp> +#include <boost/mpl/front_inserter.hpp> +#include <boost/mpl/push_back.hpp> +#include <boost/mpl/push_front.hpp> +#include <boost/mpl/back_inserter.hpp> +#include <boost/mpl/front_inserter.hpp> +#include <boost/mpl/clear.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/aux_/na.hpp> +#include <boost/mpl/aux_/common_name_wknd.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/preprocessor/params.hpp> +#include <boost/mpl/aux_/preprocessor/default_params.hpp> +#include <boost/mpl/aux_/config/ctps.hpp> + +#include <boost/preprocessor/arithmetic/dec.hpp> + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +#   define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \ +BOOST_MPL_AUX_COMMON_NAME_WKND(name) \ +template< \ +      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \ +    > \ +struct name \ +    : aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \ +{ \ +}; \ +\ +template< \ +      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \ +    > \ +struct name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \ +    : if_< has_push_back< typename clear<P1>::type> \ +        , aux::name##_impl< \ +              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ +            , back_inserter< typename clear<P1>::type > \ +            > \ +        , aux::reverse_##name##_impl< \ +              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ +            , front_inserter< typename clear<P1>::type > \ +            > \ +        >::type \ +{ \ +}; \ +\ +template< \ +      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \ +    > \ +struct reverse_##name \ +    : aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \ +{ \ +}; \ +\ +template< \ +      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \ +    > \ +struct reverse_##name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \ +    : if_< has_push_back<P1> \ +        , aux::reverse_##name##_impl< \ +              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ +            , back_inserter< typename clear<P1>::type > \ +            > \ +        , aux::name##_impl< \ +              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ +            , front_inserter< typename clear<P1>::type > \ +            > \ +        >::type \ +{ \ +}; \ +BOOST_MPL_AUX_NA_SPEC(arity, name) \ +BOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \ +/**/ + +#else + +#   define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \ +BOOST_MPL_AUX_COMMON_NAME_WKND(name) \ +template< \ +      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \ +    > \ +struct def_##name##_impl \ +    : if_< has_push_back<P1> \ +        , aux::name##_impl< \ +              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ +            , back_inserter< typename clear<P1>::type > \ +            > \ +        , aux::reverse_##name##_impl< \ +              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ +            , front_inserter< typename clear<P1>::type > \ +            > \ +        >::type \ +{ \ +}; \ +\ +template< \ +      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \ +    > \ +struct name \ +{ \ +    typedef typename eval_if< \ +          is_na<BOOST_PP_CAT(P, arity)> \ +        , def_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \ +        , aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \ +        >::type type; \ +}; \ +\ +template< \ +      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \ +    > \ +struct def_reverse_##name##_impl \ +    : if_< has_push_back<P1> \ +        , aux::reverse_##name##_impl< \ +              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ +            , back_inserter< typename clear<P1>::type > \ +            > \ +        , aux::name##_impl< \ +              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \ +            , front_inserter< typename clear<P1>::type > \ +            > \ +        >::type \ +{ \ +}; \ +template< \ +      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \ +    > \ +struct reverse_##name \ +{ \ +    typedef typename eval_if< \ +          is_na<BOOST_PP_CAT(P, arity)> \ +        , def_reverse_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \ +        , aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \ +        >::type type; \ +}; \ +BOOST_MPL_AUX_NA_SPEC(arity, name) \ +BOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \ +/**/ + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#endif // BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/iter_apply.hpp b/3rdParty/Boost/src/boost/mpl/aux_/iter_apply.hpp new file mode 100644 index 0000000..fc21f73 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/iter_apply.hpp @@ -0,0 +1,47 @@ + +#ifndef BOOST_MPL_ITER_APPLY_HPP_INCLUDED +#define BOOST_MPL_ITER_APPLY_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-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. + +// $Id: iter_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/apply.hpp> +#include <boost/mpl/deref.hpp> + +namespace boost { namespace mpl { namespace aux { + +template< +      typename F +    , typename Iterator +    > +struct iter_apply1 +    : apply1< F,typename deref<Iterator>::type > +{ +}; + +template< +      typename F +    , typename Iterator1 +    , typename Iterator2 +    > +struct iter_apply2 +    : apply2< +          F +        , typename deref<Iterator1>::type +        , typename deref<Iterator2>::type +        > +{ +}; + +}}} + +#endif // BOOST_MPL_ITER_APPLY_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_if_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_if_impl.hpp new file mode 100644 index 0000000..e7c47ea --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_if_impl.hpp @@ -0,0 +1,210 @@ + +#ifndef BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// 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. + +// $Id: iter_fold_if_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/identity.hpp> +#   include <boost/mpl/next.hpp> +#   include <boost/mpl/if.hpp> +#   include <boost/mpl/apply.hpp> +#   include <boost/mpl/aux_/value_wknd.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ +    && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER iter_fold_if_impl.hpp +#   include <boost/mpl/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/mpl/limits/unrolling.hpp> +#   include <boost/preprocessor/arithmetic/sub.hpp> +#   include <boost/preprocessor/repeat.hpp> +#   include <boost/preprocessor/inc.hpp> +#   include <boost/preprocessor/dec.hpp> +#   include <boost/preprocessor/cat.hpp> + +namespace boost { namespace mpl { namespace aux { + +template< typename Iterator, typename State > +struct iter_fold_if_null_step +{ +    typedef State state; +    typedef Iterator iterator; +}; + +template< bool > +struct iter_fold_if_step_impl +{ +    template< +          typename Iterator +        , typename State +        , typename StateOp +        , typename IteratorOp +        > +    struct result_ +    { +        typedef typename apply2<StateOp,State,Iterator>::type state; +        typedef typename IteratorOp::type iterator; +    }; +}; + +template<> +struct iter_fold_if_step_impl<false> +{ +    template< +          typename Iterator +        , typename State +        , typename StateOp +        , typename IteratorOp +        > +    struct result_ +    { +        typedef State state; +        typedef Iterator iterator; +    }; +}; + +// agurt, 25/jun/02: MSVC 6.5 workaround, had to get rid of inheritance  +// here and in 'iter_fold_if_backward_step', because sometimes it interfered  +// with the "early template instantiation bug" in _really_ ugly ways +template< +      typename Iterator +    , typename State +    , typename ForwardOp +    , typename Predicate +    > +struct iter_fold_if_forward_step +{ +    typedef typename apply2<Predicate,State,Iterator>::type not_last; +    typedef typename iter_fold_if_step_impl< +          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value +        >::template result_< Iterator,State,ForwardOp,mpl::next<Iterator> > impl_; + +    typedef typename impl_::state state; +    typedef typename impl_::iterator iterator; +}; + +template< +      typename Iterator +    , typename State +    , typename BackwardOp +    , typename Predicate +    > +struct iter_fold_if_backward_step +{ +    typedef typename apply2<Predicate,State,Iterator>::type not_last; +    typedef typename iter_fold_if_step_impl< +          BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value +        >::template result_< Iterator,State,BackwardOp,identity<Iterator> > impl_; + +    typedef typename impl_::state state; +    typedef typename impl_::iterator iterator; +}; + + +// local macros, #undef-ined at the end of the header + +#   define AUX_ITER_FOLD_FORWARD_STEP(unused, i, unused2) \ +    typedef iter_fold_if_forward_step< \ +          typename BOOST_PP_CAT(forward_step,i)::iterator \ +        , typename BOOST_PP_CAT(forward_step,i)::state \ +        , ForwardOp \ +        , ForwardPredicate \ +        > BOOST_PP_CAT(forward_step, BOOST_PP_INC(i)); \ +    /**/ + +#   define AUX_ITER_FOLD_BACKWARD_STEP_FUNC(i) \ +    typedef iter_fold_if_backward_step< \ +          typename BOOST_PP_CAT(forward_step,BOOST_PP_DEC(i))::iterator \ +        , typename BOOST_PP_CAT(backward_step,i)::state \ +        , BackwardOp \ +        , BackwardPredicate \ +        > BOOST_PP_CAT(backward_step,BOOST_PP_DEC(i)); \ +    /**/ + +#   define AUX_ITER_FOLD_BACKWARD_STEP(unused, i, unused2) \ +    AUX_ITER_FOLD_BACKWARD_STEP_FUNC( \ +        BOOST_PP_SUB_D(1,BOOST_MPL_LIMIT_UNROLLING,i) \ +        ) \ +    /**/ + +#   define AUX_LAST_FORWARD_STEP \ +    BOOST_PP_CAT(forward_step, BOOST_MPL_LIMIT_UNROLLING) \ +    /**/ + +#   define AUX_LAST_BACKWARD_STEP \ +    BOOST_PP_CAT(backward_step, BOOST_MPL_LIMIT_UNROLLING) \ +    /**/ + +template< +      typename Iterator +    , typename State +    , typename ForwardOp +    , typename ForwardPredicate +    , typename BackwardOp +    , typename BackwardPredicate +    > +struct iter_fold_if_impl +{ + private: +    typedef iter_fold_if_null_step<Iterator,State> forward_step0; +    BOOST_PP_REPEAT( +          BOOST_MPL_LIMIT_UNROLLING +        , AUX_ITER_FOLD_FORWARD_STEP +        , unused +        ) +     +    typedef typename if_< +          typename AUX_LAST_FORWARD_STEP::not_last +        , iter_fold_if_impl< +              typename AUX_LAST_FORWARD_STEP::iterator +            , typename AUX_LAST_FORWARD_STEP::state +            , ForwardOp +            , ForwardPredicate +            , BackwardOp +            , BackwardPredicate +            > +        , iter_fold_if_null_step< +              typename AUX_LAST_FORWARD_STEP::iterator +            , typename AUX_LAST_FORWARD_STEP::state +            > +        >::type AUX_LAST_BACKWARD_STEP; + +    BOOST_PP_REPEAT( +          BOOST_MPL_LIMIT_UNROLLING +        , AUX_ITER_FOLD_BACKWARD_STEP +        , unused +        ) + + public: +    typedef typename backward_step0::state state; +    typedef typename AUX_LAST_BACKWARD_STEP::iterator iterator; +}; + +#   undef AUX_LAST_BACKWARD_STEP +#   undef AUX_LAST_FORWARD_STEP +#   undef AUX_ITER_FOLD_BACKWARD_STEP +#   undef AUX_ITER_FOLD_BACKWARD_STEP_FUNC +#   undef AUX_ITER_FOLD_FORWARD_STEP + +}}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_impl.hpp new file mode 100644 index 0000000..0ea86c3 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_impl.hpp @@ -0,0 +1,42 @@ + +#ifndef BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED + +// 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. + +// $Id: iter_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/next_prior.hpp> +#   include <boost/mpl/apply.hpp> +#   include <boost/mpl/aux_/config/ctps.hpp> +#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +#       include <boost/mpl/if.hpp> +#       include <boost/type_traits/is_same.hpp> +#   endif +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ +    && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER iter_fold_impl.hpp +#   include <boost/mpl/aux_/include_preprocessed.hpp> + +#else + +#   define AUX778076_FOLD_IMPL_OP(iter) iter +#   define AUX778076_FOLD_IMPL_NAME_PREFIX iter_fold +#   include <boost/mpl/aux_/fold_impl_body.hpp> + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/lambda_spec.hpp b/3rdParty/Boost/src/boost/mpl/aux_/lambda_spec.hpp new file mode 100644 index 0000000..f167479 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/lambda_spec.hpp @@ -0,0 +1,49 @@ + +#ifndef BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED +#define BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2007 +// +// 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. + +// $Id: lambda_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/void.hpp> +#include <boost/mpl/lambda_fwd.hpp> +#include <boost/mpl/int_fwd.hpp> +#include <boost/mpl/aux_/preprocessor/params.hpp> +#include <boost/mpl/aux_/lambda_arity_param.hpp> +#include <boost/mpl/aux_/config/lambda.hpp> + +#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT) + +#   define BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(i, name) \ +template< \ +      BOOST_MPL_PP_PARAMS(i, typename T) \ +    , typename Tag \ +    > \ +struct lambda< \ +      name< BOOST_MPL_PP_PARAMS(i, T) > \ +    , Tag \ +    BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<i>) \ +    > \ +{ \ +    typedef false_ is_le; \ +    typedef name< BOOST_MPL_PP_PARAMS(i, T) > result_; \ +    typedef result_ type; \ +}; \ +/**/ + +#else + +#   define BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(i, name) /**/ + +#endif + +#endif // BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/push_back_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/push_back_impl.hpp new file mode 100644 index 0000000..2f839cb --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/push_back_impl.hpp @@ -0,0 +1,70 @@ + +#ifndef BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// 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. + +// $Id: push_back_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $ +// $Date: 2009-08-20 03:50:16 -0400 (Thu, 20 Aug 2009) $ +// $Revision: 55679 $ + +#include <boost/mpl/push_back_fwd.hpp> +#include <boost/mpl/assert.hpp> +#include <boost/mpl/aux_/has_type.hpp> +#include <boost/mpl/aux_/traits_lambda_spec.hpp> +#include <boost/mpl/aux_/config/forwarding.hpp> +#include <boost/mpl/aux_/config/static_constant.hpp> + +#include <boost/type_traits/is_same.hpp> + +namespace boost { namespace mpl { + +struct has_push_back_arg {}; + +// agurt 05/feb/04: no default implementation; the stub definition is needed  +// to enable the default 'has_push_back' implementation below +template< typename Tag > +struct push_back_impl +{ +    template< typename Sequence, typename T > struct apply +    { +        // should be instantiated only in the context of 'has_push_back_impl'; +        // if you've got an assert here, you are requesting a 'push_back'  +        // specialization that doesn't exist. +        BOOST_MPL_ASSERT_MSG( +              ( boost::is_same< T, has_push_back_arg >::value ) +            , REQUESTED_PUSH_BACK_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST +            , ( Sequence ) +            ); +    }; +}; + +template< typename Tag > +struct has_push_back_impl +{ +    template< typename Seq > struct apply +#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) +        : aux::has_type< push_back< Seq, has_push_back_arg > > +    { +#else +    { +        typedef aux::has_type< push_back< Seq, has_push_back_arg > > type; +        BOOST_STATIC_CONSTANT(bool, value =  +              (aux::has_type< push_back< Seq, has_push_back_arg > >::value) +            ); +#endif +    }; +}; + +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_back_impl) +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_back_impl) + +}} + +#endif // BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/push_front_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/push_front_impl.hpp new file mode 100644 index 0000000..6723ea3 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/push_front_impl.hpp @@ -0,0 +1,71 @@ + +#ifndef BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// 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. + +// $Id: push_front_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $ +// $Date: 2009-08-20 03:50:16 -0400 (Thu, 20 Aug 2009) $ +// $Revision: 55679 $ + +#include <boost/mpl/push_front_fwd.hpp> +#include <boost/mpl/assert.hpp> +#include <boost/mpl/aux_/has_type.hpp> +#include <boost/mpl/aux_/traits_lambda_spec.hpp> +#include <boost/mpl/aux_/config/forwarding.hpp> +#include <boost/mpl/aux_/config/static_constant.hpp> + +#include <boost/type_traits/is_same.hpp> + +namespace boost { namespace mpl { + +struct has_push_front_arg {}; + +// agurt 05/feb/04: no default implementation; the stub definition is needed  +// to enable the default 'has_push_front' implementation below + +template< typename Tag > +struct push_front_impl +{ +    template< typename Sequence, typename T > struct apply +    { +        // should be instantiated only in the context of 'has_push_front_impl'; +        // if you've got an assert here, you are requesting a 'push_front'  +        // specialization that doesn't exist. +        BOOST_MPL_ASSERT_MSG( +              ( boost::is_same< T, has_push_front_arg >::value ) +            , REQUESTED_PUSH_FRONT_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST +            , ( Sequence ) +            ); +    }; +}; + +template< typename Tag > +struct has_push_front_impl +{ +    template< typename Seq > struct apply +#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) +        : aux::has_type< push_front< Seq, has_push_front_arg > > +    { +#else +    { +        typedef aux::has_type< push_front< Seq, has_push_front_arg > > type; +        BOOST_STATIC_CONSTANT(bool, value =  +              (aux::has_type< push_front< Seq, has_push_front_arg > >::value) +            ); +#endif +    }; +}; + +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_front_impl) +BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_front_impl) + +}} + +#endif // BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl.hpp new file mode 100644 index 0000000..b8e2308 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl.hpp @@ -0,0 +1,44 @@ + +#ifndef BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED +#define BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED + +// 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. + +// $Id: reverse_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/next_prior.hpp> +#   include <boost/mpl/deref.hpp> +#   include <boost/mpl/apply.hpp> +#   include <boost/mpl/aux_/config/ctps.hpp> +#   if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ +    || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) +#       include <boost/mpl/if.hpp> +#       include <boost/type_traits/is_same.hpp> +#   endif +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ +    && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER reverse_fold_impl.hpp +#   include <boost/mpl/aux_/include_preprocessed.hpp> + +#else + +#   define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type +#   define AUX778076_FOLD_IMPL_NAME_PREFIX reverse_fold +#   include <boost/mpl/aux_/reverse_fold_impl_body.hpp> + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl_body.hpp b/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl_body.hpp new file mode 100644 index 0000000..7bd5618 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl_body.hpp @@ -0,0 +1,412 @@ + +// 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. + +// $Id: reverse_fold_impl_body.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#   include <boost/mpl/limits/unrolling.hpp> +#   include <boost/mpl/aux_/preprocessor/repeat.hpp> +#   include <boost/mpl/aux_/config/ctps.hpp> +#   include <boost/mpl/aux_/nttp_decl.hpp> + +#   include <boost/preprocessor/arithmetic/sub.hpp> +#   include <boost/preprocessor/iterate.hpp> +#   include <boost/preprocessor/dec.hpp> +#   include <boost/preprocessor/inc.hpp> +#   include <boost/preprocessor/cat.hpp> + +// local macros, #undef-ined at the end of the header + +#   define AUX778076_ITER_FOLD_FORWARD_STEP(unused, n_, unused2) \ +    typedef typename apply2< \ +          ForwardOp \ +        , BOOST_PP_CAT(fwd_state,n_) \ +        , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,n_)) \ +        >::type BOOST_PP_CAT(fwd_state,BOOST_PP_INC(n_)); \ +    typedef typename mpl::next<BOOST_PP_CAT(iter,n_)>::type \ +        BOOST_PP_CAT(iter,BOOST_PP_INC(n_)); \ +    /**/ + +#   define AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC(n_) \ +    typedef typename apply2< \ +          BackwardOp \ +        , BOOST_PP_CAT(bkwd_state,n_) \ +        , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,BOOST_PP_DEC(n_))) \ +        >::type BOOST_PP_CAT(bkwd_state,BOOST_PP_DEC(n_)); \ +    /**/ + +#   define AUX778076_ITER_FOLD_BACKWARD_STEP(unused, n_, j) \ +    AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC( \ +          BOOST_PP_SUB_D(1,j,n_) \ +        ) \ +    /**/ + +#   define AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(n_) \ +    typedef typename nested_chunk::state BOOST_PP_CAT(bkwd_state,n_); +    /**/ + +#   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 declaration +template< +      BOOST_MPL_AUX_NTTP_DECL(long, N) +    , typename First +    , typename Last +    , typename State +    , typename BackwardOp +    , typename ForwardOp +    >  +struct AUX778076_FOLD_IMPL_NAME; + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ +    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/reverse_fold_impl_body.hpp>)) +#   include BOOST_PP_ITERATE() + +// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING +template< +      BOOST_MPL_AUX_NTTP_DECL(long, N) +    , typename First +    , typename Last +    , typename State +    , typename BackwardOp +    , typename ForwardOp +    >  +struct AUX778076_FOLD_IMPL_NAME +{ +    typedef First iter0; +    typedef State fwd_state0; + +    BOOST_MPL_PP_REPEAT( +          BOOST_MPL_LIMIT_UNROLLING +        , AUX778076_ITER_FOLD_FORWARD_STEP +        , unused +        ) + +    typedef AUX778076_FOLD_IMPL_NAME< +          ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING ) +        , BOOST_PP_CAT(iter,BOOST_MPL_LIMIT_UNROLLING) +        , Last +        , BOOST_PP_CAT(fwd_state,BOOST_MPL_LIMIT_UNROLLING) +        , BackwardOp +        , ForwardOp +        > nested_chunk; +         +    AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(BOOST_MPL_LIMIT_UNROLLING) + +    BOOST_MPL_PP_REPEAT( +          BOOST_MPL_LIMIT_UNROLLING +        , AUX778076_ITER_FOLD_BACKWARD_STEP +        , BOOST_MPL_LIMIT_UNROLLING +        ) + +    typedef bkwd_state0 state; +    typedef typename nested_chunk::iterator iterator; +}; + +// fallback implementation for sequences of unknown size +template< +      typename First +    , typename Last +    , typename State +    , typename BackwardOp +    , typename ForwardOp +    >  +struct AUX778076_FOLD_IMPL_NAME<-1,First,Last,State,BackwardOp,ForwardOp> +{ +    typedef AUX778076_FOLD_IMPL_NAME< +          -1 +        , typename mpl::next<First>::type +        , Last +        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type +        , BackwardOp +        , ForwardOp +        > nested_step; + +    typedef typename apply2< +          BackwardOp +        , typename nested_step::state +        , AUX778076_FOLD_IMPL_OP(First) +        >::type state; + +    typedef typename nested_step::iterator iterator; +}; + +template< +      typename Last +    , typename State +    , typename BackwardOp +    , typename ForwardOp +    >  +struct AUX778076_FOLD_IMPL_NAME<-1,Last,Last,State,BackwardOp,ForwardOp> +{ +    typedef State state; +    typedef Last iterator; +}; + +#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +template< BOOST_MPL_AUX_NTTP_DECL(long, N) > +struct AUX778076_FOLD_CHUNK_NAME; + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/reverse_fold_impl_body.hpp>)) +#   include BOOST_PP_ITERATE() + +// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING +template< BOOST_MPL_AUX_NTTP_DECL(long, N) >  +struct AUX778076_FOLD_CHUNK_NAME +{ +    template< +          typename First +        , typename Last +        , typename State +        , typename BackwardOp +        , typename ForwardOp +        >  +    struct result_ +    { +        typedef First iter0; +        typedef State fwd_state0; + +        BOOST_MPL_PP_REPEAT( +              BOOST_MPL_LIMIT_UNROLLING +            , AUX778076_ITER_FOLD_FORWARD_STEP +            , unused +            ) + +        typedef AUX778076_FOLD_IMPL_NAME< +              ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING ) +            , BOOST_PP_CAT(iter,BOOST_MPL_LIMIT_UNROLLING) +            , Last +            , BOOST_PP_CAT(fwd_state,BOOST_MPL_LIMIT_UNROLLING) +            , BackwardOp +            , ForwardOp +            > nested_chunk; +             +        AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(BOOST_MPL_LIMIT_UNROLLING) + +        BOOST_MPL_PP_REPEAT( +              BOOST_MPL_LIMIT_UNROLLING +            , AUX778076_ITER_FOLD_BACKWARD_STEP +            , BOOST_MPL_LIMIT_UNROLLING +            ) + +        typedef bkwd_state0 state; +        typedef typename nested_chunk::iterator iterator; +    }; +}; + +// fallback implementation for sequences of unknown size +template< +      typename First +    , typename Last +    , typename State +    , typename BackwardOp +    , 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 BackwardOp +        , 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,BackwardOp,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,int> +    { +        typedef int state; +        typedef int iterator; +    }; +#endif +}; + +template< +      typename First +    , typename Last +    , typename State +    , typename BackwardOp +    , typename ForwardOp +    >  +struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step) +{ +    typedef AUX778076_FOLD_CHUNK_NAME<-1>::template result_< +          typename mpl::next<First>::type +        , Last +        , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type +        , BackwardOp +        , ForwardOp +        > nested_step; + +    typedef typename apply2< +          BackwardOp +        , typename nested_step::state +        , AUX778076_FOLD_IMPL_OP(First) +        >::type state; + +    typedef typename nested_step::iterator iterator; +}; + +template< +      BOOST_MPL_AUX_NTTP_DECL(long, N) +    , typename First +    , typename Last +    , typename State +    , typename BackwardOp +    , typename ForwardOp +    >  +struct AUX778076_FOLD_IMPL_NAME +    : AUX778076_FOLD_CHUNK_NAME<N> +        ::template result_<First,Last,State,BackwardOp,ForwardOp> +{ +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +}}} + +#   undef AUX778076_FIRST_BACKWARD_STATE_TYPEDEF +#   undef AUX778076_ITER_FOLD_BACKWARD_STEP +#   undef AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC +#   undef AUX778076_ITER_FOLD_FORWARD_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) \ +    && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC) + +template< +      typename First +    , typename Last +    , typename State +    , typename BackwardOp +    , typename ForwardOp +    > +struct AUX778076_FOLD_IMPL_NAME<n_,First,Last,State,BackwardOp,ForwardOp> +{ +    typedef First iter0; +    typedef State fwd_state0; + +    BOOST_MPL_PP_REPEAT( +          n_ +        , AUX778076_ITER_FOLD_FORWARD_STEP +        , unused +        ) + +    typedef BOOST_PP_CAT(fwd_state,n_) BOOST_PP_CAT(bkwd_state,n_); + +    BOOST_MPL_PP_REPEAT( +          n_ +        , AUX778076_ITER_FOLD_BACKWARD_STEP +        , n_ +        ) + +    typedef bkwd_state0 state; +    typedef BOOST_PP_CAT(iter,n_) iterator; +}; + +#else + +template<> struct AUX778076_FOLD_CHUNK_NAME<n_> +{ +    template< +          typename First +        , typename Last +        , typename State +        , typename BackwardOp +        , typename ForwardOp +        > +    struct result_ +    { +        typedef First iter0; +        typedef State fwd_state0; + +        BOOST_MPL_PP_REPEAT( +              n_ +            , AUX778076_ITER_FOLD_FORWARD_STEP +            , unused +            ) + +        typedef BOOST_PP_CAT(fwd_state,n_) BOOST_PP_CAT(bkwd_state,n_); + +        BOOST_MPL_PP_REPEAT( +              n_ +            , AUX778076_ITER_FOLD_BACKWARD_STEP +            , n_ +            ) + +        typedef bkwd_state0 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,int> +    { +        typedef int state; +        typedef int iterator; +    }; +#endif +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +#   undef n_ + +#endif // BOOST_PP_IS_ITERATING diff --git a/3rdParty/Boost/src/boost/mpl/back_inserter.hpp b/3rdParty/Boost/src/boost/mpl/back_inserter.hpp new file mode 100644 index 0000000..fa4ede8 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/back_inserter.hpp @@ -0,0 +1,34 @@ + +#ifndef BOOST_MPL_BACK_INSERTER_HPP_INCLUDED +#define BOOST_MPL_BACK_INSERTER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// Copyright David Abrahams 2003-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. + +// $Id: back_inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/push_back.hpp> +#include <boost/mpl/inserter.hpp> + +namespace boost { +namespace mpl { + +template< +      typename Sequence +    > +struct back_inserter +    : inserter< Sequence,push_back<> > +{ +}; + +}} + +#endif // BOOST_MPL_BACK_INSERTER_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/clear.hpp b/3rdParty/Boost/src/boost/mpl/clear.hpp new file mode 100644 index 0000000..c27f4b3 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/clear.hpp @@ -0,0 +1,39 @@ + +#ifndef BOOST_MPL_CLEAR_HPP_INCLUDED +#define BOOST_MPL_CLEAR_HPP_INCLUDED + +// 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. + +// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/clear_fwd.hpp> +#include <boost/mpl/aux_/clear_impl.hpp> +#include <boost/mpl/sequence_tag.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    > +struct clear +    : clear_impl< typename sequence_tag<Sequence>::type > +        ::template apply< Sequence > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,clear,(Sequence)) +}; + +BOOST_MPL_AUX_NA_SPEC(1, clear) + +}} + +#endif // BOOST_MPL_CLEAR_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/distance.hpp b/3rdParty/Boost/src/boost/mpl/distance.hpp new file mode 100644 index 0000000..9a180ab --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/distance.hpp @@ -0,0 +1,78 @@ + +#ifndef BOOST_MPL_DISTANCE_HPP_INCLUDED +#define BOOST_MPL_DISTANCE_HPP_INCLUDED + +// 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. + +// $Id: distance.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/distance_fwd.hpp> +#include <boost/mpl/iter_fold.hpp> +#include <boost/mpl/iterator_range.hpp> +#include <boost/mpl/long.hpp> +#include <boost/mpl/next.hpp> +#include <boost/mpl/tag.hpp> +#include <boost/mpl/apply_wrap.hpp> +#include <boost/mpl/aux_/msvc_eti_base.hpp> +#include <boost/mpl/aux_/value_wknd.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/config/forwarding.hpp> +#include <boost/mpl/aux_/config/static_constant.hpp> + + +namespace boost { namespace mpl { + +// default implementation for forward/bidirectional iterators +template< typename Tag > struct distance_impl +{ +    template< typename First, typename Last > struct apply +#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) +        : aux::msvc_eti_base< typename iter_fold< +              iterator_range<First,Last> +            , mpl::long_<0> +            , next<> +            >::type > +    { +#else +    { +        typedef typename iter_fold< +              iterator_range<First,Last> +            , mpl::long_<0> +            , next<> +            >::type type; +         +        BOOST_STATIC_CONSTANT(long, value = +              (iter_fold< +                  iterator_range<First,Last> +                , mpl::long_<0> +                , next<> +                >::type::value) +            ); +#endif +    }; +}; + +template< +      typename BOOST_MPL_AUX_NA_PARAM(First) +    , typename BOOST_MPL_AUX_NA_PARAM(Last) +    > +struct distance +    : distance_impl< typename tag<First>::type > +        ::template apply<First, Last> +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, distance, (First, Last)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, distance) + +}} + +#endif // BOOST_MPL_DISTANCE_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/empty.hpp b/3rdParty/Boost/src/boost/mpl/empty.hpp new file mode 100644 index 0000000..adb3c76 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/empty.hpp @@ -0,0 +1,39 @@ + +#ifndef BOOST_MPL_EMPTY_HPP_INCLUDED +#define BOOST_MPL_EMPTY_HPP_INCLUDED + +// 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. + +// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/empty_fwd.hpp> +#include <boost/mpl/sequence_tag.hpp> +#include <boost/mpl/aux_/empty_impl.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    > +struct empty +    : empty_impl< typename sequence_tag<Sequence>::type > +        ::template apply< Sequence > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,empty,(Sequence)) +}; + +BOOST_MPL_AUX_NA_SPEC(1, empty) + +}} + +#endif // BOOST_MPL_EMPTY_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/find_if.hpp b/3rdParty/Boost/src/boost/mpl/find_if.hpp new file mode 100644 index 0000000..b1d41b7 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/find_if.hpp @@ -0,0 +1,50 @@ + +#ifndef BOOST_MPL_FIND_IF_HPP_INCLUDED +#define BOOST_MPL_FIND_IF_HPP_INCLUDED + +// 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. + +// $Id: find_if.hpp 49274 2008-10-11 07:22:05Z agurtovoy $ +// $Date: 2008-10-11 03:22:05 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49274 $ + +#include <boost/mpl/aux_/find_if_pred.hpp> +#include <boost/mpl/arg.hpp> +#include <boost/mpl/iter_fold_if.hpp> +#include <boost/mpl/aux_/common_name_wknd.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +BOOST_MPL_AUX_COMMON_NAME_WKND(find_if) + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    , typename BOOST_MPL_AUX_NA_PARAM(Predicate) +    > +struct find_if +{ +    typedef typename iter_fold_if< +          Sequence +        , void +        , mpl::arg<1> // ignore +        , protect< aux::find_if_pred<Predicate> > +        >::type result_; + +    typedef typename second<result_>::type type; + +    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,find_if,(Sequence,Predicate)) +}; + +BOOST_MPL_AUX_NA_SPEC(2,find_if) + +}} + +#endif // BOOST_MPL_FIND_IF_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/fold.hpp b/3rdParty/Boost/src/boost/mpl/fold.hpp new file mode 100644 index 0000000..9645681 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/fold.hpp @@ -0,0 +1,48 @@ + +#ifndef BOOST_MPL_FOLD_HPP_INCLUDED +#define BOOST_MPL_FOLD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// 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. + +// $Id: fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/begin_end.hpp> +#include <boost/mpl/O1_size.hpp> +#include <boost/mpl/aux_/fold_impl.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    , typename BOOST_MPL_AUX_NA_PARAM(State) +    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp) +    > +struct fold +{ +    typedef typename aux::fold_impl< +          ::boost::mpl::O1_size<Sequence>::value +        , typename begin<Sequence>::type +        , typename end<Sequence>::type +        , State +        , ForwardOp +        >::state type; + +    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,fold,(Sequence,State,ForwardOp)) +}; + +BOOST_MPL_AUX_NA_SPEC(3, fold) + +}} + +#endif // BOOST_MPL_FOLD_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/front.hpp b/3rdParty/Boost/src/boost/mpl/front.hpp new file mode 100644 index 0000000..3ad64e4 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/front.hpp @@ -0,0 +1,39 @@ + +#ifndef BOOST_MPL_FRONT_HPP_INCLUDED +#define BOOST_MPL_FRONT_HPP_INCLUDED + +// 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. + +// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/front_fwd.hpp> +#include <boost/mpl/aux_/front_impl.hpp> +#include <boost/mpl/sequence_tag.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    > +struct front +    : front_impl< typename sequence_tag<Sequence>::type > +        ::template apply< Sequence > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,front,(Sequence)) +}; + +BOOST_MPL_AUX_NA_SPEC(1, front) + +}} + +#endif // BOOST_MPL_FRONT_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/front_inserter.hpp b/3rdParty/Boost/src/boost/mpl/front_inserter.hpp new file mode 100644 index 0000000..ee754cf --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/front_inserter.hpp @@ -0,0 +1,33 @@ + +#ifndef BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED +#define BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// Copyright David Abrahams 2003-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. + +// $Id: front_inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/push_front.hpp> +#include <boost/mpl/inserter.hpp> + +namespace boost { namespace mpl { + +template< +      typename Sequence +    > +struct front_inserter +    : inserter< Sequence,push_front<> > +{ +}; + +}} + +#endif // BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/inserter.hpp b/3rdParty/Boost/src/boost/mpl/inserter.hpp new file mode 100644 index 0000000..8e2c676 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/inserter.hpp @@ -0,0 +1,32 @@ + +#ifndef BOOST_MPL_INSERTER_HPP_INCLUDED +#define BOOST_MPL_INSERTER_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// Copyright David Abrahams 2003-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. + +// $Id: inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { + +template< +      typename Sequence +    , typename Operation +    > +struct inserter +{ +    typedef Sequence    state; +    typedef Operation   operation; +}; + +}} + +#endif // BOOST_MPL_INSERTER_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/is_sequence.hpp b/3rdParty/Boost/src/boost/mpl/is_sequence.hpp new file mode 100644 index 0000000..0c1f67b --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/is_sequence.hpp @@ -0,0 +1,112 @@ + +#ifndef BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED +#define BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2002-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. + +// $Id: is_sequence.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/not.hpp> +#include <boost/mpl/and.hpp> +#include <boost/mpl/begin_end.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/sequence_tag_fwd.hpp> +#include <boost/mpl/identity.hpp> +#include <boost/mpl/void.hpp> +#include <boost/mpl/aux_/has_tag.hpp> +#include <boost/mpl/aux_/has_begin.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> +#include <boost/mpl/aux_/config/eti.hpp> +#include <boost/mpl/aux_/config/msvc.hpp> +#include <boost/mpl/aux_/config/workaround.hpp> +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +#   include <boost/mpl/aux_/msvc_is_class.hpp> +#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300) +#   include <boost/type_traits/is_class.hpp> +#endif + +#include <boost/type_traits/is_same.hpp> + +namespace boost { namespace mpl { + +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + +namespace aux { + +// agurt, 11/jun/03:  +// MSVC 6.5/7.0 fails if 'has_begin' is instantiated on a class type that has a +// 'begin' member that doesn't name a type; e.g. 'has_begin< std::vector<int> >' +// would fail; requiring 'T' to have _both_ 'tag' and 'begin' members workarounds +// the issue for most real-world cases +template< typename T > struct is_sequence_impl +    : and_< +          identity< aux::has_tag<T> > +        , identity< aux::has_begin<T> > +        > +{ +}; + +} // namespace aux +         +template< +      typename BOOST_MPL_AUX_NA_PARAM(T) +    > +struct is_sequence +    : if_< +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +          aux::msvc_is_class<T>  +#else +          boost::is_class<T>  +#endif +        , aux::is_sequence_impl<T> +        , bool_<false> +        >::type +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T)) +}; + +#elif defined(BOOST_MPL_CFG_NO_HAS_XXX) + +template< +      typename BOOST_MPL_AUX_NA_PARAM(T) +    > +struct is_sequence +    : bool_<false> +{ +}; + +#else + +template< +      typename BOOST_MPL_AUX_NA_PARAM(T) +    > +struct is_sequence +    : not_< is_same< typename begin<T>::type, void_ > > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T)) +}; + +#endif // BOOST_MSVC + +#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) +template<> struct is_sequence<int> +    : bool_<false> +{ +}; +#endif + +BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, is_sequence) + +}} + +#endif // BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/iter_fold.hpp b/3rdParty/Boost/src/boost/mpl/iter_fold.hpp new file mode 100644 index 0000000..cb24707 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/iter_fold.hpp @@ -0,0 +1,49 @@ + +#ifndef BOOST_MPL_ITER_FOLD_HPP_INCLUDED +#define BOOST_MPL_ITER_FOLD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// 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. + +// $Id: iter_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/begin_end.hpp> +#include <boost/mpl/O1_size.hpp> +#include <boost/mpl/lambda.hpp> +#include <boost/mpl/aux_/iter_fold_impl.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    , typename BOOST_MPL_AUX_NA_PARAM(State) +    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp) +    > +struct iter_fold +{ +    typedef typename aux::iter_fold_impl< +          ::boost::mpl::O1_size<Sequence>::value +        , typename begin<Sequence>::type +        , typename end<Sequence>::type +        , State +        , typename lambda<ForwardOp>::type +        >::state type; + +    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,iter_fold,(Sequence,State,ForwardOp)) +}; + +BOOST_MPL_AUX_NA_SPEC(3, iter_fold) + +}} + +#endif // BOOST_MPL_ITER_FOLD_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/iter_fold_if.hpp b/3rdParty/Boost/src/boost/mpl/iter_fold_if.hpp new file mode 100644 index 0000000..da80564 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/iter_fold_if.hpp @@ -0,0 +1,117 @@ + +#ifndef BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED +#define BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2003-2004 +// Copyright Eric Friedman 2003 +// +// 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. + +// $Id: iter_fold_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/begin_end.hpp> +#include <boost/mpl/logical.hpp> +#include <boost/mpl/always.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/pair.hpp> +#include <boost/mpl/apply.hpp> +#include <boost/mpl/aux_/iter_fold_if_impl.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> +#include <boost/mpl/aux_/config/forwarding.hpp> +#include <boost/mpl/aux_/config/workaround.hpp> + +#include <boost/type_traits/is_same.hpp> + +namespace boost { namespace mpl { + +namespace aux { + +template< typename Predicate, typename LastIterator > +struct iter_fold_if_pred +{ +    template< typename State, typename Iterator > struct apply +#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) +        : and_< +              not_< is_same<Iterator,LastIterator> > +            , apply1<Predicate,Iterator> +            > +    { +#else +    { +        typedef and_< +              not_< is_same<Iterator,LastIterator> > +            , apply1<Predicate,Iterator> +            > type; +#endif +    }; +}; + +} // namespace aux + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    , typename BOOST_MPL_AUX_NA_PARAM(State) +    , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp) +    , typename BOOST_MPL_AUX_NA_PARAM(ForwardPredicate) +    , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp) +    , typename BOOST_MPL_AUX_NA_PARAM(BackwardPredicate) +    > +struct iter_fold_if +{ + +    typedef typename begin<Sequence>::type first_; +    typedef typename end<Sequence>::type last_; + +    typedef typename eval_if< +          is_na<BackwardPredicate> +        , if_< is_na<BackwardOp>, always<false_>, always<true_> > +        , identity<BackwardPredicate> +        >::type backward_pred_; + +// cwpro8 doesn't like 'cut-off' type here (use typedef instead) +#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) && !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) +    struct result_ : +#else +    typedef +#endif +        aux::iter_fold_if_impl< +          first_ +        , State +        , ForwardOp +        , protect< aux::iter_fold_if_pred< ForwardPredicate,last_ > > +        , BackwardOp +        , backward_pred_ +        > +#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) && !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) +    { }; +#else +    result_; +#endif + +public: + +    typedef pair< +          typename result_::state +        , typename result_::iterator +        > type; + +    BOOST_MPL_AUX_LAMBDA_SUPPORT( +          6 +        , iter_fold_if +        , (Sequence,State,ForwardOp,ForwardPredicate,BackwardOp,BackwardPredicate) +        ) +}; + +BOOST_MPL_AUX_NA_SPEC(6, iter_fold_if) + +}} + +#endif // BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/iterator_category.hpp b/3rdParty/Boost/src/boost/mpl/iterator_category.hpp new file mode 100644 index 0000000..084c32f --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/iterator_category.hpp @@ -0,0 +1,35 @@ + +#ifndef BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED +#define BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED + +// 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. + +// $Id: iterator_category.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost {  namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Iterator) +    > +struct iterator_category +{ +    typedef typename Iterator::category type; +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,iterator_category,(Iterator)) +}; + +BOOST_MPL_AUX_NA_SPEC(1, iterator_category) + +}} + +#endif // BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/iterator_range.hpp b/3rdParty/Boost/src/boost/mpl/iterator_range.hpp new file mode 100644 index 0000000..d3fd43b --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/iterator_range.hpp @@ -0,0 +1,42 @@ + +#ifndef BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED +#define BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-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. + +// $Id: iterator_range.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +struct iterator_range_tag; + +template< +      typename BOOST_MPL_AUX_NA_PARAM(First) +    , typename BOOST_MPL_AUX_NA_PARAM(Last) +    > +struct iterator_range +{ +    typedef iterator_range_tag tag; +    typedef iterator_range type; +    typedef First begin; +    typedef Last end; + +    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,iterator_range,(First,Last)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, iterator_range) + +}} + +#endif // BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/limits/list.hpp b/3rdParty/Boost/src/boost/mpl/limits/list.hpp new file mode 100644 index 0000000..ee9c7aa --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/limits/list.hpp @@ -0,0 +1,21 @@ + +#ifndef BOOST_MPL_LIMITS_LIST_HPP_INCLUDED +#define BOOST_MPL_LIMITS_LIST_HPP_INCLUDED + +// 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. + +// $Id: list.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_LIMIT_LIST_SIZE) +#   define BOOST_MPL_LIMIT_LIST_SIZE 20 +#endif + +#endif // BOOST_MPL_LIMITS_LIST_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list.hpp b/3rdParty/Boost/src/boost/mpl/list.hpp new file mode 100644 index 0000000..838b8f4 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list.hpp @@ -0,0 +1,57 @@ + +#ifndef BOOST_MPL_LIST_HPP_INCLUDED +#define BOOST_MPL_LIST_HPP_INCLUDED + +// 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. + +// $Id: list.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/limits/list.hpp> +#   include <boost/mpl/aux_/na.hpp> +#   include <boost/mpl/aux_/config/preprocessor.hpp> + +#   include <boost/preprocessor/inc.hpp> +#   include <boost/preprocessor/cat.hpp> +#   include <boost/preprocessor/stringize.hpp> + +#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING) +#   define AUX778076_LIST_HEADER \ +    BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE).hpp \ +    /**/ +#else +#   define AUX778076_LIST_HEADER \ +    BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE)##.hpp \ +    /**/ +#endif + +#   include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_LIST_HEADER) +#   undef AUX778076_LIST_HEADER +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ +    && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list.hpp +#   include <boost/mpl/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/mpl/limits/list.hpp> + +#   define AUX778076_SEQUENCE_NAME list +#   define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_LIST_SIZE +#   include <boost/mpl/aux_/sequence_wrapper.hpp> + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS +#endif // BOOST_MPL_LIST_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/O1_size.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/O1_size.hpp new file mode 100644 index 0000000..6ef2cf7 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/O1_size.hpp @@ -0,0 +1,33 @@ + +#ifndef BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED + +// 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. + +// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/O1_size_fwd.hpp> +#include <boost/mpl/list/aux_/tag.hpp> + +namespace boost { namespace mpl { + +template<> +struct O1_size_impl< aux::list_tag > +{ +    template< typename List > struct apply +        : List::size +    { +    }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/begin_end.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/begin_end.hpp new file mode 100644 index 0000000..dab60f3 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/begin_end.hpp @@ -0,0 +1,44 @@ + +#ifndef BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED + +// 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. + +// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/begin_end_fwd.hpp> +#include <boost/mpl/list/aux_/iterator.hpp> +#include <boost/mpl/list/aux_/tag.hpp> +#include <boost/mpl/list/aux_/item.hpp> + +namespace boost { namespace mpl { + +template<> +struct begin_impl< aux::list_tag > +{ +    template< typename List > struct apply +    { +        typedef l_iter<typename List::type> type; +    }; +}; + +template<> +struct end_impl< aux::list_tag > +{ +    template< typename > struct apply +    { +        typedef l_iter<l_end> type; +    }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/clear.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/clear.hpp new file mode 100644 index 0000000..247a4de --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/clear.hpp @@ -0,0 +1,34 @@ + +#ifndef BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED + +// 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. + +// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/clear_fwd.hpp> +#include <boost/mpl/list/aux_/item.hpp> +#include <boost/mpl/list/aux_/tag.hpp> + +namespace boost { namespace mpl { + +template<> +struct clear_impl< aux::list_tag > +{ +    template< typename List > struct apply +    { +        typedef l_end type; +    }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/empty.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/empty.hpp new file mode 100644 index 0000000..6ab60cf --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/empty.hpp @@ -0,0 +1,34 @@ + +#ifndef BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED + +// 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. + +// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/empty_fwd.hpp> +#include <boost/mpl/not.hpp> +#include <boost/mpl/list/aux_/tag.hpp> + +namespace boost { namespace mpl { + +template<> +struct empty_impl< aux::list_tag > +{ +    template< typename List > struct apply +        : not_<typename List::size> +    { +    }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/front.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/front.hpp new file mode 100644 index 0000000..8defa99 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/front.hpp @@ -0,0 +1,33 @@ + +#ifndef BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED + +// 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. + +// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/front_fwd.hpp> +#include <boost/mpl/list/aux_/tag.hpp> + +namespace boost { namespace mpl { + +template<> +struct front_impl< aux::list_tag > +{ +    template< typename List > struct apply +    { +        typedef typename List::item type; +    }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/include_preprocessed.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/include_preprocessed.hpp new file mode 100644 index 0000000..431b51f --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/include_preprocessed.hpp @@ -0,0 +1,35 @@ + +// Copyright Aleksey Gurtovoy 2001-2006 +// +// 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. + +// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION! + +#include <boost/mpl/aux_/config/workaround.hpp> + +#include <boost/preprocessor/cat.hpp> +#include <boost/preprocessor/stringize.hpp> + +#   define AUX778076_HEADER \ +    aux_/preprocessed/plain/BOOST_MPL_PREPROCESSED_HEADER \ +/**/ + +#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700)) +#   define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER) +#   include AUX778076_INCLUDE_STRING +#   undef AUX778076_INCLUDE_STRING +#else +#   include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER) +#endif + +#   undef AUX778076_HEADER + +#undef BOOST_MPL_PREPROCESSED_HEADER diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/item.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/item.hpp new file mode 100644 index 0000000..37ddff7 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/item.hpp @@ -0,0 +1,55 @@ + +#ifndef BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED + +// 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. + +// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/long.hpp> +#include <boost/mpl/list/aux_/tag.hpp> +#include <boost/mpl/aux_/config/msvc.hpp> +#include <boost/mpl/aux_/config/workaround.hpp> + +namespace boost { namespace mpl { + +template< +      typename Size +    , typename T +    , typename Next +    > +struct l_item +{ +// agurt, 17/jul/03: to facilitate the deficient 'is_sequence' implementation  +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +    typedef int begin; +#endif +    typedef aux::list_tag tag; +    typedef l_item type; + +    typedef Size size; +    typedef T item; +    typedef Next next; +}; + +struct l_end +{ +#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +    typedef int begin; +#endif +    typedef aux::list_tag tag; +    typedef l_end type; +    typedef long_<0> size; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/iterator.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/iterator.hpp new file mode 100644 index 0000000..b94126c --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/iterator.hpp @@ -0,0 +1,76 @@ + +#ifndef BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED + +// 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. + +// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/iterator_tags.hpp> +#include <boost/mpl/next_prior.hpp> +#include <boost/mpl/deref.hpp> +#include <boost/mpl/list/aux_/item.hpp> +#include <boost/mpl/aux_/na.hpp> +#include <boost/mpl/aux_/lambda_spec.hpp> +#include <boost/mpl/aux_/config/ctps.hpp> + +namespace boost { namespace mpl { + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template< typename Node > +struct l_iter +{ +    typedef aux::l_iter_tag tag; +    typedef forward_iterator_tag category; +}; + +template< typename Node > +struct deref< l_iter<Node> > +{ +    typedef typename Node::item type; +}; + +template< typename Node > +struct next< l_iter<Node> > +{ +    typedef l_iter< typename Node::next > type; +}; + +#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +template< typename Node > +struct l_iter +{ +    typedef aux::l_iter_tag tag; +    typedef forward_iterator_tag category; +    typedef typename Node::item type; +    typedef l_iter< typename mpl::next<Node>::type > next; +}; + +#endif + + +template<> struct l_iter<l_end> +{ +    typedef aux::l_iter_tag tag; +    typedef forward_iterator_tag category; +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +    typedef na type; +    typedef l_iter next; +#endif +}; + +BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, l_iter) + +}} + +#endif // BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/numbered.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/numbered.hpp new file mode 100644 index 0000000..de8d404 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/numbered.hpp @@ -0,0 +1,68 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// Copyright Peter Dimov 2000-2002 +// 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. + +// $Id: numbered.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if defined(BOOST_PP_IS_ITERATING) + +#include <boost/preprocessor/enum_params.hpp> +#include <boost/preprocessor/enum_shifted_params.hpp> +#include <boost/preprocessor/dec.hpp> +#include <boost/preprocessor/cat.hpp> + +#define i BOOST_PP_FRAME_ITERATION(1) + +#if i == 1 + +template< +      BOOST_PP_ENUM_PARAMS(i, typename T) +    > +struct list1 +    : l_item< +          long_<1> +        , T0 +        , l_end +        > +{ +    typedef list1 type; +}; + +#else + +#   define MPL_AUX_LIST_TAIL(list, i, T) \ +    BOOST_PP_CAT(list,BOOST_PP_DEC(i))< \ +      BOOST_PP_ENUM_SHIFTED_PARAMS(i, T) \ +    > \ +    /**/ +     +template< +      BOOST_PP_ENUM_PARAMS(i, typename T) +    > +struct BOOST_PP_CAT(list,i) +    : l_item< +          long_<i> +        , T0 +        , MPL_AUX_LIST_TAIL(list,i,T) +        > +{ +    typedef BOOST_PP_CAT(list,i) type; +}; + +#   undef MPL_AUX_LIST_TAIL + +#endif // i == 1 + +#undef i + +#endif // BOOST_PP_IS_ITERATING diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/numbered_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/numbered_c.hpp new file mode 100644 index 0000000..f304382 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/numbered_c.hpp @@ -0,0 +1,71 @@ + +// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION + +// 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. + +// $Id: numbered_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if defined(BOOST_PP_IS_ITERATING) + +#include <boost/preprocessor/enum_params.hpp> +#include <boost/preprocessor/enum_shifted_params.hpp> +#include <boost/preprocessor/dec.hpp> +#include <boost/preprocessor/cat.hpp> + +#define i BOOST_PP_FRAME_ITERATION(1) + +#if i == 1 + +template< +      typename T +    , BOOST_PP_ENUM_PARAMS(i, T C) +    > +struct list1_c +    : l_item< +          long_<1> +        , integral_c<T,C0> +        , l_end +        > +{ +    typedef list1_c type; +    typedef T value_type; +}; + +#else + +#   define MPL_AUX_LIST_C_TAIL(list, i, C) \ +    BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_PP_DEC(i)),_c)<T, \ +      BOOST_PP_ENUM_SHIFTED_PARAMS(i, C) \ +    > \ +    /**/ +     +template< +      typename T +    , BOOST_PP_ENUM_PARAMS(i, T C) +    > +struct BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c) +    : l_item< +          long_<i> +        , integral_c<T,C0> +        , MPL_AUX_LIST_C_TAIL(list,i,C) +        > +{ +    typedef BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c) type; +    typedef T value_type; +}; + +#   undef MPL_AUX_LIST_C_TAIL + +#endif // i == 1 + +#undef i + +#endif // BOOST_PP_IS_ITERATING diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/pop_front.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/pop_front.hpp new file mode 100644 index 0000000..e053391 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/pop_front.hpp @@ -0,0 +1,34 @@ + +#ifndef BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED + +// 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. + +// $Id: pop_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/pop_front_fwd.hpp> +#include <boost/mpl/next_prior.hpp> +#include <boost/mpl/list/aux_/tag.hpp> + +namespace boost { namespace mpl { + +template<> +struct pop_front_impl< aux::list_tag > +{ +    template< typename List > struct apply +    { +        typedef typename mpl::next<List>::type type; +    }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10.hpp new file mode 100644 index 0000000..99368d2 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10.hpp @@ -0,0 +1,149 @@ + +// 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) +// + +// Preprocessed version of "boost/mpl/list/list10.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< +      typename T0 +    > +struct list1 +    : l_item< +          long_<1> +        , T0 +        , l_end +        > +{ +    typedef list1 type; +}; + +template< +      typename T0, typename T1 +    > +struct list2 +    : l_item< +          long_<2> +        , T0 +        , list1<T1> +        > +{ +    typedef list2 type; +}; + +template< +      typename T0, typename T1, typename T2 +    > +struct list3 +    : l_item< +          long_<3> +        , T0 +        , list2< T1,T2 > +        > +{ +    typedef list3 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3 +    > +struct list4 +    : l_item< +          long_<4> +        , T0 +        , list3< T1,T2,T3 > +        > +{ +    typedef list4 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    > +struct list5 +    : l_item< +          long_<5> +        , T0 +        , list4< T1,T2,T3,T4 > +        > +{ +    typedef list5 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5 +    > +struct list6 +    : l_item< +          long_<6> +        , T0 +        , list5< T1,T2,T3,T4,T5 > +        > +{ +    typedef list6 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6 +    > +struct list7 +    : l_item< +          long_<7> +        , T0 +        , list6< T1,T2,T3,T4,T5,T6 > +        > +{ +    typedef list7 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7 +    > +struct list8 +    : l_item< +          long_<8> +        , T0 +        , list7< T1,T2,T3,T4,T5,T6,T7 > +        > +{ +    typedef list8 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8 +    > +struct list9 +    : l_item< +          long_<9> +        , T0 +        , list8< T1,T2,T3,T4,T5,T6,T7,T8 > +        > +{ +    typedef list9 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    > +struct list10 +    : l_item< +          long_<10> +        , T0 +        , list9< T1,T2,T3,T4,T5,T6,T7,T8,T9 > +        > +{ +    typedef list10 type; +}; + +}} diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp new file mode 100644 index 0000000..7133d71 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp @@ -0,0 +1,164 @@ + +// 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) +// + +// Preprocessed version of "boost/mpl/list/list10_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< +      typename T +    , T C0 +    > +struct list1_c +    : l_item< +          long_<1> +        , integral_c< T,C0 > +        , l_end +        > +{ +    typedef list1_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1 +    > +struct list2_c +    : l_item< +          long_<2> +        , integral_c< T,C0 > +        , list1_c< T,C1 > +        > +{ +    typedef list2_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2 +    > +struct list3_c +    : l_item< +          long_<3> +        , integral_c< T,C0 > +        , list2_c< T,C1,C2 > +        > +{ +    typedef list3_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3 +    > +struct list4_c +    : l_item< +          long_<4> +        , integral_c< T,C0 > +        , list3_c< T,C1,C2,C3 > +        > +{ +    typedef list4_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4 +    > +struct list5_c +    : l_item< +          long_<5> +        , integral_c< T,C0 > +        , list4_c< T,C1,C2,C3,C4 > +        > +{ +    typedef list5_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5 +    > +struct list6_c +    : l_item< +          long_<6> +        , integral_c< T,C0 > +        , list5_c< T,C1,C2,C3,C4,C5 > +        > +{ +    typedef list6_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6 +    > +struct list7_c +    : l_item< +          long_<7> +        , integral_c< T,C0 > +        , list6_c< T,C1,C2,C3,C4,C5,C6 > +        > +{ +    typedef list7_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7 +    > +struct list8_c +    : l_item< +          long_<8> +        , integral_c< T,C0 > +        , list7_c< T,C1,C2,C3,C4,C5,C6,C7 > +        > +{ +    typedef list8_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8 +    > +struct list9_c +    : l_item< +          long_<9> +        , integral_c< T,C0 > +        , list8_c< T,C1,C2,C3,C4,C5,C6,C7,C8 > +        > +{ +    typedef list9_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9 +    > +struct list10_c +    : l_item< +          long_<10> +        , integral_c< T,C0 > +        , list9_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9 > +        > +{ +    typedef list10_c type; +    typedef T value_type; +}; + +}} diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20.hpp new file mode 100644 index 0000000..750e495 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20.hpp @@ -0,0 +1,169 @@ + +// 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) +// + +// Preprocessed version of "boost/mpl/list/list20.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10 +    > +struct list11 +    : l_item< +          long_<11> +        , T0 +        , list10< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 > +        > +{ +    typedef list11 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11 +    > +struct list12 +    : l_item< +          long_<12> +        , T0 +        , list11< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 > +        > +{ +    typedef list12 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12 +    > +struct list13 +    : l_item< +          long_<13> +        , T0 +        , list12< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 > +        > +{ +    typedef list13 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13 +    > +struct list14 +    : l_item< +          long_<14> +        , T0 +        , list13< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 > +        > +{ +    typedef list14 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    > +struct list15 +    : l_item< +          long_<15> +        , T0 +        , list14< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 > +        > +{ +    typedef list15 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15 +    > +struct list16 +    : l_item< +          long_<16> +        , T0 +        , list15< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 > +        > +{ +    typedef list16 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16 +    > +struct list17 +    : l_item< +          long_<17> +        , T0 +        , list16< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 > +        > +{ +    typedef list17 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17 +    > +struct list18 +    : l_item< +          long_<18> +        , T0 +        , list17< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 > +        > +{ +    typedef list18 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18 +    > +struct list19 +    : l_item< +          long_<19> +        , T0 +        , list18< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 > +        > +{ +    typedef list19 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    > +struct list20 +    : l_item< +          long_<20> +        , T0 +        , list19< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 > +        > +{ +    typedef list20 type; +}; + +}} diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp new file mode 100644 index 0000000..7f15acf --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp @@ -0,0 +1,173 @@ + +// 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) +// + +// Preprocessed version of "boost/mpl/list/list20_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    > +struct list11_c +    : l_item< +          long_<11> +        , integral_c< T,C0 > +        , list10_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 > +        > +{ +    typedef list11_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11 +    > +struct list12_c +    : l_item< +          long_<12> +        , integral_c< T,C0 > +        , list11_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 > +        > +{ +    typedef list12_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12 +    > +struct list13_c +    : l_item< +          long_<13> +        , integral_c< T,C0 > +        , list12_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 > +        > +{ +    typedef list13_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13 +    > +struct list14_c +    : l_item< +          long_<14> +        , integral_c< T,C0 > +        , list13_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 > +        > +{ +    typedef list14_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14 +    > +struct list15_c +    : l_item< +          long_<15> +        , integral_c< T,C0 > +        , list14_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 > +        > +{ +    typedef list15_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15 +    > +struct list16_c +    : l_item< +          long_<16> +        , integral_c< T,C0 > +        , list15_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 > +        > +{ +    typedef list16_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16 +    > +struct list17_c +    : l_item< +          long_<17> +        , integral_c< T,C0 > +        , list16_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 > +        > +{ +    typedef list17_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17 +    > +struct list18_c +    : l_item< +          long_<18> +        , integral_c< T,C0 > +        , list17_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 > +        > +{ +    typedef list18_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18 +    > +struct list19_c +    : l_item< +          long_<19> +        , integral_c< T,C0 > +        , list18_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 > +        > +{ +    typedef list19_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19 +    > +struct list20_c +    : l_item< +          long_<20> +        , integral_c< T,C0 > +        , list19_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 > +        > +{ +    typedef list20_c type; +    typedef T value_type; +}; + +}} diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30.hpp new file mode 100644 index 0000000..5459101 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30.hpp @@ -0,0 +1,189 @@ + +// 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) +// + +// Preprocessed version of "boost/mpl/list/list30.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20 +    > +struct list21 +    : l_item< +          long_<21> +        , T0 +        , list20< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20 > +        > +{ +    typedef list21 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21 +    > +struct list22 +    : l_item< +          long_<22> +        , T0 +        , list21< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21 > +        > +{ +    typedef list22 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22 +    > +struct list23 +    : l_item< +          long_<23> +        , T0 +        , list22< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22 > +        > +{ +    typedef list23 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23 +    > +struct list24 +    : l_item< +          long_<24> +        , T0 +        , list23< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23 > +        > +{ +    typedef list24 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    > +struct list25 +    : l_item< +          long_<25> +        , T0 +        , list24< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24 > +        > +{ +    typedef list25 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25 +    > +struct list26 +    : l_item< +          long_<26> +        , T0 +        , list25< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25 > +        > +{ +    typedef list26 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26 +    > +struct list27 +    : l_item< +          long_<27> +        , T0 +        , list26< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26 > +        > +{ +    typedef list27 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27 +    > +struct list28 +    : l_item< +          long_<28> +        , T0 +        , list27< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27 > +        > +{ +    typedef list28 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28 +    > +struct list29 +    : l_item< +          long_<29> +        , T0 +        , list28< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28 > +        > +{ +    typedef list29 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    > +struct list30 +    : l_item< +          long_<30> +        , T0 +        , list29< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29 > +        > +{ +    typedef list30 type; +}; + +}} diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp new file mode 100644 index 0000000..5393d79 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp @@ -0,0 +1,183 @@ + +// 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) +// + +// Preprocessed version of "boost/mpl/list/list30_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    > +struct list21_c +    : l_item< +          long_<21> +        , integral_c< T,C0 > +        , list20_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20 > +        > +{ +    typedef list21_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21 +    > +struct list22_c +    : l_item< +          long_<22> +        , integral_c< T,C0 > +        , list21_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 > +        > +{ +    typedef list22_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22 +    > +struct list23_c +    : l_item< +          long_<23> +        , integral_c< T,C0 > +        , list22_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22 > +        > +{ +    typedef list23_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23 +    > +struct list24_c +    : l_item< +          long_<24> +        , integral_c< T,C0 > +        , list23_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23 > +        > +{ +    typedef list24_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24 +    > +struct list25_c +    : l_item< +          long_<25> +        , integral_c< T,C0 > +        , list24_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24 > +        > +{ +    typedef list25_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25 +    > +struct list26_c +    : l_item< +          long_<26> +        , integral_c< T,C0 > +        , list25_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25 > +        > +{ +    typedef list26_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26 +    > +struct list27_c +    : l_item< +          long_<27> +        , integral_c< T,C0 > +        , list26_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26 > +        > +{ +    typedef list27_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27 +    > +struct list28_c +    : l_item< +          long_<28> +        , integral_c< T,C0 > +        , list27_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27 > +        > +{ +    typedef list28_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28 +    > +struct list29_c +    : l_item< +          long_<29> +        , integral_c< T,C0 > +        , list28_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28 > +        > +{ +    typedef list29_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29 +    > +struct list30_c +    : l_item< +          long_<30> +        , integral_c< T,C0 > +        , list29_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29 > +        > +{ +    typedef list30_c type; +    typedef T value_type; +}; + +}} diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40.hpp new file mode 100644 index 0000000..68c6761 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40.hpp @@ -0,0 +1,209 @@ + +// 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) +// + +// Preprocessed version of "boost/mpl/list/list40.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30 +    > +struct list31 +    : l_item< +          long_<31> +        , T0 +        , list30< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30 > +        > +{ +    typedef list31 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31 +    > +struct list32 +    : l_item< +          long_<32> +        , T0 +        , list31< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31 > +        > +{ +    typedef list32 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32 +    > +struct list33 +    : l_item< +          long_<33> +        , T0 +        , list32< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32 > +        > +{ +    typedef list33 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33 +    > +struct list34 +    : l_item< +          long_<34> +        , T0 +        , list33< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33 > +        > +{ +    typedef list34 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    > +struct list35 +    : l_item< +          long_<35> +        , T0 +        , list34< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34 > +        > +{ +    typedef list35 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35 +    > +struct list36 +    : l_item< +          long_<36> +        , T0 +        , list35< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35 > +        > +{ +    typedef list36 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36 +    > +struct list37 +    : l_item< +          long_<37> +        , T0 +        , list36< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36 > +        > +{ +    typedef list37 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37 +    > +struct list38 +    : l_item< +          long_<38> +        , T0 +        , list37< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37 > +        > +{ +    typedef list38 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38 +    > +struct list39 +    : l_item< +          long_<39> +        , T0 +        , list38< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38 > +        > +{ +    typedef list39 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    > +struct list40 +    : l_item< +          long_<40> +        , T0 +        , list39< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39 > +        > +{ +    typedef list40 type; +}; + +}} diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp new file mode 100644 index 0000000..0c51ba2 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp @@ -0,0 +1,193 @@ + +// 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) +// + +// Preprocessed version of "boost/mpl/list/list40_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    > +struct list31_c +    : l_item< +          long_<31> +        , integral_c< T,C0 > +        , list30_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30 > +        > +{ +    typedef list31_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31 +    > +struct list32_c +    : l_item< +          long_<32> +        , integral_c< T,C0 > +        , list31_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31 > +        > +{ +    typedef list32_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32 +    > +struct list33_c +    : l_item< +          long_<33> +        , integral_c< T,C0 > +        , list32_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32 > +        > +{ +    typedef list33_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33 +    > +struct list34_c +    : l_item< +          long_<34> +        , integral_c< T,C0 > +        , list33_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33 > +        > +{ +    typedef list34_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34 +    > +struct list35_c +    : l_item< +          long_<35> +        , integral_c< T,C0 > +        , list34_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34 > +        > +{ +    typedef list35_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35 +    > +struct list36_c +    : l_item< +          long_<36> +        , integral_c< T,C0 > +        , list35_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35 > +        > +{ +    typedef list36_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36 +    > +struct list37_c +    : l_item< +          long_<37> +        , integral_c< T,C0 > +        , list36_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36 > +        > +{ +    typedef list37_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37 +    > +struct list38_c +    : l_item< +          long_<38> +        , integral_c< T,C0 > +        , list37_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37 > +        > +{ +    typedef list38_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38 +    > +struct list39_c +    : l_item< +          long_<39> +        , integral_c< T,C0 > +        , list38_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38 > +        > +{ +    typedef list39_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39 +    > +struct list40_c +    : l_item< +          long_<40> +        , integral_c< T,C0 > +        , list39_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39 > +        > +{ +    typedef list40_c type; +    typedef T value_type; +}; + +}} diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50.hpp new file mode 100644 index 0000000..4cc22da --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50.hpp @@ -0,0 +1,229 @@ + +// 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) +// + +// Preprocessed version of "boost/mpl/list/list50.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    , typename T40 +    > +struct list41 +    : l_item< +          long_<41> +        , T0 +        , list40< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40 > +        > +{ +    typedef list41 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    , typename T40, typename T41 +    > +struct list42 +    : l_item< +          long_<42> +        , T0 +        , list41< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41 > +        > +{ +    typedef list42 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    , typename T40, typename T41, typename T42 +    > +struct list43 +    : l_item< +          long_<43> +        , T0 +        , list42< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42 > +        > +{ +    typedef list43 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    , typename T40, typename T41, typename T42, typename T43 +    > +struct list44 +    : l_item< +          long_<44> +        , T0 +        , list43< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43 > +        > +{ +    typedef list44 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    , typename T40, typename T41, typename T42, typename T43, typename T44 +    > +struct list45 +    : l_item< +          long_<45> +        , T0 +        , list44< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44 > +        > +{ +    typedef list45 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    , typename T40, typename T41, typename T42, typename T43, typename T44 +    , typename T45 +    > +struct list46 +    : l_item< +          long_<46> +        , T0 +        , list45< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45 > +        > +{ +    typedef list46 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    , typename T40, typename T41, typename T42, typename T43, typename T44 +    , typename T45, typename T46 +    > +struct list47 +    : l_item< +          long_<47> +        , T0 +        , list46< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46 > +        > +{ +    typedef list47 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    , typename T40, typename T41, typename T42, typename T43, typename T44 +    , typename T45, typename T46, typename T47 +    > +struct list48 +    : l_item< +          long_<48> +        , T0 +        , list47< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47 > +        > +{ +    typedef list48 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    , typename T40, typename T41, typename T42, typename T43, typename T44 +    , typename T45, typename T46, typename T47, typename T48 +    > +struct list49 +    : l_item< +          long_<49> +        , T0 +        , list48< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48 > +        > +{ +    typedef list49 type; +}; + +template< +      typename T0, typename T1, typename T2, typename T3, typename T4 +    , typename T5, typename T6, typename T7, typename T8, typename T9 +    , typename T10, typename T11, typename T12, typename T13, typename T14 +    , typename T15, typename T16, typename T17, typename T18, typename T19 +    , typename T20, typename T21, typename T22, typename T23, typename T24 +    , typename T25, typename T26, typename T27, typename T28, typename T29 +    , typename T30, typename T31, typename T32, typename T33, typename T34 +    , typename T35, typename T36, typename T37, typename T38, typename T39 +    , typename T40, typename T41, typename T42, typename T43, typename T44 +    , typename T45, typename T46, typename T47, typename T48, typename T49 +    > +struct list50 +    : l_item< +          long_<50> +        , T0 +        , list49< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48,T49 > +        > +{ +    typedef list50 type; +}; + +}} diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp new file mode 100644 index 0000000..28c061d --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp @@ -0,0 +1,203 @@ + +// 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) +// + +// Preprocessed version of "boost/mpl/list/list50_c.hpp" header +// -- DO NOT modify by hand! + +namespace boost { namespace mpl { + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40 +    > +struct list41_c +    : l_item< +          long_<41> +        , integral_c< T,C0 > +        , list40_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40 > +        > +{ +    typedef list41_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40 +    , T C41 +    > +struct list42_c +    : l_item< +          long_<42> +        , integral_c< T,C0 > +        , list41_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41 > +        > +{ +    typedef list42_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40 +    , T C41, T C42 +    > +struct list43_c +    : l_item< +          long_<43> +        , integral_c< T,C0 > +        , list42_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42 > +        > +{ +    typedef list43_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40 +    , T C41, T C42, T C43 +    > +struct list44_c +    : l_item< +          long_<44> +        , integral_c< T,C0 > +        , list43_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43 > +        > +{ +    typedef list44_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40 +    , T C41, T C42, T C43, T C44 +    > +struct list45_c +    : l_item< +          long_<45> +        , integral_c< T,C0 > +        , list44_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44 > +        > +{ +    typedef list45_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40 +    , T C41, T C42, T C43, T C44, T C45 +    > +struct list46_c +    : l_item< +          long_<46> +        , integral_c< T,C0 > +        , list45_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45 > +        > +{ +    typedef list46_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40 +    , T C41, T C42, T C43, T C44, T C45, T C46 +    > +struct list47_c +    : l_item< +          long_<47> +        , integral_c< T,C0 > +        , list46_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46 > +        > +{ +    typedef list47_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40 +    , T C41, T C42, T C43, T C44, T C45, T C46, T C47 +    > +struct list48_c +    : l_item< +          long_<48> +        , integral_c< T,C0 > +        , list47_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47 > +        > +{ +    typedef list48_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40 +    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48 +    > +struct list49_c +    : l_item< +          long_<49> +        , integral_c< T,C0 > +        , list48_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48 > +        > +{ +    typedef list49_c type; +    typedef T value_type; +}; + +template< +      typename T +    , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10 +    , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20 +    , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30 +    , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40 +    , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49 +    > +struct list50_c +    : l_item< +          long_<50> +        , integral_c< T,C0 > +        , list49_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48,C49 > +        > +{ +    typedef list50_c type; +    typedef T value_type; +}; + +}} diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/push_back.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/push_back.hpp new file mode 100644 index 0000000..6adb7db --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/push_back.hpp @@ -0,0 +1,36 @@ + +#ifndef BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED + +// 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. + +// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/push_back_fwd.hpp> +#include <boost/mpl/bool.hpp> +#include <boost/mpl/list/aux_/tag.hpp> + +namespace boost { namespace mpl { + +template< typename Tag > struct has_push_back_impl; + +template<> +struct has_push_back_impl< aux::list_tag > +{ +    template< typename Seq > struct apply +        : false_ +    { +    }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/push_front.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/push_front.hpp new file mode 100644 index 0000000..a601fea --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/push_front.hpp @@ -0,0 +1,39 @@ + +#ifndef BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED + +// 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. + +// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/push_front_fwd.hpp> +#include <boost/mpl/next.hpp> +#include <boost/mpl/list/aux_/item.hpp> +#include <boost/mpl/list/aux_/tag.hpp> + +namespace boost { namespace mpl { + +template<> +struct push_front_impl< aux::list_tag > +{ +    template< typename List, typename T > struct apply +    { +        typedef l_item< +              typename next<typename List::size>::type +            , T +            , typename List::type +            > type; +    }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/size.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/size.hpp new file mode 100644 index 0000000..4ecbab8 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/size.hpp @@ -0,0 +1,33 @@ + +#ifndef BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED + +// 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. + +// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/size_fwd.hpp> +#include <boost/mpl/list/aux_/tag.hpp> + +namespace boost { namespace mpl { + +template<> +struct size_impl< aux::list_tag > +{ +    template< typename List > struct apply +        : List::size +    { +    }; +}; + +}} + +#endif // BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/tag.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/tag.hpp new file mode 100644 index 0000000..d44bfe4 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/aux_/tag.hpp @@ -0,0 +1,24 @@ + +#ifndef BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED +#define BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED + +// 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. + +// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +namespace boost { namespace mpl { namespace aux { + +struct list_tag; +struct l_iter_tag; + +}}} + +#endif // BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list0.hpp b/3rdParty/Boost/src/boost/mpl/list/list0.hpp new file mode 100644 index 0000000..58e93cf --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list0.hpp @@ -0,0 +1,42 @@ + +#ifndef BOOST_MPL_LIST_LIST0_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST0_HPP_INCLUDED + +// 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. + +// $Id: list0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/long.hpp> +#include <boost/mpl/aux_/na.hpp> +#include <boost/mpl/list/aux_/push_front.hpp> +#include <boost/mpl/list/aux_/pop_front.hpp> +#include <boost/mpl/list/aux_/push_back.hpp> +#include <boost/mpl/list/aux_/front.hpp> +#include <boost/mpl/list/aux_/clear.hpp> +#include <boost/mpl/list/aux_/O1_size.hpp> +#include <boost/mpl/list/aux_/size.hpp> +#include <boost/mpl/list/aux_/empty.hpp> +#include <boost/mpl/list/aux_/begin_end.hpp> +#include <boost/mpl/list/aux_/item.hpp> + +namespace boost { namespace mpl { + +template< typename Dummy = na > struct list0; + +template<> struct list0<na> +    : l_end +{ +    typedef l_end type; +}; + +}} + +#endif // BOOST_MPL_LIST_LIST0_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list0_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list0_c.hpp new file mode 100644 index 0000000..ed9bca5 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list0_c.hpp @@ -0,0 +1,31 @@ + +#ifndef BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED + +// 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. + +// $Id: list0_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/list/list0.hpp> +#include <boost/mpl/integral_c.hpp> + +namespace boost { namespace mpl { + +template< typename T > struct list0_c +    : l_end +{ +    typedef l_end type; +    typedef T value_type; +}; + +}} + +#endif // BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list10.hpp b/3rdParty/Boost/src/boost/mpl/list/list10.hpp new file mode 100644 index 0000000..4a4ee19 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list10.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST10_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST10_HPP_INCLUDED + +// 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. + +// $Id: list10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/list/list0.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ +    && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list10.hpp +#   include <boost/mpl/list/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/preprocessor/iterate.hpp> + +namespace boost { namespace mpl { + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(1, 10, <boost/mpl/list/aux_/numbered.hpp>)) +#   include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST10_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list10_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list10_c.hpp new file mode 100644 index 0000000..e05ef87 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list10_c.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED + +// 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. + +// $Id: list10_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/list/list0_c.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list10_c.hpp +#   include <boost/mpl/list/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/preprocessor/iterate.hpp> + +namespace boost { namespace mpl { + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(1, 10, <boost/mpl/list/aux_/numbered_c.hpp>)) +#   include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list20.hpp b/3rdParty/Boost/src/boost/mpl/list/list20.hpp new file mode 100644 index 0000000..9321192 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list20.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST20_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST20_HPP_INCLUDED + +// 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. + +// $Id: list20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/list/list10.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list20.hpp +#   include <boost/mpl/list/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/preprocessor/iterate.hpp> + +namespace boost { namespace mpl { + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(11, 20, <boost/mpl/list/aux_/numbered.hpp>)) +#   include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST20_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list20_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list20_c.hpp new file mode 100644 index 0000000..bc807e6 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list20_c.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED + +// 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. + +// $Id: list20_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/list/list10_c.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list20_c.hpp +#   include <boost/mpl/list/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/preprocessor/iterate.hpp> + +namespace boost { namespace mpl { + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(11, 20, <boost/mpl/list/aux_/numbered_c.hpp>)) +#   include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list30.hpp b/3rdParty/Boost/src/boost/mpl/list/list30.hpp new file mode 100644 index 0000000..f736f8c --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list30.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST30_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST30_HPP_INCLUDED + +// 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. + +// $Id: list30.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/list/list20.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list30.hpp +#   include <boost/mpl/list/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/preprocessor/iterate.hpp> + +namespace boost { namespace mpl { + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(21, 30, <boost/mpl/list/aux_/numbered.hpp>)) +#   include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST30_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list30_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list30_c.hpp new file mode 100644 index 0000000..e682086 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list30_c.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED + +// 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. + +// $Id: list30_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/list/list20_c.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list30_c.hpp +#   include <boost/mpl/list/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/preprocessor/iterate.hpp> + +namespace boost { namespace mpl { + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(21, 30, <boost/mpl/list/aux_/numbered_c.hpp>)) +#   include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list40.hpp b/3rdParty/Boost/src/boost/mpl/list/list40.hpp new file mode 100644 index 0000000..8560d8f --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list40.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST40_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST40_HPP_INCLUDED + +// 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. + +// $Id: list40.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/list/list30.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list40.hpp +#   include <boost/mpl/list/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/preprocessor/iterate.hpp> + +namespace boost { namespace mpl { + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(31, 40, <boost/mpl/list/aux_/numbered.hpp>)) +#   include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST40_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list40_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list40_c.hpp new file mode 100644 index 0000000..5c5bfdf --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list40_c.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED + +// 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. + +// $Id: list40_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/list/list30_c.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list40_c.hpp +#   include <boost/mpl/list/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/preprocessor/iterate.hpp> + +namespace boost { namespace mpl { + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(31, 40, <boost/mpl/list/aux_/numbered_c.hpp>)) +#   include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list50.hpp b/3rdParty/Boost/src/boost/mpl/list/list50.hpp new file mode 100644 index 0000000..dcaf18e --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list50.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST50_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST50_HPP_INCLUDED + +// 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. + +// $Id: list50.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/list/list40.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list50.hpp +#   include <boost/mpl/list/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/preprocessor/iterate.hpp> + +namespace boost { namespace mpl { + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(41, 50, <boost/mpl/list/aux_/numbered.hpp>)) +#   include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST50_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/list/list50_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list50_c.hpp new file mode 100644 index 0000000..0f38e07 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/list/list50_c.hpp @@ -0,0 +1,43 @@ + +#ifndef BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED +#define BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED + +// 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. + +// $Id: list50_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#if !defined(BOOST_MPL_PREPROCESSING_MODE) +#   include <boost/mpl/list/list40_c.hpp> +#endif + +#include <boost/mpl/aux_/config/use_preprocessed.hpp> + +#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \ + && !defined(BOOST_MPL_PREPROCESSING_MODE) + +#   define BOOST_MPL_PREPROCESSED_HEADER list50_c.hpp +#   include <boost/mpl/list/aux_/include_preprocessed.hpp> + +#else + +#   include <boost/preprocessor/iterate.hpp> + +namespace boost { namespace mpl { + +#   define BOOST_PP_ITERATION_PARAMS_1 \ +    (3,(41, 50, <boost/mpl/list/aux_/numbered_c.hpp>)) +#   include BOOST_PP_ITERATE() + +}} + +#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS + +#endif // BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/max_element.hpp b/3rdParty/Boost/src/boost/mpl/max_element.hpp new file mode 100644 index 0000000..6d16dfc --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/max_element.hpp @@ -0,0 +1,72 @@ + +#ifndef BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED +#define BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED + +// 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. + +// $Id: max_element.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/less.hpp> +#include <boost/mpl/iter_fold.hpp> +#include <boost/mpl/begin_end.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/deref.hpp> +#include <boost/mpl/apply.hpp> +#include <boost/mpl/aux_/common_name_wknd.hpp> +#include <boost/mpl/aux_/na_spec.hpp> + +namespace boost { namespace mpl { + +BOOST_MPL_AUX_COMMON_NAME_WKND(max_element) + +namespace aux { + +template< typename Predicate > +struct select_max +{ +    template< typename OldIterator, typename Iterator > +    struct apply +    { +        typedef typename apply2< +              Predicate +            , typename deref<OldIterator>::type +            , typename deref<Iterator>::type +            >::type condition_; + +        typedef typename if_< +              condition_ +            , Iterator +            , OldIterator +            >::type type; +    }; +}; + +} // namespace aux  + + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    , typename Predicate = less<_,_> +    > +struct max_element +    : iter_fold< +          Sequence +        , typename begin<Sequence>::type +        , protect< aux::select_max<Predicate> > +        > +{ +}; + +BOOST_MPL_AUX_NA_SPEC(1, max_element) + +}} + +#endif // BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/min_max.hpp b/3rdParty/Boost/src/boost/mpl/min_max.hpp new file mode 100644 index 0000000..944b776 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/min_max.hpp @@ -0,0 +1,46 @@ + +#ifndef BOOST_MPL_MIN_MAX_HPP_INCLUDED +#define BOOST_MPL_MIN_MAX_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2008 +// +// 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. + +// $Id: min_max.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/less.hpp> +#include <boost/mpl/if.hpp> +#include <boost/mpl/aux_/na_spec.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(N1) +    , typename BOOST_MPL_AUX_NA_PARAM(N2) +    > +struct min +    : if_< less<N1,N2>,N1,N2 > +{ +}; + +template< +      typename BOOST_MPL_AUX_NA_PARAM(N1) +    , typename BOOST_MPL_AUX_NA_PARAM(N2) +    > +struct max +    : if_< less<N1,N2>,N2,N1 > +{ +}; + +BOOST_MPL_AUX_NA_SPEC(2, min) +BOOST_MPL_AUX_NA_SPEC(2, max) + +}} + +#endif // BOOST_MPL_MIN_MAX_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/pair.hpp b/3rdParty/Boost/src/boost/mpl/pair.hpp new file mode 100644 index 0000000..b3fb026 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/pair.hpp @@ -0,0 +1,70 @@ + +#ifndef BOOST_MPL_PAIR_HPP_INCLUDED +#define BOOST_MPL_PAIR_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-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. + +// $Id: pair.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/aux_/msvc_eti_base.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> +#include <boost/mpl/aux_/config/eti.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(T1) +    , typename BOOST_MPL_AUX_NA_PARAM(T2) +    > +struct pair +{ +    typedef pair type; +    typedef T1 first; +    typedef T2 second; + +    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,pair,(T1,T2)) +}; + +template< +      typename BOOST_MPL_AUX_NA_PARAM(P) +    > +struct first +{ +#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) +    typedef typename P::first type; +#else +    typedef typename aux::msvc_eti_base<P>::first type; +#endif +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,first,(P)) +}; + +template< +      typename BOOST_MPL_AUX_NA_PARAM(P) +    > +struct second +{ +#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG) +    typedef typename P::second type; +#else +    typedef typename aux::msvc_eti_base<P>::second type; +#endif +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,second,(P)) +}; + + +BOOST_MPL_AUX_NA_SPEC_NO_ETI(2, pair) +BOOST_MPL_AUX_NA_SPEC(1, first) +BOOST_MPL_AUX_NA_SPEC(1, second) + +}} + +#endif // BOOST_MPL_PAIR_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/pair_view.hpp b/3rdParty/Boost/src/boost/mpl/pair_view.hpp new file mode 100644 index 0000000..43430f5 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/pair_view.hpp @@ -0,0 +1,169 @@ + +#ifndef BOOST_MPL_PAIR_VIEW_HPP_INCLUDED +#define BOOST_MPL_PAIR_VIEW_HPP_INCLUDED + +// Copyright David Abrahams 2003-2004 +// Copyright Aleksey Gurtovoy 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. + +// $Id: pair_view.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/begin_end.hpp> +#include <boost/mpl/iterator_category.hpp> +#include <boost/mpl/advance.hpp> +#include <boost/mpl/distance.hpp> +#include <boost/mpl/next_prior.hpp> +#include <boost/mpl/deref.hpp> +#include <boost/mpl/min_max.hpp> +#include <boost/mpl/pair.hpp> +#include <boost/mpl/iterator_tags.hpp> +#include <boost/mpl/aux_/config/ctps.hpp> +#include <boost/mpl/aux_/na_spec.hpp> + +namespace boost { namespace mpl { + +namespace aux { +struct pair_iter_tag; + +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template< typename Iter1, typename Iter2, typename Category > +struct pair_iter; + +template< typename Category > struct prior_pair_iter +{ +    template< typename Iter1, typename Iter2 > struct apply +    { +        typedef typename mpl::prior<Iter1>::type i1_; +        typedef typename mpl::prior<Iter2>::type i2_; +        typedef pair_iter<i1_,i2_,Category> type; +    }; +}; + +template<> struct prior_pair_iter<forward_iterator_tag> +{ +    template< typename Iter1, typename Iter2 > struct apply +    { +        typedef pair_iter<Iter1,Iter2,forward_iterator_tag> type; +    }; +}; + +#endif +} + +template<  +      typename Iter1 +    , typename Iter2 +    , typename Category +    > +struct pair_iter +{ +    typedef aux::pair_iter_tag tag; +    typedef Category category; +    typedef Iter1 first; +    typedef Iter2 second; +     +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +    typedef pair<  +          typename deref<Iter1>::type +        , typename deref<Iter2>::type +        > type; + +    typedef typename mpl::next<Iter1>::type i1_; +    typedef typename mpl::next<Iter2>::type i2_; +    typedef pair_iter<i1_,i2_,Category> next; +     +    typedef apply_wrap2< aux::prior_pair_iter<Category>,Iter1,Iter2 >::type prior; +#endif +}; + + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template< typename Iter1, typename Iter2, typename C > +struct deref< pair_iter<Iter1,Iter2,C> > +{ +    typedef pair<  +          typename deref<Iter1>::type +        , typename deref<Iter2>::type +        > type; +}; + +template< typename Iter1, typename Iter2, typename C > +struct next< pair_iter<Iter1,Iter2,C> > +{ +    typedef typename mpl::next<Iter1>::type i1_; +    typedef typename mpl::next<Iter2>::type i2_; +    typedef pair_iter<i1_,i2_,C> type; +}; + +template< typename Iter1, typename Iter2, typename C > +struct prior< pair_iter<Iter1,Iter2,C> > +{ +    typedef typename mpl::prior<Iter1>::type i1_; +    typedef typename mpl::prior<Iter2>::type i2_; +    typedef pair_iter<i1_,i2_,C> type; +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + + +template<> struct advance_impl<aux::pair_iter_tag> +{ +    template< typename Iter, typename D > struct apply +    { +        typedef typename mpl::advance< typename Iter::first,D >::type i1_; +        typedef typename mpl::advance< typename Iter::second,D >::type i2_; +        typedef pair_iter<i1_,i2_,typename Iter::category> type; +    }; +}; + +template<> struct distance_impl<aux::pair_iter_tag> +{ +    template< typename Iter1, typename Iter2 > struct apply +    { +        // agurt, 10/nov/04: MSVC 6.5 ICE-s on forwarding +        typedef typename mpl::distance< +              typename first<Iter1>::type +            , typename first<Iter2>::type +            >::type type; +    }; +}; + + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence1) +    , typename BOOST_MPL_AUX_NA_PARAM(Sequence2) +    > +struct pair_view +{ +    typedef nested_begin_end_tag tag; + +    typedef typename begin<Sequence1>::type iter1_; +    typedef typename begin<Sequence2>::type iter2_; +    typedef typename min< +          typename iterator_category<iter1_>::type +        , typename iterator_category<iter2_>::type +        >::type category_; +     +    typedef pair_iter<iter1_,iter2_,category_> begin; +     +    typedef pair_iter< +          typename end<Sequence1>::type +        , typename end<Sequence2>::type +        , category_ +        > end; +}; + +BOOST_MPL_AUX_NA_SPEC(2, pair_view) + +}} + +#endif // BOOST_MPL_PAIR_VIEW_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/push_back.hpp b/3rdParty/Boost/src/boost/mpl/push_back.hpp new file mode 100644 index 0000000..96389a3 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/push_back.hpp @@ -0,0 +1,53 @@ + +#ifndef BOOST_MPL_PUSH_BACK_HPP_INCLUDED +#define BOOST_MPL_PUSH_BACK_HPP_INCLUDED + +// 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. + +// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/push_back_fwd.hpp> +#include <boost/mpl/aux_/push_back_impl.hpp> +#include <boost/mpl/sequence_tag.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    , typename BOOST_MPL_AUX_NA_PARAM(T) +    > +struct push_back +    : push_back_impl< typename sequence_tag<Sequence>::type > +        ::template apply< Sequence,T > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,push_back,(Sequence,T)) +}; + + +template<  +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    > +struct has_push_back +    : has_push_back_impl< typename sequence_tag<Sequence>::type > +        ::template apply< Sequence > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_push_back,(Sequence)) +}; + + +BOOST_MPL_AUX_NA_SPEC(2, push_back) +BOOST_MPL_AUX_NA_SPEC(1, has_push_back) + +}} + +#endif // BOOST_MPL_PUSH_BACK_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/push_front.hpp b/3rdParty/Boost/src/boost/mpl/push_front.hpp new file mode 100644 index 0000000..3c4283c --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/push_front.hpp @@ -0,0 +1,52 @@ + +#ifndef BOOST_MPL_PUSH_FRONT_HPP_INCLUDED +#define BOOST_MPL_PUSH_FRONT_HPP_INCLUDED + +// 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. + +// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/push_front_fwd.hpp> +#include <boost/mpl/aux_/push_front_impl.hpp> +#include <boost/mpl/sequence_tag.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    , typename BOOST_MPL_AUX_NA_PARAM(T) +    > +struct push_front +    : push_front_impl< typename sequence_tag<Sequence>::type > +        ::template apply< Sequence,T > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(2,push_front,(Sequence,T)) +}; + + +template<  +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    > +struct has_push_front +    : has_push_front_impl< typename sequence_tag<Sequence>::type > +        ::template apply< Sequence > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_push_front,(Sequence)) +}; + +BOOST_MPL_AUX_NA_SPEC(2, push_front) +BOOST_MPL_AUX_NA_SPEC(1, has_push_front) + +}} + +#endif // BOOST_MPL_PUSH_FRONT_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/reverse_fold.hpp b/3rdParty/Boost/src/boost/mpl/reverse_fold.hpp new file mode 100644 index 0000000..79b6ec7 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/reverse_fold.hpp @@ -0,0 +1,50 @@ + +#ifndef BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED +#define BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2001-2004 +// Copyright David Abrahams 2001-2002 +// +// 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. + +// $Id: reverse_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/begin_end.hpp> +#include <boost/mpl/O1_size.hpp> +#include <boost/mpl/arg.hpp> +#include <boost/mpl/aux_/reverse_fold_impl.hpp> +#include <boost/mpl/aux_/na_spec.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(Sequence) +    , typename BOOST_MPL_AUX_NA_PARAM(State) +    , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp) +    , typename ForwardOp = arg<1> +    > +struct reverse_fold +{ +    typedef typename aux::reverse_fold_impl< +          ::boost::mpl::O1_size<Sequence>::value +        , typename begin<Sequence>::type +        , typename end<Sequence>::type +        , State +        , BackwardOp +        , ForwardOp +        >::state type; + +    BOOST_MPL_AUX_LAMBDA_SUPPORT(3,reverse_fold,(Sequence,State,BackwardOp)) +}; + +BOOST_MPL_AUX_NA_SPEC(3, reverse_fold) + +}} + +#endif // BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/same_as.hpp b/3rdParty/Boost/src/boost/mpl/same_as.hpp new file mode 100644 index 0000000..e95d55f --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/same_as.hpp @@ -0,0 +1,55 @@ + +#ifndef BOOST_MPL_SAME_AS_HPP_INCLUDED +#define BOOST_MPL_SAME_AS_HPP_INCLUDED + +// 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. + +// $Id: same_as.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/not.hpp> +#include <boost/mpl/aux_/lambda_spec.hpp> +#include <boost/mpl/aux_/config/forwarding.hpp> + +#include <boost/type_traits/is_same.hpp> + +namespace boost { namespace mpl { + +template< typename T1 > +struct same_as +{ +    template< typename T2 > struct apply +#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) +        : is_same<T1,T2> +    { +#else +    { +        typedef typename is_same<T1,T2>::type type; +#endif +    }; +}; + +template< typename T1 > +struct not_same_as +{ +    template< typename T2 > struct apply +#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING) +        : not_< is_same<T1,T2> > +    { +#else +    { +        typedef typename not_< is_same<T1,T2> >::type type; +#endif +    }; +}; + +}} + +#endif // BOOST_MPL_SAME_AS_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/sizeof.hpp b/3rdParty/Boost/src/boost/mpl/sizeof.hpp new file mode 100644 index 0000000..8ad9d24 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/sizeof.hpp @@ -0,0 +1,36 @@ + +#ifndef BOOST_MPL_SIZEOF_HPP_INCLUDED +#define BOOST_MPL_SIZEOF_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2003 +// +// 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. + +// $Id: sizeof.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/size_t.hpp> +#include <boost/mpl/aux_/na_spec.hpp> +#include <boost/mpl/aux_/lambda_support.hpp> + +namespace boost { namespace mpl { + +template< +      typename BOOST_MPL_AUX_NA_PARAM(T) +    > +struct sizeof_ +    : mpl::size_t< sizeof(T) > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,sizeof_,(T)) +}; + +BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, sizeof_) + +}} + +#endif // BOOST_MPL_SIZEOF_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/mpl/transform.hpp b/3rdParty/Boost/src/boost/mpl/transform.hpp new file mode 100644 index 0000000..f367207 --- /dev/null +++ b/3rdParty/Boost/src/boost/mpl/transform.hpp @@ -0,0 +1,145 @@ + +#ifndef BOOST_MPL_TRANSFORM_HPP_INCLUDED +#define BOOST_MPL_TRANSFORM_HPP_INCLUDED + +// Copyright Aleksey Gurtovoy 2000-2004 +// Copyright David Abrahams 2003-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. + +// $Id: transform.hpp 49267 2008-10-11 06:19:02Z agurtovoy $ +// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $ +// $Revision: 49267 $ + +#include <boost/mpl/fold.hpp> +#include <boost/mpl/reverse_fold.hpp> +#include <boost/mpl/pair_view.hpp> +#include <boost/mpl/is_sequence.hpp> +#include <boost/mpl/eval_if.hpp> +#include <boost/mpl/lambda.hpp> +#include <boost/mpl/bind.hpp> +#include <boost/mpl/or.hpp> +#include <boost/mpl/not.hpp> +#include <boost/mpl/aux_/na.hpp> +#include <boost/mpl/aux_/inserter_algorithm.hpp> + +namespace boost { namespace mpl { + +namespace aux {  + +template<  +      typename Seq +    , typename Op +    , typename In +    > +struct transform1_impl +    : fold<  +          Seq +        , typename In::state +        , bind2< typename lambda< typename In::operation >::type +            , _1 +            , bind1< typename lambda<Op>::type, _2> +            >  +        > +{ +}; + +template<  +      typename Seq +    , typename Op +    , typename In +    > +struct reverse_transform1_impl +    : reverse_fold<  +          Seq +        , typename In::state +        , bind2< typename lambda< typename In::operation >::type +            , _1 +            , bind1< typename lambda<Op>::type, _2> +            >  +        > +{ +}; + +template<  +      typename Seq1 +    , typename Seq2 +    , typename Op +    , typename In +    > +struct transform2_impl +    : fold<  +          pair_view<Seq1,Seq2> +        , typename In::state +        , bind2< typename lambda< typename In::operation >::type +            , _1 +            , bind2< +                  typename lambda<Op>::type +                , bind1<first<>,_2> +                , bind1<second<>,_2> +                > +            >  +        > +{ +}; + +template<  +      typename Seq1 +    , typename Seq2 +    , typename Op +    , typename In +    > +struct reverse_transform2_impl +    : reverse_fold<  +          pair_view<Seq1,Seq2> +        , typename In::state +        , bind2< typename lambda< typename In::operation >::type +            , _1 +            , bind2< typename lambda< Op >::type +                , bind1<first<>,_2> +                , bind1<second<>,_2> +                > +            >  +        > +{ +}; + +} // namespace aux  + +BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, transform1)                     +BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, transform2) +     +#define AUX778076_TRANSFORM_DEF(name)                                   \ +template<                                                               \ +      typename BOOST_MPL_AUX_NA_PARAM(Seq1)                             \ +    , typename BOOST_MPL_AUX_NA_PARAM(Seq2OrOperation)                  \ +    , typename BOOST_MPL_AUX_NA_PARAM(OperationOrInserter)              \ +    , typename BOOST_MPL_AUX_NA_PARAM(Inserter)                         \ +    >                                                                   \ +struct name                                                             \ +{                                                                       \ +    typedef typename eval_if<                                           \ +          or_<                                                          \ +              is_na<OperationOrInserter>                                \ +            , is_lambda_expression< Seq2OrOperation >                   \ +            , not_< is_sequence<Seq2OrOperation> >                      \ +            >                                                           \ +        , name##1<Seq1,Seq2OrOperation,OperationOrInserter>             \ +        , name##2<Seq1,Seq2OrOperation,OperationOrInserter,Inserter>    \ +        >::type type;                                                   \ +};                                                                      \ +BOOST_MPL_AUX_NA_SPEC(4, name)                                          \ +/**/ + +AUX778076_TRANSFORM_DEF(transform) +AUX778076_TRANSFORM_DEF(reverse_transform) + +#undef AUX778076_TRANSFORM_DEF + +}} + +#endif // BOOST_MPL_TRANSFORM_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/variant.hpp b/3rdParty/Boost/src/boost/variant.hpp new file mode 100644 index 0000000..6088c5d --- /dev/null +++ b/3rdParty/Boost/src/boost/variant.hpp @@ -0,0 +1,27 @@ +//----------------------------------------------------------------------------- +// boost variant.hpp header file +// See http://www.boost.org/libs/variant for documentation. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman, Itay Maman +// +// 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) + +#ifndef BOOST_VARIANT_HPP +#define BOOST_VARIANT_HPP + +// variant "main" +#include "boost/variant/variant.hpp" +#include "boost/variant/recursive_variant.hpp" +#include "boost/variant/recursive_wrapper.hpp" + +// common applications +#include "boost/variant/get.hpp" +#include "boost/variant/apply_visitor.hpp" +#include "boost/variant/static_visitor.hpp" +#include "boost/variant/visitor_ptr.hpp" + +#endif // BOOST_VARIANT_HPP diff --git a/3rdParty/Boost/src/boost/variant/apply_visitor.hpp b/3rdParty/Boost/src/boost/variant/apply_visitor.hpp new file mode 100644 index 0000000..53bada0 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/apply_visitor.hpp @@ -0,0 +1,20 @@ +//----------------------------------------------------------------------------- +// boost variant/apply_visitor.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_APPLY_VISITOR_HPP +#define BOOST_VARIANT_APPLY_VISITOR_HPP + +#include "boost/variant/detail/apply_visitor_unary.hpp" +#include "boost/variant/detail/apply_visitor_binary.hpp" +#include "boost/variant/detail/apply_visitor_delayed.hpp" + +#endif // BOOST_VARIANT_APPLY_VISITOR_HPP diff --git a/3rdParty/Boost/src/boost/variant/bad_visit.hpp b/3rdParty/Boost/src/boost/variant/bad_visit.hpp new file mode 100644 index 0000000..ca53940 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/bad_visit.hpp @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------- +// boost variant/bad_visit.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_BAD_VISIT_HPP +#define BOOST_VARIANT_BAD_VISIT_HPP + +#include <exception> + +namespace boost { + +////////////////////////////////////////////////////////////////////////// +// class bad_visit +// +// Exception thrown when a visitation attempt via apply_visitor fails due +// to invalid visited subtype or contents. +// +struct bad_visit +    : std::exception +{ +public: // std::exception interface + +    virtual const char * what() const throw() +    { +        return "boost::bad_visit: " +               "failed visitation using boost::apply_visitor"; +    } + +}; + +} // namespace boost + +#endif // BOOST_VARIANT_BAD_VISIT_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/apply_visitor_binary.hpp b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_binary.hpp new file mode 100644 index 0000000..92cdb42 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_binary.hpp @@ -0,0 +1,172 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/apply_visitor_binary.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_APPLY_VISITOR_BINARY_HPP +#define BOOST_VARIANT_DETAIL_APPLY_VISITOR_BINARY_HPP + +#include "boost/config.hpp" +#include "boost/detail/workaround.hpp" +#include "boost/variant/detail/generic_result_type.hpp" + +#include "boost/variant/detail/apply_visitor_unary.hpp" + +#include "boost/utility/enable_if.hpp" + +namespace boost { + +////////////////////////////////////////////////////////////////////////// +// function template apply_visitor(visitor, visitable1, visitable2) +// +// Visits visitable1 and visitable2 such that their values (which we +// shall call x and y, respectively) are used as arguments in the +// expression visitor(x, y). +// + +namespace detail { namespace variant { + +template <typename Visitor, typename Value1> +class apply_visitor_binary_invoke +{ +public: // visitor typedefs + +    typedef typename Visitor::result_type +        result_type; + +private: // representation + +    Visitor& visitor_; +    Value1& value1_; + +public: // structors + +    apply_visitor_binary_invoke(Visitor& visitor, Value1& value1) +        : visitor_(visitor) +        , value1_(value1) +    { +    } + +public: // visitor interfaces + +    template <typename Value2> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    operator()(Value2& value2) +    { +        return visitor_(value1_, value2); +    } + +}; + +template <typename Visitor, typename Visitable2> +class apply_visitor_binary_unwrap +{ +public: // visitor typedefs + +    typedef typename Visitor::result_type +        result_type; + +private: // representation + +    Visitor& visitor_; +    Visitable2& visitable2_; + +public: // structors + +    apply_visitor_binary_unwrap(Visitor& visitor, Visitable2& visitable2) +        : visitor_(visitor) +        , visitable2_(visitable2) +    { +    } + +public: // visitor interfaces + +    template <typename Value1> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    operator()(Value1& value1) +    { +        apply_visitor_binary_invoke< +              Visitor +            , Value1 +            > invoker(visitor_, value1); + +        return boost::apply_visitor(invoker, visitable2_); +    } + +}; + +}} // namespace detail::variant + +// +// nonconst-visitor version: +// + +#if !BOOST_WORKAROUND(__EDG__, BOOST_TESTED_AT(302)) + +#   define BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(V) \ +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename V::result_type) \ +    /**/ + +#else // EDG-based compilers + +#   define BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(V) \ +    typename enable_if< \ +          mpl::not_< is_const< V > > \ +        , BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename V::result_type) \ +        >::type \ +    /**/ + +#endif // EDG-based compilers workaround + +template <typename Visitor, typename Visitable1, typename Visitable2> +inline +    BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(Visitor) +apply_visitor( +      Visitor& visitor +    , Visitable1& visitable1, Visitable2& visitable2 +    ) +{ +    ::boost::detail::variant::apply_visitor_binary_unwrap< +          Visitor, Visitable2 +        > unwrapper(visitor, visitable2); + +    return boost::apply_visitor(unwrapper, visitable1); +} + +#undef BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE + +// +// const-visitor version: +// + +#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + +template <typename Visitor, typename Visitable1, typename Visitable2> +inline +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE( +          typename Visitor::result_type +        ) +apply_visitor( +      const Visitor& visitor +    , Visitable1& visitable1, Visitable2& visitable2 +    ) +{ +    ::boost::detail::variant::apply_visitor_binary_unwrap< +          const Visitor, Visitable2 +        > unwrapper(visitor, visitable2); + +    return boost::apply_visitor(unwrapper, visitable1); +} + +#endif // MSVC7 and below exclusion + +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_APPLY_VISITOR_BINARY_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/apply_visitor_delayed.hpp b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_delayed.hpp new file mode 100644 index 0000000..31c79a2 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_delayed.hpp @@ -0,0 +1,85 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/apply_visitor_delayed.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_APPLY_VISITOR_DELAYED_HPP +#define BOOST_VARIANT_DETAIL_APPLY_VISITOR_DELAYED_HPP + +#include "boost/variant/detail/generic_result_type.hpp" + +#include "boost/variant/detail/apply_visitor_unary.hpp" +#include "boost/variant/detail/apply_visitor_binary.hpp" + +namespace boost { + +////////////////////////////////////////////////////////////////////////// +// function template apply_visitor(visitor) +// +// Returns a function object, overloaded for unary and binary usage, that +// visits its arguments using visitor (or a copy of visitor) via +//  * apply_visitor( visitor, [argument] ) +// under unary invocation, or +//  * apply_visitor( visitor, [argument1], [argument2] ) +// under binary invocation. +// +// NOTE: Unlike other apply_visitor forms, the visitor object must be +//   non-const; this prevents user from giving temporary, to disastrous +//   effect (i.e., returned function object would have dead reference). +// + +template <typename Visitor> +class apply_visitor_delayed_t +{ +public: // visitor typedefs + +    typedef typename Visitor::result_type +        result_type; + +private: // representation + +    Visitor& visitor_; + +public: // structors + +    explicit apply_visitor_delayed_t(Visitor& visitor) +      : visitor_(visitor) +    { +    } + +public: // unary visitor interface + +    template <typename Visitable> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    operator()(Visitable& visitable) +    { +        return apply_visitor(visitor_, visitable); +    } + +public: // binary visitor interface + +    template <typename Visitable1, typename Visitable2> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    operator()(Visitable1& visitable1, Visitable2& visitable2) +    { +        return apply_visitor(visitor_, visitable1, visitable2); +    } + +}; + +template <typename Visitor> +inline apply_visitor_delayed_t<Visitor> apply_visitor(Visitor& visitor) +{ +    return apply_visitor_delayed_t<Visitor>(visitor); +} + +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_APPLY_VISITOR_DELAYED_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/apply_visitor_unary.hpp b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_unary.hpp new file mode 100644 index 0000000..10b361a --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_unary.hpp @@ -0,0 +1,79 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/apply_visitor_unary.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_APPLY_VISITOR_UNARY_HPP +#define BOOST_VARIANT_DETAIL_APPLY_VISITOR_UNARY_HPP + +#include "boost/config.hpp" +#include "boost/detail/workaround.hpp" +#include "boost/variant/detail/generic_result_type.hpp" + +#include "boost/utility/enable_if.hpp" + +namespace boost { + +////////////////////////////////////////////////////////////////////////// +// function template apply_visitor(visitor, visitable) +// +// Visits visitable with visitor. +// + +// +// nonconst-visitor version: +// + +#if !BOOST_WORKAROUND(__EDG__, BOOST_TESTED_AT(302)) + +#   define BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(V) \ +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename V::result_type) \ +    /**/ + +#else // EDG-based compilers + +#   define BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(V) \ +    typename enable_if< \ +          mpl::not_< is_const< V > > \ +        , BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename V::result_type) \ +        >::type \ +    /**/ + +#endif // EDG-based compilers workaround + +template <typename Visitor, typename Visitable> +inline +    BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(Visitor) +apply_visitor(Visitor& visitor, Visitable& visitable) +{ +    return visitable.apply_visitor(visitor); +} + +#undef BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE + +// +// const-visitor version: +// + +#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + +template <typename Visitor, typename Visitable> +inline +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type) +apply_visitor(const Visitor& visitor, Visitable& visitable) +{ +    return visitable.apply_visitor(visitor); +} + +#endif // MSVC7 and below exclusion + +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_APPLY_VISITOR_UNARY_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/backup_holder.hpp b/3rdParty/Boost/src/boost/variant/detail/backup_holder.hpp new file mode 100644 index 0000000..ed112b8 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/backup_holder.hpp @@ -0,0 +1,94 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/backup_holder.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP +#define BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP + +#include "boost/assert.hpp" + +namespace boost { +namespace detail { namespace variant { + +template <typename T> +class backup_holder +{ +private: // representation + +    T* backup_; + +public: // structors + +    ~backup_holder() +    { +        delete backup_; +    } + +    explicit backup_holder(T* backup) +        : backup_(backup) +    { +    } + +    backup_holder(const backup_holder&); + +public: // modifiers + +    backup_holder& operator=(const backup_holder& rhs) +    { +        *backup_ = rhs.get(); +        return *this; +    } + +    backup_holder& operator=(const T& rhs) +    { +        *backup_ = rhs; +        return *this; +    } + +    void swap(backup_holder& rhs) +    { +        T* tmp = rhs.backup_; +        rhs.backup_ = this->backup_; +        this->backup_ = tmp; +    } + +public: // queries + +    T& get() +    { +        return *backup_; +    } + +    const T& get() const +    { +        return *backup_; +    } + +}; + +template <typename T> +backup_holder<T>::backup_holder(const backup_holder&) +    : backup_(0) +{ +    // not intended for copy, but do not want to prohibit syntactically +    BOOST_ASSERT(false); +} + +template <typename T> +void swap(backup_holder<T>& lhs, backup_holder<T>& rhs) +{ +    lhs.swap(rhs); +} + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/bool_trait_def.hpp b/3rdParty/Boost/src/boost/variant/detail/bool_trait_def.hpp new file mode 100644 index 0000000..823a79a --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/bool_trait_def.hpp @@ -0,0 +1,30 @@ +//----------------------------------------------------------------------------- +// boost/variant/detail/bool_trait_def.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +// Needed until move-related traits incorporated into type_traits library. +// no include guards, the header is intended for multiple inclusion! + +// should be the last #include +#include "boost/type_traits/detail/bool_trait_def.hpp" + +#define BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(trait,T,C) \ +template< typename T > struct trait \ +    BOOST_TT_AUX_BOOL_C_BASE(C) \ +{ \ +    BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \ +}; \ +/**/ + +#define BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(arity, name) \ +BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(arity, name) \ +/**/ diff --git a/3rdParty/Boost/src/boost/variant/detail/bool_trait_undef.hpp b/3rdParty/Boost/src/boost/variant/detail/bool_trait_undef.hpp new file mode 100644 index 0000000..9b8fb54 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/bool_trait_undef.hpp @@ -0,0 +1,21 @@ +//----------------------------------------------------------------------------- +// boost/variant/detail/bool_trait_undef.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +// Needed until move-related traits incorporated into type_traits library. +// no include guards, the header is intended for multiple inclusion! + +// should be the last #include +#include "boost/type_traits/detail/bool_trait_undef.hpp" + + +#undef BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1 +#undef BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX diff --git a/3rdParty/Boost/src/boost/variant/detail/cast_storage.hpp b/3rdParty/Boost/src/boost/variant/detail/cast_storage.hpp new file mode 100644 index 0000000..f23f174 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/cast_storage.hpp @@ -0,0 +1,48 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/cast_storage.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_CAST_STORAGE_HPP +#define BOOST_VARIANT_DETAIL_CAST_STORAGE_HPP + +#include "boost/config.hpp" + +namespace boost { +namespace detail { namespace variant { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) function template cast_storage +// +// Casts the given storage to the specified type, but with qualification. +// + +template <typename T> +inline T& cast_storage( +      void* storage +      BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T) +    ) +{ +    return *static_cast<T*>(storage); +} + +template <typename T> +inline const T& cast_storage( +      const void* storage +      BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T) +    ) +{ +    return *static_cast<const T*>(storage); +} + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_CAST_STORAGE_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/config.hpp b/3rdParty/Boost/src/boost/variant/detail/config.hpp new file mode 100644 index 0000000..eb18201 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/config.hpp @@ -0,0 +1,38 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/config.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_CONFIG_HPP +#define BOOST_VARIANT_DETAIL_CONFIG_HPP + +#include "boost/config.hpp" +#include "boost/detail/workaround.hpp" + +/////////////////////////////////////////////////////////////////////////////// +// macro BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING +// +#if BOOST_WORKAROUND(__MWERKS__, <= 0x3201) \ + || BOOST_WORKAROUND(BOOST_INTEL, <= 700) \ + || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \ + && !defined(BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING) +#   define BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING +#endif + +/////////////////////////////////////////////////////////////////////////////// +// macro BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND +// +#if !defined(BOOST_NO_SFINAE) \ + && !BOOST_WORKAROUND(BOOST_INTEL, <= 700) \ + && !defined(BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND) +#   define BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND +#endif + +#endif // BOOST_VARIANT_DETAIL_CONFIG_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/enable_recursive.hpp b/3rdParty/Boost/src/boost/variant/detail/enable_recursive.hpp new file mode 100644 index 0000000..76bd7c7 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/enable_recursive.hpp @@ -0,0 +1,162 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/enable_recursive.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_HPP +#define BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_HPP + +#include "boost/variant/detail/enable_recursive_fwd.hpp" +#include "boost/variant/variant_fwd.hpp" + +#if !defined(BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT) +#   include "boost/mpl/apply.hpp" +#   include "boost/mpl/eval_if.hpp" +#   include "boost/mpl/lambda.hpp" +#endif + +#include "boost/variant/detail/substitute.hpp" +#include "boost/mpl/aux_/config/ctps.hpp" +#include "boost/mpl/bool_fwd.hpp" +#include "boost/mpl/if.hpp" +#include "boost/mpl/or.hpp" +#include "boost/type_traits/is_pointer.hpp" +#include "boost/type_traits/is_reference.hpp" +#include "boost/type_traits/is_same.hpp" + +#include "boost/variant/recursive_wrapper.hpp" + +namespace boost { +namespace detail { namespace variant { + +#if !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) + +#   define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL(T,Dest,Source) \ +    substitute< T , Dest , Source > \ +    /**/ + +#else // defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class template rebind1 +// +// Limited workaround in case 'substitute' metafunction unavailable. +// + +template <typename T, typename U1> +struct rebind1 +{ +private: +    typedef typename mpl::lambda< +          mpl::identity<T> +        >::type le_; + +public: +    typedef typename mpl::eval_if< +          is_same< le_, mpl::identity<T> > +        , le_ // identity<T> +        , mpl::apply1<le_, U1> +        >::type type; +}; + +#   define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL(T,Dest,Source) \ +    rebind1< T , Dest > \ +    /**/ + +#endif // !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction enable_recursive +// +// See boost/variant/detail/enable_recursive_fwd.hpp for more information. +// + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename T, typename RecursiveVariant, typename NoWrapper> +struct enable_recursive +    : BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL( +          T, RecursiveVariant, ::boost::recursive_variant_ +        ) +{ +}; + +template <typename T, typename RecursiveVariant> +struct enable_recursive< T,RecursiveVariant,mpl::false_ > +{ +private: // helpers, for metafunction result (below) + +    typedef typename BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL( +          T, RecursiveVariant, ::boost::recursive_variant_ +        )::type t_; + +public: // metafunction result + +    // [Wrap with recursive_wrapper only if rebind really changed something:] +    typedef typename mpl::if_< +          mpl::or_< +              is_same< t_,T > +            , is_reference<t_> +            , is_pointer<t_> +            > +        , t_ +        , boost::recursive_wrapper<t_> +        >::type type; + +}; + +#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename T, typename RecursiveVariant, typename NoWrapper> +struct enable_recursive +{ +private: // helpers, for metafunction result (below) + +    typedef typename BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL( +          T, RecursiveVariant, ::boost::recursive_variant_ +        )::type t_; + +public: // metafunction result + +    // [Wrap with recursive_wrapper only if rebind really changed something:] +    typedef typename mpl::if_< +          mpl::or_< +              NoWrapper +            , is_same< t_,T > +            , is_reference<t_> +            , is_pointer<t_> +            > +        , t_ +        , boost::recursive_wrapper<t_> +        >::type type; + +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction class quoted_enable_recursive +// +// Same behavior as enable_recursive metafunction (see above). +// +template <typename RecursiveVariant, typename NoWrapper> +struct quoted_enable_recursive +{ +    template <typename T> +    struct apply +        : enable_recursive<T, RecursiveVariant, NoWrapper> +    { +    }; +}; + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/enable_recursive_fwd.hpp b/3rdParty/Boost/src/boost/variant/detail/enable_recursive_fwd.hpp new file mode 100644 index 0000000..3336c1f --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/enable_recursive_fwd.hpp @@ -0,0 +1,116 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/enable_recursive_fwd.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_FWD_HPP +#define BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_FWD_HPP + +#include "boost/mpl/aux_/config/ctps.hpp" + +#include "boost/mpl/bool_fwd.hpp" + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +#   include "boost/mpl/bool.hpp" +#else +#   include "boost/type_traits/is_base_and_derived.hpp" +#endif + +namespace boost { +namespace detail { namespace variant { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) tag recursive_flag +// +// Signifies that the variant should perform recursive substituion. +// + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename T> +struct recursive_flag +{ +    typedef T type; +}; + +#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +struct recursive_flag_tag +{ +}; + +template <typename T> +struct recursive_flag +    : recursive_flag_tag +{ +    typedef T type; +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction is_recursive_flag +// +// Signifies that the variant should perform recursive substituion. +// + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename T> +struct is_recursive_flag +    : mpl::false_ +{ +}; + +template <typename T> +struct is_recursive_flag< recursive_flag<T> > +    : mpl::true_ +{ +}; + +#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename T> +struct is_recursive_flag +    : is_base_and_derived< recursive_flag_tag,T > +{ +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction enable_recursive +// +// Attempts recursive_variant_ tag substitution, wrapping with +// boost::recursive_wrapper if substituion occurs w/ non-indirect result +// (i.e., not a reference or pointer) *and* NoWrapper is false_. +// +template < +      typename T +    , typename RecursiveVariant +    , typename NoWrapper = mpl::false_ +    > +struct enable_recursive; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction class quoted_enable_recursive +// +// Same behavior as enable_recursive metafunction (see above). +// +template < +      typename RecursiveVariant +    , typename NoWrapper = mpl::false_ +    > +struct quoted_enable_recursive; + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_FWD_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/forced_return.hpp b/3rdParty/Boost/src/boost/variant/detail/forced_return.hpp new file mode 100644 index 0000000..cc1f25b --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/forced_return.hpp @@ -0,0 +1,104 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/forced_return.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP +#define BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP + +#include "boost/config.hpp" +#include "boost/variant/detail/generic_result_type.hpp" +#include "boost/assert.hpp" + +#if !defined(BOOST_MSVC) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +#   include "boost/type_traits/remove_reference.hpp" +#endif + +namespace boost { +namespace detail { namespace variant { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) function template forced_return +// +// Logical error to permit invocation at runtime, but (artificially) satisfies +// compile-time requirement of returning a result value. +// + +#if !defined(BOOST_MSVC)                                \ + && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)  \ + && !defined(BOOST_NO_VOID_RETURNS) + +// "standard" implementation: + +template <typename T> +inline T forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) ) +{ +    // logical error: should never be here! (see above) +    BOOST_ASSERT(false); + +    typedef typename boost::remove_reference<T>::type basic_type; +    basic_type* dummy = 0; +    return *static_cast< basic_type* >(dummy); +} + +template <> +inline void forced_return<void>( BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(void) ) +{ +    // logical error: should never be here! (see above) +    BOOST_ASSERT(false); +} + +#elif !defined(BOOST_MSVC) + +// workaround implementation +// +// TODO: Determine the most efficient way to handle this -- as below? by +// throwing? by recursive call to forced_return itself? etc. +// + +template <typename T> +inline +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) +forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) ) +{ +    // logical error: should never be here! (see above) +    BOOST_ASSERT(false); + +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) (*dummy)() = 0; +    return dummy(); +} + +#else // defined(BOOST_MSVC) + +// msvc-specific implementation +// +// Leverages __declspec(noreturn) for optimized implementation. +// + +__declspec(noreturn) +inline void forced_return_no_return() {}; + +template <typename T> +inline +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) +forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) ) +{ +    // logical error: should never be here! (see above) +    BOOST_ASSERT(false); + +    forced_return_no_return(); +} + +#endif // BOOST_MSVC optimization + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/generic_result_type.hpp b/3rdParty/Boost/src/boost/variant/detail/generic_result_type.hpp new file mode 100644 index 0000000..b3fbb19 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/generic_result_type.hpp @@ -0,0 +1,88 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/generic_result_type.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP +#define BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP + +#include "boost/config.hpp" + +////////////////////////////////////////////////////////////////////////// +// (workaround) macro BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE +// +// On compilers with BOOST_NO_VOID_RETURNS, this macro provides a route +// to a single syntax for dealing with template functions that may (but +// not necessarily) return nothing (i.e. void). +// +// BOOST_VARIANT_AUX_RETURN_VOID provided for compilers w/ (erroneous?) +// warnings about non-void functions not returning a value. +// + +#if !defined(BOOST_NO_VOID_RETURNS) + +#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \ +    T   \ +    /**/ + +#define BOOST_VARIANT_AUX_RETURN_VOID  \ +    /**/ + +#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE \ +    void    \ +    /**/ + +#else // defined(BOOST_NO_VOID_RETURNS) + +namespace boost { +namespace detail { namespace variant { + +struct fake_return_void +{ +    fake_return_void() +    { +    } + +    template <typename T> +    fake_return_void(const T&) +    { +    } +}; + +template <typename T> +struct no_void_returns_helper +{ +    typedef T type; +}; + +template <> +struct no_void_returns_helper<void> +{ +    typedef fake_return_void type; +}; + +}} // namespace detail::variant +} // namespace boost + +#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \ +    BOOST_DEDUCED_TYPENAME                                           \ +        ::boost::detail::variant::no_void_returns_helper< T >::type  \ +    /**/ + +#define BOOST_VARIANT_AUX_RETURN_VOID  \ +    return ::boost::detail::variant::fake_return_void()     \ +    /**/ + +#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE  \ +    ::boost::detail::variant::fake_return_void + +#endif // BOOST_NO_VOID_RETURNS workaround + +#endif // BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/has_nothrow_move.hpp b/3rdParty/Boost/src/boost/variant/detail/has_nothrow_move.hpp new file mode 100644 index 0000000..51ca095 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/has_nothrow_move.hpp @@ -0,0 +1,106 @@ + +// (C) Copyright Eric Friedman 2002-2003. +// 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 for most recent version including documentation. + +#ifndef BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED +#define BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED + +#include "boost/config.hpp" // for STATIC_CONSTANT +#include "boost/variant/detail/has_trivial_move.hpp" +#include "boost/type_traits/has_nothrow_copy.hpp" +#include "boost/type_traits/has_nothrow_assign.hpp" + +#include "boost/mpl/and.hpp" +#include "boost/mpl/or.hpp" + +// should be the last #include +#include "boost/variant/detail/bool_trait_def.hpp" + +namespace boost { +namespace detail { namespace variant { + +// TRAIT: has_nothrow_move + +template <typename T> +struct has_nothrow_move_impl +{ +    BOOST_STATIC_CONSTANT( +        bool, value = ( +            ::boost::mpl::or_< +                has_trivial_move<T> +              , ::boost::mpl::and_< +                  has_nothrow_copy<T> +                , has_nothrow_assign<T> +                > +            >::type::value +            ) +        ); +}; + +BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1( +      has_nothrow_move +    , T +    , (::boost::detail::variant::has_nothrow_move_impl<T>::value) +    ) + + +// TRAIT: has_nothrow_move_constructor + +template <typename T> +struct has_nothrow_move_constructor_impl +{ +    BOOST_STATIC_CONSTANT( +        bool, value = ( +            ::boost::mpl::or_< +              has_nothrow_move<T> +            , has_trivial_move_constructor<T> +            , has_nothrow_copy<T> +            >::type::value +            ) +        ); +}; + +BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1( +      has_nothrow_move_constructor +    , T +    , (::boost::detail::variant::has_nothrow_move_constructor_impl<T>::value) +    ) + + +// TRAIT: has_nothrow_move_assign + +template <typename T> +struct has_nothrow_move_assign_impl +{ +    BOOST_STATIC_CONSTANT( +        bool, value = ( +            ::boost::mpl::or_< +              has_nothrow_move<T> +            , has_trivial_move_assign<T> +            , has_nothrow_assign<T> +            >::type::value +            ) +        ); +}; + +BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1( +      has_nothrow_move_assign +    , T +    , (::boost::detail::variant::has_nothrow_move_assign_impl<T>::value) +    ) + +}} // namespace detail::variant + +BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move) +BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move_constructor) +BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move_assign) + +} // namespace boost + +#include "boost/variant/detail/bool_trait_undef.hpp" + +#endif // BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/variant/detail/has_trivial_move.hpp b/3rdParty/Boost/src/boost/variant/detail/has_trivial_move.hpp new file mode 100644 index 0000000..5293366 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/has_trivial_move.hpp @@ -0,0 +1,100 @@ + +// (C) Copyright Eric Friedman 2002-2003. +// 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 for most recent version including documentation. + +#ifndef BOOST_VARIANT_DETAIL_HAS_TRIVIAL_MOVE_HPP_INCLUDED +#define BOOST_VARIANT_DETAIL_HAS_TRIVIAL_MOVE_HPP_INCLUDED + +#include "boost/config.hpp" // for STATIC_CONSTANT +#include "boost/type_traits/has_trivial_copy.hpp" +#include "boost/type_traits/has_trivial_assign.hpp" + +#include "boost/mpl/and.hpp" +#include "boost/mpl/or.hpp" + +// should be the last #include +#include "boost/variant/detail/bool_trait_def.hpp" + +namespace boost { +namespace detail { namespace variant { + +// TRAIT: has_trivial_move + +template <typename T> +struct has_trivial_move_impl +{ +    BOOST_STATIC_CONSTANT( +        bool, value = ( +            ::boost::mpl::and_< +              has_trivial_copy<T> +            , has_trivial_assign<T> +            >::type::value +            ) +        ); +}; + +BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1( +      has_trivial_move +    , T +    , (::boost::detail::variant::has_trivial_move_impl<T>::value) +    ) + + +// TRAIT: has_trivial_move_constructor + +template <typename T> +struct has_trivial_move_constructor_impl +{ +    BOOST_STATIC_CONSTANT( +        bool, value = ( +            ::boost::mpl::or_< +              has_trivial_move<T> +            , has_trivial_copy<T> +            >::type::value +            ) +        ); +}; + +BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1( +      has_trivial_move_constructor +    , T +    , (::boost::detail::variant::has_trivial_move_constructor_impl<T>::value) +    ) + + +// TRAIT: has_trivial_move_assign + +template <typename T> +struct has_trivial_move_assign_impl +{ +    BOOST_STATIC_CONSTANT( +        bool, value = ( +            ::boost::mpl::or_< +              has_trivial_move<T> +            , has_trivial_assign<T> +            >::type::value +            ) +        ); +}; + +BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1( +      has_trivial_move_assign +    , T +    , (::boost::detail::variant::has_trivial_move_assign_impl<T>::value) +    ) + +}} // namespace detail::variant + +BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_trivial_move) +BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_trivial_move_constructor) +BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_trivial_move_assign) + +} // namespace boost + +#include "boost/variant/detail/bool_trait_undef.hpp" + +#endif // BOOST_VARIANT_DETAIL_HAS_TRIVIAL_MOVE_HPP_INCLUDED diff --git a/3rdParty/Boost/src/boost/variant/detail/initializer.hpp b/3rdParty/Boost/src/boost/variant/detail/initializer.hpp new file mode 100644 index 0000000..b14d6c8 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/initializer.hpp @@ -0,0 +1,265 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/initializer.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman, Itay Maman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_INITIALIZER_HPP +#define BOOST_VARIANT_DETAIL_INITIALIZER_HPP + +#include <new> // for placement new + +#include "boost/config.hpp" + +#include "boost/call_traits.hpp" +#include "boost/detail/reference_content.hpp" +#include "boost/variant/recursive_wrapper_fwd.hpp" + +#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) +#   include "boost/mpl/aux_/value_wknd.hpp" +#   include "boost/mpl/int.hpp" +#   include "boost/mpl/iter_fold.hpp" +#   include "boost/mpl/next.hpp" +#   include "boost/mpl/deref.hpp" +#   include "boost/mpl/pair.hpp" +#   include "boost/mpl/protect.hpp" +#else +#   include "boost/variant/variant_fwd.hpp" +#   include "boost/preprocessor/cat.hpp" +#   include "boost/preprocessor/enum.hpp" +#   include "boost/preprocessor/repeat.hpp" +#endif + +namespace boost { +namespace detail { namespace variant { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) support to simulate standard overload resolution rules +// +// The below initializers allows variant to follow standard overload +// resolution rules over the specified set of bounded types. +// +// On compilers where using declarations in class templates can correctly +// avoid name hiding, use an optimal solution based on the variant's typelist. +// +// Otherwise, use a preprocessor workaround based on knowledge of the fixed +// size of the variant's psuedo-variadic template parameter list. +// + +#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) + +// (detail) quoted metafunction make_initializer_node +// +// Exposes a pair whose first type is a node in the initializer hierarchy. +// +struct make_initializer_node +{ +    template <typename BaseIndexPair, typename Iterator> +    struct apply +    { +    private: // helpers, for metafunction result (below) + +        typedef typename BaseIndexPair::first +            base; +        typedef typename BaseIndexPair::second +            index; + +        class initializer_node +            : public base +        { +        private: // helpers, for static functions (below) + +            typedef typename mpl::deref<Iterator>::type +                recursive_enabled_T; +            typedef typename unwrap_recursive<recursive_enabled_T>::type +                public_T; +            typedef typename call_traits<public_T>::param_type +                param_T; + +        public: // static functions + +            using base::initialize; + +            static int initialize(void* dest, param_T operand) +            { +                typedef typename boost::detail::make_reference_content< +                      recursive_enabled_T +                    >::type internal_T; + +                new(dest) internal_T(operand); +                return BOOST_MPL_AUX_VALUE_WKND(index)::value; // which +            } + +        }; + +        friend class initializer_node; + +    public: // metafunction result + +        typedef mpl::pair< +              initializer_node +            , typename mpl::next< index >::type +            > type; + +    }; +}; + +// (detail) class initializer_root +// +// Every level of the initializer hierarchy must expose the name +// "initialize," so initializer_root provides a dummy function: +// +class initializer_root +{ +public: // static functions + +    static void initialize(); + +}; + +#else // defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) + +#   if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)  + +    #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_PARAMS \ +          BOOST_VARIANT_ENUM_PARAMS(typename recursive_enabled_T) \ +    /**/ + +    #define BOOST_VARIANT_AUX_PP_INITIALIZER_DEFINE_PARAM_T(N) \ +        typedef typename unwrap_recursive< \ +              BOOST_PP_CAT(recursive_enabled_T,N) \ +            >::type BOOST_PP_CAT(public_T,N); \ +        typedef typename call_traits< \ +              BOOST_PP_CAT(public_T,N) \ +            >::param_type BOOST_PP_CAT(param_T,N); \ +    /**/ + +#   else // MSVC7 and below + +    #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_PARAMS \ +          BOOST_VARIANT_ENUM_PARAMS(typename recursive_enabled_T) \ +        , BOOST_VARIANT_ENUM_PARAMS(typename param_T) \ +    /**/ + +    #define BOOST_VARIANT_AUX_PP_INITIALIZER_DEFINE_PARAM_T(N) \ +    /**/ + +#   endif // MSVC7 and below workaround + +template < BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_PARAMS > +struct preprocessor_list_initializer +{ +public: // static functions + +    #define BOOST_VARIANT_AUX_PP_INITIALIZE_FUNCTION(z,N,_) \ +        BOOST_VARIANT_AUX_PP_INITIALIZER_DEFINE_PARAM_T(N) \ +        static int initialize( \ +              void* dest \ +            , BOOST_PP_CAT(param_T,N) operand \ +            ) \ +        { \ +            typedef typename boost::detail::make_reference_content< \ +                  BOOST_PP_CAT(recursive_enabled_T,N) \ +                >::type internal_T; \ +            \ +            new(dest) internal_T(operand); \ +            return (N); /*which*/ \ +        } \ +        /**/ + +    BOOST_PP_REPEAT( +          BOOST_VARIANT_LIMIT_TYPES +        , BOOST_VARIANT_AUX_PP_INITIALIZE_FUNCTION +        , _ +        ) + +    #undef BOOST_VARIANT_AUX_PP_INITIALIZE_FUNCTION + +}; + +#   if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) + +#if !defined(BOOST_VARIANT_AUX_ECHO) +#   define BOOST_VARIANT_AUX_ECHO(z,N,token) token +#endif + +template <> +struct preprocessor_list_initializer< +      BOOST_PP_ENUM(BOOST_VARIANT_LIMIT_TYPES, BOOST_VARIANT_AUX_ECHO, int) +    , BOOST_PP_ENUM(BOOST_VARIANT_LIMIT_TYPES, BOOST_VARIANT_AUX_ECHO, const int) +    > +{ +}; + +#   endif // BOOST_MPL_CFG_MSVC_60_ETI_BUG workaround + +#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround + +}} // namespace detail::variant +} // namespace boost + +/////////////////////////////////////////////////////////////////////////////// +// macro BOOST_VARIANT_AUX_INITIALIZER_T +// +// Given both the variant's typelist and a basename for forming the list of +// bounded types (i.e., T becomes T1, T2, etc.), exposes the initializer +// most appropriate to the current compiler. +// + +#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) + +#define BOOST_VARIANT_AUX_INITIALIZER_T( mpl_seq, typename_base ) \ +    ::boost::mpl::iter_fold< \ +          mpl_seq \ +        , ::boost::mpl::pair< \ +              ::boost::detail::variant::initializer_root \ +            , ::boost::mpl::int_<0> \ +            > \ +        , ::boost::mpl::protect< \ +              ::boost::detail::variant::make_initializer_node \ +            > \ +        >::type::first \ +    /**/ + +#else // defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) + +#   if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + +    #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_ARGS(typename_base) \ +          BOOST_VARIANT_ENUM_PARAMS(typename_base) \ +        /**/ + +#   else // MSVC7 and below + +    #define BOOST_VARIANT_AUX_PP_INITIALIZER_ENUM_PARAM_TYPE(z,N,T) \ +        ::boost::call_traits< \ +              ::boost::unwrap_recursive<BOOST_PP_CAT(T,N)>::type \ +            >::param_type \ +        /**/ + +    #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_ARGS(typename_base) \ +          BOOST_VARIANT_ENUM_PARAMS(typename_base) \ +        , BOOST_PP_ENUM( \ +              BOOST_VARIANT_LIMIT_TYPES \ +            , BOOST_VARIANT_AUX_PP_INITIALIZER_ENUM_PARAM_TYPE \ +            , typename_base \ +            ) \ +        /**/ + +#   endif // MSVC7 workaround + +#define BOOST_VARIANT_AUX_INITIALIZER_T( mpl_seq, typename_base ) \ +    ::boost::detail::variant::preprocessor_list_initializer< \ +          BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_ARGS(typename_base) \ +        > \ +    /**/ + +#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround + +#endif // BOOST_VARIANT_DETAIL_INITIALIZER_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/make_variant_list.hpp b/3rdParty/Boost/src/boost/variant/detail/make_variant_list.hpp new file mode 100644 index 0000000..b2c74ad --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/make_variant_list.hpp @@ -0,0 +1,60 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/make_variant_list.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman, Itay Maman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_MAKE_VARIANT_LIST_HPP +#define BOOST_VARIANT_DETAIL_MAKE_VARIANT_LIST_HPP + +#include "boost/variant/variant_fwd.hpp" + +#include "boost/mpl/list.hpp" +#include "boost/preprocessor/cat.hpp" +#include "boost/preprocessor/enum.hpp" + +namespace boost { +namespace detail { namespace variant { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction make_variant_list +// +// Provides a MPL-compatible sequence with the specified non-void types +// as arguments. +// +// Rationale: see class template convert_void (variant_fwd.hpp) and using- +// declaration workaround (below). +// +template < BOOST_VARIANT_ENUM_PARAMS(typename T) > +struct make_variant_list +{ +public: // metafunction result + +    // [Define a macro to convert any void(NN) tags to mpl::void...] +#   define BOOST_VARIANT_AUX_CONVERT_VOID(z, N,_)  \ +        typename convert_void< BOOST_PP_CAT(T,N) >::type + +    // [...so that the specified types can be passed to mpl::list...] +    typedef typename mpl::list<  +          BOOST_PP_ENUM( +              BOOST_VARIANT_LIMIT_TYPES +            , BOOST_VARIANT_AUX_CONVERT_VOID +            , _ +            ) +        >::type type; + +    // [...and, finally, the conversion macro can be undefined:] +#   undef BOOST_VARIANT_AUX_CONVERT_VOID + +}; + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_MAKE_VARIANT_LIST_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/move.hpp b/3rdParty/Boost/src/boost/variant/detail/move.hpp new file mode 100644 index 0000000..572cfbb --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/move.hpp @@ -0,0 +1,166 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/move.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +//  Copyright (c) 2002-2003 Eric Friedman +//  Copyright (c) 2002 by Andrei Alexandrescu +// +//  Use, modification and distribution are subject to 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) +// +//  This file derivative of MoJO. Much thanks to Andrei for his initial work. +//  See <http://www.cuj.com/experts/2102/alexandr.htm> for information on MOJO. +//  Re-issued here under the Boost Software License, with permission of the original +//  author (Andrei Alexandrescu). + + +#ifndef BOOST_VARIANT_DETAIL_MOVE_HPP +#define BOOST_VARIANT_DETAIL_MOVE_HPP + +#include <iterator> // for iterator_traits +#include <new> // for placement new + +#include "boost/config.hpp" +#include "boost/detail/workaround.hpp" +#include "boost/mpl/if.hpp" +#include "boost/type_traits/is_base_and_derived.hpp" + +namespace boost { +namespace detail { namespace variant { + +////////////////////////////////////////////////////////////////////////// +// forward declares +// +// NOTE: Incomplete until (if?) Boost.Move becomes part of Boost. +// +template <typename Deriving> class moveable; +template <typename T>        class move_source; +template <typename T>        class move_return; + +namespace detail { + +// (detail) moveable_tag +// +// Concrete type from which moveable<T> derives. +// +// TODO: Move into moveable_fwd.hpp and define has_move_constructor. +// +template <typename Deriving> +struct moveable_tag +{ +}; + +} // namespace detail + +////////////////////////////////////////////////////////////////////////// +// function template move +// +// Takes a T& and returns, if T derives moveable<T>, a move_source<T> for +// the object; else, returns the T&. +// + +namespace detail { + +// (detail) class template move_type +// +// Metafunction that, given moveable T, provides move_source<T>, else T&. +// +template <typename T> +struct move_type +{ +public: // metafunction result + +    typedef typename mpl::if_< +          is_base_and_derived<detail::moveable_tag<T>, T> +        , move_source<T> +        , T& +        >::type type; + +}; + +} // namespace detail + +template <typename T> +inline +    typename detail::move_type<T>::type +move(T& source) +{ +    typedef typename detail::move_type<T>::type +        move_t; + +    return move_t(source); +} + +////////////////////////////////////////////////////////////////////////// +// class template return_t +// +// Metafunction that, given moveable T, provides move_return<T>, else T. +// +template <typename T> +struct return_t +{ +public: // metafunction result + +    typedef typename mpl::if_< +          is_base_and_derived<moveable<T>, T> +        , move_return<T> +        , T +        >::type type; + +}; + +////////////////////////////////////////////////////////////////////////// +// function template move_swap +// +// Swaps using Koenig lookup but falls back to move-swap for primitive +// types and on non-conforming compilers. +// + +#if   defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)   \ + ||   BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(2)) + +// [Indicate that move_swap by overload is disabled...] +#define BOOST_NO_MOVE_SWAP_BY_OVERLOAD + +// [...and provide straight swap-by-move implementation:] +template <typename T> +inline void move_swap(T& lhs, T& rhs) +{ +    T tmp( boost::detail::variant::move(lhs) ); +    lhs = boost::detail::variant::move(rhs); +    rhs = boost::detail::variant::move(tmp); +} + +#else// !workaround + +namespace detail { namespace move_swap { + +template <typename T> +inline void swap(T& lhs, T& rhs) +{ +    T tmp( boost::detail::variant::move(lhs) ); +    lhs = boost::detail::variant::move(rhs); +    rhs = boost::detail::variant::move(tmp); +} + +}} // namespace detail::move_swap + +template <typename T> +inline void move_swap(T& lhs, T& rhs) +{ +    using detail::move_swap::swap; + +    swap(lhs, rhs); +} + +#endif // workaround + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_MOVE_HPP + + + diff --git a/3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp b/3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp new file mode 100644 index 0000000..bdd69ad --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp @@ -0,0 +1,95 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/over_sequence.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// Portions Copyright (C) 2002 David Abrahams +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_OVER_SEQUENCE_HPP +#define BOOST_VARIANT_DETAIL_OVER_SEQUENCE_HPP + +#include "boost/mpl/aux_/config/ctps.hpp" +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +#   include "boost/mpl/eval_if.hpp" +#   include "boost/mpl/bool.hpp" +#   include "boost/mpl/identity.hpp" +#   include "boost/type.hpp" +#endif + + +namespace boost { +namespace detail { namespace variant { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class over_sequence +// +// Wrapper used to indicate bounded types for variant are from type sequence. +// +template <typename Types> +struct over_sequence +{ +    typedef Types type; +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction is_over_sequence (modeled on code by David Abrahams) +// +// Indicates whether the specified type is of form over_sequence<...> or not. +// + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename T> +struct is_over_sequence +    : mpl::false_ +{ +}; + +template <typename Types> +struct is_over_sequence< over_sequence<Types> > +    : mpl::true_ +{ +}; + +#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +typedef char (&yes_over_sequence_t)[1]; +typedef char (&no_over_sequence_t)[2]; + +no_over_sequence_t is_over_sequence_test(...); + +template<typename T> +yes_over_sequence_t is_over_sequence_test( +      type< ::boost::detail::variant::over_sequence<T> > +    ); + +template<typename T> +struct is_over_sequence_impl +{ +    BOOST_STATIC_CONSTANT(bool, value = ( +          sizeof(is_over_sequence_test(type<T>())) +          == sizeof(yes_over_sequence_t) +        )); +}; + +template <typename T> +struct is_over_sequence +    : mpl::bool_< +          ::boost::detail::variant::is_over_sequence_impl<T>::value +        > +{ +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_OVER_SEQUENCE_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/substitute.hpp b/3rdParty/Boost/src/boost/variant/detail/substitute.hpp new file mode 100644 index 0000000..97fe205 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/substitute.hpp @@ -0,0 +1,231 @@ + +#if !defined(BOOST_PP_IS_ITERATING) + +///// header body + +//----------------------------------------------------------------------------- +// boost variant/detail/substitute.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_SUBSTITUTE_HPP +#define BOOST_VARIANT_DETAIL_SUBSTITUTE_HPP + +#include "boost/mpl/aux_/config/ctps.hpp" + +#include "boost/variant/detail/substitute_fwd.hpp" +#include "boost/mpl/aux_/lambda_arity_param.hpp" +#include "boost/mpl/aux_/preprocessor/params.hpp" +#include "boost/mpl/aux_/preprocessor/repeat.hpp" +#include "boost/mpl/int_fwd.hpp" +#include "boost/mpl/limits/arity.hpp" +#include "boost/preprocessor/cat.hpp" +#include "boost/preprocessor/empty.hpp" +#include "boost/preprocessor/arithmetic/inc.hpp" +#include "boost/preprocessor/iterate.hpp" + +namespace boost { +namespace detail { namespace variant { + +#if !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction substitute +// +// Substitutes one type for another in the given type expression. +// + +// +// primary template +// +template < +      typename T, typename Dest, typename Source +      BOOST_MPL_AUX_LAMBDA_ARITY_PARAM( +          typename Arity /* = ... (see substitute_fwd.hpp) */ +        ) +    > +struct substitute +{ +    typedef T type; +}; + +// +// tag substitution specializations +// + +#define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG(CV_) \ +    template <typename Dest, typename Source> \ +    struct substitute< \ +          CV_ Source \ +        , Dest \ +        , Source \ +          BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<-1>) \ +        > \ +    { \ +        typedef CV_ Dest type; \ +    }; \ +    /**/ + +BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG( BOOST_PP_EMPTY() ) +BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG(const) +BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG(volatile) +BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG(const volatile) + +#undef BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG + +// +// pointer specializations +// +#define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER(CV_) \ +    template <typename T, typename Dest, typename Source> \ +    struct substitute< \ +          T * CV_ \ +        , Dest \ +        , Source \ +          BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<-1>) \ +        > \ +    { \ +        typedef typename substitute< \ +              T, Dest, Source \ +            >::type * CV_ type; \ +    }; \ +    /**/ + +BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER( BOOST_PP_EMPTY() ) +BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER(const) +BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER(volatile) +BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER(const volatile) + +#undef BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER + +// +// reference specializations +// +template <typename T, typename Dest, typename Source> +struct substitute< +      T& +    , Dest +    , Source +      BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<-1>) +    > +{ +    typedef typename substitute< +          T, Dest, Source +        >::type & type; +}; + +// +// template expression (i.e., F<...>) specializations +// + +#define BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF_IMPL(N) \ +    typedef typename substitute< \ +          BOOST_PP_CAT(U,N), Dest, Source \ +        >::type BOOST_PP_CAT(u,N); \ +    /**/ + +#define BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF(z, N, _) \ +    BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF_IMPL( BOOST_PP_INC(N) ) \ +    /**/ + +#define BOOST_PP_ITERATION_LIMITS (0,BOOST_MPL_LIMIT_METAFUNCTION_ARITY) +#define BOOST_PP_FILENAME_1 "boost/variant/detail/substitute.hpp" +#include BOOST_PP_ITERATE() + +#undef BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF_IMPL +#undef BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF + +#endif // !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_SUBSTITUTE_HPP + +///// iteration, depth == 1 + +#elif BOOST_PP_ITERATION_DEPTH() == 1 +#define i BOOST_PP_FRAME_ITERATION(1) + +#if i > 0 + +// +// template specializations +// +template < +      template < BOOST_MPL_PP_PARAMS(i,typename P) > class T +    , BOOST_MPL_PP_PARAMS(i,typename U) +    , typename Dest +    , typename Source +    > +struct substitute< +      T< BOOST_MPL_PP_PARAMS(i,U) > +    , Dest +    , Source +      BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<( i )>) +    > +{ +private: +    BOOST_MPL_PP_REPEAT(i, BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF, _) + +public: +    typedef T< BOOST_MPL_PP_PARAMS(i,u) > type; +}; + +// +// function specializations +// +template < +      typename R +    , BOOST_MPL_PP_PARAMS(i,typename U) +    , typename Dest +    , typename Source +    > +struct substitute< +      R (*)( BOOST_MPL_PP_PARAMS(i,U) ) +    , Dest +    , Source +      BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<-1>) +    > +{ +private: +    typedef typename substitute< R, Dest, Source >::type r; +    BOOST_MPL_PP_REPEAT(i, BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF, _) + +public: +    typedef r (*type)( BOOST_MPL_PP_PARAMS(i,u) ); +}; + +#elif i == 0 + +// +// zero-arg function specialization +// +template < +      typename R, typename Dest, typename Source +    > +struct substitute< +      R (*)( void ) +    , Dest +    , Source +      BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<-1>) +    > +{ +private: +    typedef typename substitute< R, Dest, Source >::type r; + +public: +    typedef r (*type)( void ); +}; + +#endif // i + +#undef i +#endif // BOOST_PP_IS_ITERATING diff --git a/3rdParty/Boost/src/boost/variant/detail/substitute_fwd.hpp b/3rdParty/Boost/src/boost/variant/detail/substitute_fwd.hpp new file mode 100644 index 0000000..1723847 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/substitute_fwd.hpp @@ -0,0 +1,59 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/substitute_fwd.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_SUBSTITUTE_FWD_HPP +#define BOOST_VARIANT_DETAIL_SUBSTITUTE_FWD_HPP + +#include "boost/mpl/aux_/lambda_arity_param.hpp" +#include "boost/mpl/aux_/template_arity.hpp" +#include "boost/mpl/int_fwd.hpp" + + +/////////////////////////////////////////////////////////////////////////////// +// BOOST_VARIANT_DETAIL_NO_SUBSTITUTE +// +// Defined if 'substitute' is not implementable on the current compiler. +// + +#include "boost/mpl/aux_/config/ctps.hpp" +#include "boost/mpl/aux_/config/ttp.hpp" + +#if defined(BOOST_NO_TEMPLATE_TEMPLATE_PARAMETERS) \ + || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \ + && !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) +#   define BOOST_VARIANT_DETAIL_NO_SUBSTITUTE +#endif + +namespace boost { +namespace detail { namespace variant { + +#if !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) + +/////////////////////////////////////////////////////////////////////////////// +// metafunction substitute +// +// Substitutes one type for another in the given type expression. +// +template < +      typename T, typename Dest, typename Source +      BOOST_MPL_AUX_LAMBDA_ARITY_PARAM( +          typename Arity = mpl::int_< mpl::aux::template_arity<T>::value > +        ) +    > +struct substitute; + +#endif // !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_SUBSTITUTE_FWD_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/variant_io.hpp b/3rdParty/Boost/src/boost/variant/detail/variant_io.hpp new file mode 100644 index 0000000..c72491a --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/variant_io.hpp @@ -0,0 +1,92 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/variant_io.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman, Itay Maman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_VARIANT_IO_HPP +#define BOOST_VARIANT_DETAIL_VARIANT_IO_HPP + +#include <iosfwd> // for std::basic_ostream forward declare + +#include "boost/variant/variant_fwd.hpp" + +#include "boost/detail/templated_streams.hpp" +#include "boost/variant/static_visitor.hpp" + +namespace boost { + +/////////////////////////////////////////////////////////////////////////////// +// function template operator<< +// +// Outputs the content of the given variant to the given ostream. +// + +// forward declare (allows output of embedded variant< variant< ... >, ... >) +template < +      BOOST_TEMPLATED_STREAM_ARGS(E,T) +    BOOST_TEMPLATED_STREAM_COMMA +      BOOST_VARIANT_ENUM_PARAMS(typename U) +    > +inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<( +      BOOST_TEMPLATED_STREAM(ostream, E,T)& out +    , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs +    ); + +namespace detail { namespace variant { + +template <typename OStream> +class printer +    : public boost::static_visitor<> +{ +private: // representation + +    OStream& out_; + +public: // structors + +    explicit printer(OStream& out) +        : out_( out ) +    { +    } + +public: // visitor interface + +    template <typename T> +    void operator()(const T& operand) const +    { +        out_ << operand; +    } + +}; + +}} // namespace detail::variant + +template < +      BOOST_TEMPLATED_STREAM_ARGS(E,T) +    BOOST_TEMPLATED_STREAM_COMMA +      BOOST_VARIANT_ENUM_PARAMS(typename U) +    > +inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<( +      BOOST_TEMPLATED_STREAM(ostream, E,T)& out +    , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs +    ) +{ +    detail::variant::printer< +          BOOST_TEMPLATED_STREAM(ostream, E,T) +        > visitor(out); + +    rhs.apply_visitor(visitor); + +    return out; +} + +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_VARIANT_IO_HPP diff --git a/3rdParty/Boost/src/boost/variant/detail/visitation_impl.hpp b/3rdParty/Boost/src/boost/variant/detail/visitation_impl.hpp new file mode 100644 index 0000000..36ab906 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/visitation_impl.hpp @@ -0,0 +1,286 @@ +//----------------------------------------------------------------------------- +// boost variant/detail/visitation_impl.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_DETAIL_VISITATION_IMPL_HPP +#define BOOST_VARIANT_DETAIL_VISITATION_IMPL_HPP + +#include "boost/config.hpp" + +#include "boost/variant/detail/backup_holder.hpp" +#include "boost/variant/detail/cast_storage.hpp" +#include "boost/variant/detail/forced_return.hpp" +#include "boost/variant/detail/generic_result_type.hpp" + +#include "boost/assert.hpp" +#include "boost/mpl/eval_if.hpp" +#include "boost/mpl/bool.hpp" +#include "boost/mpl/identity.hpp" +#include "boost/mpl/int.hpp" +#include "boost/mpl/next.hpp" +#include "boost/mpl/deref.hpp" +#include "boost/mpl/or.hpp" +#include "boost/preprocessor/cat.hpp" +#include "boost/preprocessor/inc.hpp" +#include "boost/preprocessor/repeat.hpp" +#include "boost/type_traits/is_same.hpp" +#include "boost/type_traits/has_nothrow_copy.hpp" +#include "boost/variant/detail/has_nothrow_move.hpp" + + +/////////////////////////////////////////////////////////////////////////////// +// BOOST_VARIANT_VISITATION_UNROLLING_LIMIT +// +// Unrolls variant's visitation mechanism to reduce template instantiation +// and potentially increase runtime performance. (TODO: Investigate further.) +// +#if !defined(BOOST_VARIANT_VISITATION_UNROLLING_LIMIT) +#   define BOOST_VARIANT_VISITATION_UNROLLING_LIMIT   \ +        BOOST_VARIANT_LIMIT_TYPES +#endif + +namespace boost { +namespace detail { namespace variant { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class apply_visitor_unrolled +// +// Tag type indicates when visitation_impl is unrolled. +// +struct apply_visitor_unrolled {}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class template visitation_impl_step +// +// "Never ending" iterator range facilitates visitation_impl unrolling. +// + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename Iter, typename LastIter> +struct visitation_impl_step +{ +    typedef typename mpl::deref<Iter>::type type; + +    typedef typename mpl::next<Iter>::type next_iter; +    typedef visitation_impl_step< +          next_iter, LastIter +        > next; +}; + +template <typename LastIter> +struct visitation_impl_step< LastIter,LastIter > +{ +    typedef apply_visitor_unrolled type; +    typedef visitation_impl_step next; +}; + +#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename Iter, typename LastIter> +struct visitation_impl_step +{ +    typedef typename mpl::eval_if< +          is_same<Iter, LastIter> +        , mpl::identity<apply_visitor_unrolled> +        , Iter +        >::type type; + +    typedef typename mpl::eval_if< +          is_same<type, apply_visitor_unrolled> //is_same<Iter, LastIter> +        , mpl::identity<LastIter> +        , mpl::next<Iter> +        >::type next_iter; + +    typedef visitation_impl_step< +          next_iter, LastIter +        > next; +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround + +/////////////////////////////////////////////////////////////////////////////// +// (detail) function template visitation_impl_invoke +// +// Invokes the given visitor on the specified type in the given storage. +// + +template <typename Visitor, typename VoidPtrCV, typename T> +inline +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type) +visitation_impl_invoke_impl( +      int, Visitor& visitor, VoidPtrCV storage, T* +    , mpl::true_// never_uses_backup +    ) +{ +    return visitor.internal_visit( +          cast_storage<T>(storage), 1L +        ); +} + +template <typename Visitor, typename VoidPtrCV, typename T> +inline +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type) +visitation_impl_invoke_impl( +      int internal_which, Visitor& visitor, VoidPtrCV storage, T* +    , mpl::false_// never_uses_backup +    ) +{ +    if (internal_which >= 0) +    { +        return visitor.internal_visit( +              cast_storage<T>(storage), 1L +            ); +    } +    else +    { +        return visitor.internal_visit( +              cast_storage< backup_holder<T> >(storage), 1L +            ); +    } +} + +template <typename Visitor, typename VoidPtrCV, typename T, typename NoBackupFlag> +inline +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type) +visitation_impl_invoke( +      int internal_which, Visitor& visitor, VoidPtrCV storage, T* t +    , NoBackupFlag +    , int +    ) +{ +    typedef typename mpl::or_< +          NoBackupFlag +        , has_nothrow_move_constructor<T> +        , has_nothrow_copy<T> +        >::type never_uses_backup; + +    return visitation_impl_invoke_impl( +          internal_which, visitor, storage, t +        , never_uses_backup() +        ); +} + +template <typename Visitor, typename VoidPtrCV, typename NBF> +inline +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type) +visitation_impl_invoke(int, Visitor&, VoidPtrCV, apply_visitor_unrolled*, NBF, long) +{ +    // should never be here at runtime: +    BOOST_ASSERT(false); +    typedef typename Visitor::result_type result_type; +    return ::boost::detail::variant::forced_return< result_type >(); +} + +/////////////////////////////////////////////////////////////////////////////// +// (detail) function template visitation_impl +// +// Invokes the given visitor on the type in the given variant storage. +// + +template < +      typename W, typename S +    , typename Visitor, typename VPCV +    , typename NBF +    > +inline +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type) +visitation_impl( +      int, int, Visitor&, VPCV +    , mpl::true_ // is_apply_visitor_unrolled +    , NBF, W* = 0, S* = 0 +    ) +{ +    // should never be here at runtime: +    BOOST_ASSERT(false); +    typedef typename Visitor::result_type result_type; +    return ::boost::detail::variant::forced_return< result_type >(); +} + +template < +      typename Which, typename step0 +    , typename Visitor, typename VoidPtrCV +    , typename NoBackupFlag +    > +inline +    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type) +visitation_impl( +      const int internal_which, const int logical_which +    , Visitor& visitor, VoidPtrCV storage +    , mpl::false_ // is_apply_visitor_unrolled +    , NoBackupFlag no_backup_flag +    , Which* = 0, step0* = 0 +    ) +{ +    // Typedef apply_visitor_unrolled steps and associated types... +#   define BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_TYPEDEF(z, N, _) \ +    typedef typename BOOST_PP_CAT(step,N)::type BOOST_PP_CAT(T,N); \ +    typedef typename BOOST_PP_CAT(step,N)::next \ +        BOOST_PP_CAT(step, BOOST_PP_INC(N)); \ +    /**/ + +    BOOST_PP_REPEAT( +          BOOST_VARIANT_VISITATION_UNROLLING_LIMIT +        , BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_TYPEDEF +        , _ +        ) + +#   undef BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_TYPEDEF + +    // ...switch on the target which-index value... +    switch (logical_which) +    { + +    // ...applying the appropriate case: +#   define BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_CASE(z, N, _) \ +    case (Which::value + (N)): \ +        return visitation_impl_invoke( \ +              internal_which, visitor, storage \ +            , static_cast<BOOST_PP_CAT(T,N)*>(0) \ +            , no_backup_flag, 1L \ +            ); \ +    /**/ + +    BOOST_PP_REPEAT( +          BOOST_VARIANT_VISITATION_UNROLLING_LIMIT +        , BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_CASE +        , _ +        ) + +#   undef BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_CASE + +    } + +    // If not handled in this iteration, continue unrolling: +    typedef mpl::int_< +          Which::value + (BOOST_VARIANT_VISITATION_UNROLLING_LIMIT) +        > next_which; + +    typedef BOOST_PP_CAT(step, BOOST_VARIANT_VISITATION_UNROLLING_LIMIT) +        next_step; + +    typedef typename next_step::type next_type; +    typedef typename is_same< next_type,apply_visitor_unrolled >::type +        is_apply_visitor_unrolled; + +    return visitation_impl( +          internal_which, logical_which +        , visitor, storage +        , is_apply_visitor_unrolled() +        , no_backup_flag +        , static_cast<next_which*>(0), static_cast<next_step*>(0) +        ); +} + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_VISITATION_IMPL_HPP diff --git a/3rdParty/Boost/src/boost/variant/get.hpp b/3rdParty/Boost/src/boost/variant/get.hpp new file mode 100644 index 0000000..99a65f6 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/get.hpp @@ -0,0 +1,202 @@ +//----------------------------------------------------------------------------- +// boost variant/get.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman, Itay Maman +// +// 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) + +#ifndef BOOST_VARIANT_GET_HPP +#define BOOST_VARIANT_GET_HPP + +#include <exception> + +#include "boost/config.hpp" +#include "boost/detail/workaround.hpp" +#include "boost/utility/addressof.hpp" +#include "boost/variant/variant_fwd.hpp" + +#include "boost/type_traits/add_reference.hpp" +#include "boost/type_traits/add_pointer.hpp" + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +#   include "boost/mpl/bool.hpp" +#   include "boost/mpl/or.hpp" +#   include "boost/type_traits/is_same.hpp" +#endif + +namespace boost { + +////////////////////////////////////////////////////////////////////////// +// class bad_get +// +// The exception thrown in the event of a failed get of a value. +// +class bad_get +    : public std::exception +{ +public: // std::exception implementation + +    virtual const char * what() const throw() +    { +        return "boost::bad_get: " +               "failed value get using boost::get"; +    } + +}; + +////////////////////////////////////////////////////////////////////////// +// function template get<T> +// +// Retrieves content of given variant object if content is of type T. +// Otherwise: pointer ver. returns 0; reference ver. throws bad_get. +// + +namespace detail { namespace variant { + +// (detail) class template get_visitor +// +// Generic static visitor that: if the value is of the specified type, +// returns a pointer to the value it visits; else a null pointer. +// +template <typename T> +struct get_visitor +{ +private: // private typedefs + +    typedef typename add_pointer<T>::type pointer; +    typedef typename add_reference<T>::type reference; + +public: // visitor typedefs + +    typedef pointer result_type; + +public: // visitor interfaces + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + +    pointer operator()(reference operand) const +    { +        return boost::addressof(operand); +    } + +    template <typename U> +    pointer operator()(const U&) const +    { +        return static_cast<pointer>(0); +    } + +#else // MSVC6 + +private: // helpers, for visitor interfaces (below) + +    pointer execute_impl(reference operand, mpl::true_) const +    { +        return boost::addressof(operand); +    } + +    template <typename U> +    pointer execute_impl(const U& operand, mpl::false_) const +    { +        return static_cast<pointer>(0); +    } + +public: // visitor interfaces + +    template <typename U> +    pointer operator()(U& operand) const +    { +        // MSVC6 finds normal implementation (above) ambiguous, +        // so we must explicitly disambiguate + +        typedef typename mpl::or_< +              is_same<U, T> +            , is_same<const U, T> +            >::type U_is_T; + +        return execute_impl(operand, U_is_T()); +    } + +#endif // MSVC6 workaround + +}; + +}} // namespace detail::variant + +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551)) +#   define BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(t)  \ +    BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t) +#else +#   define BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(t)  \ +    , t* = 0 +#endif + +template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) > +inline +    typename add_pointer<U>::type +get( +      boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >* operand +      BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U) +    ) +{ +    typedef typename add_pointer<U>::type U_ptr; +    if (!operand) return static_cast<U_ptr>(0); + +    detail::variant::get_visitor<U> v; +    return operand->apply_visitor(v); +} + +template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) > +inline +    typename add_pointer<const U>::type +get( +      const boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >* operand +      BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U) +    ) +{ +    typedef typename add_pointer<const U>::type U_ptr; +    if (!operand) return static_cast<U_ptr>(0); + +    detail::variant::get_visitor<const U> v; +    return operand->apply_visitor(v); +} + +template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) > +inline +    typename add_reference<U>::type +get( +      boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >& operand +      BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U) +    ) +{ +    typedef typename add_pointer<U>::type U_ptr; +    U_ptr result = get<U>(&operand); + +    if (!result) +        throw bad_get(); +    return *result; +} + +template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) > +inline +    typename add_reference<const U>::type +get( +      const boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >& operand +      BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U) +    ) +{ +    typedef typename add_pointer<const U>::type U_ptr; +    U_ptr result = get<const U>(&operand); + +    if (!result) +        throw bad_get(); +    return *result; +} + +} // namespace boost + +#endif // BOOST_VARIANT_GET_HPP diff --git a/3rdParty/Boost/src/boost/variant/recursive_variant.hpp b/3rdParty/Boost/src/boost/variant/recursive_variant.hpp new file mode 100644 index 0000000..c4cd3b0 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/recursive_variant.hpp @@ -0,0 +1,182 @@ +//----------------------------------------------------------------------------- +// boost variant/recursive_variant.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_RECURSIVE_VARIANT_HPP +#define BOOST_VARIANT_RECURSIVE_VARIANT_HPP + +#include "boost/variant/variant_fwd.hpp" +#include "boost/variant/detail/enable_recursive.hpp" +#include "boost/variant/detail/substitute_fwd.hpp" +#include "boost/variant/detail/make_variant_list.hpp" +#include "boost/variant/detail/over_sequence.hpp" + +#include "boost/mpl/aux_/lambda_arity_param.hpp" + +#if !defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT) +#   include "boost/mpl/eval_if.hpp" +#   include "boost/mpl/identity.hpp" +#   include "boost/mpl/protect.hpp" +#   include "boost/mpl/transform.hpp" +#else +#   include "boost/preprocessor/cat.hpp" +#   include "boost/preprocessor/repeat.hpp" +#endif + +#include "boost/mpl/bool.hpp" +#include "boost/mpl/is_sequence.hpp" +#include "boost/variant/variant.hpp" + +namespace boost { + +namespace detail { namespace variant { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction specialization substitute +// +// Handles embedded variant types when substituting for recursive_variant_. +// + +#if !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) + +template < +      BOOST_VARIANT_ENUM_PARAMS(typename T) +    , typename RecursiveVariant +      BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(typename Arity) +    > +struct substitute< +      ::boost::variant< +          recursive_flag< T0 > +        , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T) +        > +    , RecursiveVariant +    , ::boost::recursive_variant_ +      BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(Arity) +    > +{ +    typedef ::boost::variant< +          recursive_flag< T0 > +        , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T) +        > type; +}; + +template < +      BOOST_VARIANT_ENUM_PARAMS(typename T) +    , typename RecursiveVariant +      BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(typename Arity) +    > +struct substitute< +      ::boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) > +    , RecursiveVariant +    , ::boost::recursive_variant_ +      BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(Arity) +    > +{ + +#if !defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT) + +private: // helpers, for metafunction result (below) + +    typedef typename mpl::eval_if< +          ::boost::detail::variant::is_over_sequence<T0> +        , mpl::identity< T0 > +        , make_variant_list< BOOST_VARIANT_ENUM_PARAMS(T) > +        >::type initial_types; + +    typedef typename mpl::transform< +          initial_types +        , mpl::protect< quoted_enable_recursive<RecursiveVariant,mpl::true_> > +        >::type types; + +public: // metafunction result + +    typedef ::boost::variant< types > type; + +#else // defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT) + +private: // helpers, for metafunction result (below) + +    #define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS(z,N,_)  \ +        typedef typename enable_recursive<   \ +              BOOST_PP_CAT(T,N)              \ +            , RecursiveVariant               \ +            , mpl::true_                     \ +            >::type BOOST_PP_CAT(wknd_T,N);  \ +        /**/ + +    BOOST_PP_REPEAT( +          BOOST_VARIANT_LIMIT_TYPES +        , BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS +        , _ +        ) + +    #undef BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS + +public: // metafunction result + +    typedef ::boost::variant< BOOST_VARIANT_ENUM_PARAMS(wknd_T) > type; + +#endif // BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT workaround + +}; + +#else // defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) + +// +// no specializations: embedded variants unsupported on these compilers! +// + +#endif // !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) + +}} // namespace detail::variant + +/////////////////////////////////////////////////////////////////////////////// +// metafunction make_recursive_variant +// +// See docs and boost/variant/variant_fwd.hpp for more information. +// +template < BOOST_VARIANT_ENUM_PARAMS(typename T) > +struct make_recursive_variant +{ +public: // metafunction result + +    typedef boost::variant< +          detail::variant::recursive_flag< T0 > +        , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T) +        > type; + +}; + +/////////////////////////////////////////////////////////////////////////////// +// metafunction make_recursive_variant_over +// +// See docs and boost/variant/variant_fwd.hpp for more information. +// +template <typename Types> +struct make_recursive_variant_over +{ +private: // precondition assertions + +#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +    BOOST_STATIC_ASSERT(( ::boost::mpl::is_sequence<Types>::value )); +#endif + +public: // metafunction result + +    typedef typename make_recursive_variant< +          detail::variant::over_sequence< Types > +        >::type type; + +}; + +} // namespace boost + +#endif // BOOST_VARIANT_RECURSIVE_VARIANT_HPP diff --git a/3rdParty/Boost/src/boost/variant/recursive_wrapper.hpp b/3rdParty/Boost/src/boost/variant/recursive_wrapper.hpp new file mode 100644 index 0000000..ddc7002 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/recursive_wrapper.hpp @@ -0,0 +1,123 @@ +//----------------------------------------------------------------------------- +// boost variant/recursive_wrapper.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman, Itay Maman +// +// 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) + +#ifndef BOOST_VARIANT_RECURSIVE_WRAPPER_HPP +#define BOOST_VARIANT_RECURSIVE_WRAPPER_HPP + +#include "boost/variant/recursive_wrapper_fwd.hpp" +#include "boost/checked_delete.hpp" + +namespace boost { + +////////////////////////////////////////////////////////////////////////// +// class template recursive_wrapper +// +// See docs and recursive_wrapper_fwd.hpp for more information. +// + +template <typename T> +class recursive_wrapper +{ +public: // typedefs + +    typedef T type; + +private: // representation + +    T* p_; + +public: // structors + +    ~recursive_wrapper(); +    recursive_wrapper(); + +    recursive_wrapper(const recursive_wrapper& operand); +    recursive_wrapper(const T& operand); + +private: // helpers, for modifiers (below) + +    void assign(const T& rhs); + +public: // modifiers + +    recursive_wrapper& operator=(const recursive_wrapper& rhs) +    { +        assign( rhs.get() ); +        return *this; +    } + +    recursive_wrapper& operator=(const T& rhs) +    { +        assign( rhs ); +        return *this; +    } + +    void swap(recursive_wrapper& operand) +    { +        T* temp = operand.p_; +        operand.p_ = p_; +        p_ = temp; +    } + +public: // queries + +    T& get() { return *get_pointer(); } +    const T& get() const { return *get_pointer(); } + +    T* get_pointer() { return p_; } +    const T* get_pointer() const { return p_; } + +}; + +template <typename T> +recursive_wrapper<T>::~recursive_wrapper() +{ +    boost::checked_delete(p_); +} + +template <typename T> +recursive_wrapper<T>::recursive_wrapper() +    : p_(new T) +{ +} + +template <typename T> +recursive_wrapper<T>::recursive_wrapper(const recursive_wrapper& operand) +    : p_(new T( operand.get() )) +{ +} + +template <typename T> +recursive_wrapper<T>::recursive_wrapper(const T& operand) +    : p_(new T(operand)) +{ +} + +template <typename T> +void recursive_wrapper<T>::assign(const T& rhs) +{ +    this->get() = rhs; +} + +// function template swap +// +// Swaps two recursive_wrapper<T> objects of the same type T. +// +template <typename T> +inline void swap(recursive_wrapper<T>& lhs, recursive_wrapper<T>& rhs) +{ +    lhs.swap(rhs); +} + +} // namespace boost + +#endif // BOOST_VARIANT_RECURSIVE_WRAPPER_HPP diff --git a/3rdParty/Boost/src/boost/variant/recursive_wrapper_fwd.hpp b/3rdParty/Boost/src/boost/variant/recursive_wrapper_fwd.hpp new file mode 100644 index 0000000..69a0ec7 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/recursive_wrapper_fwd.hpp @@ -0,0 +1,147 @@ +//----------------------------------------------------------------------------- +// boost variant/recursive_wrapper_fwd.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002 +// Eric Friedman, Itay Maman +// +// Portions Copyright (C) 2002 David Abrahams +// +// 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) + +#ifndef BOOST_VARIANT_RECURSIVE_WRAPPER_FWD_HPP +#define BOOST_VARIANT_RECURSIVE_WRAPPER_FWD_HPP + +#include "boost/mpl/aux_/config/ctps.hpp" +#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) +#   include "boost/mpl/eval_if.hpp" +#   include "boost/mpl/bool.hpp" +#   include "boost/mpl/identity.hpp" +#   include "boost/type.hpp" +#endif + +#include "boost/mpl/aux_/lambda_support.hpp" + +// should be the last #include +#include "boost/type_traits/detail/bool_trait_def.hpp" + +namespace boost { + +////////////////////////////////////////////////////////////////////////// +// class template recursive_wrapper +// +// Enables recursive types in templates by breaking cyclic dependencies. +// +// For example: +// +//   class my; +// +//   typedef variant< int, recursive_wrapper<my> > var; +// +//   class my { +//     var var_; +//     ... +//   }; +// +template <typename T> class recursive_wrapper; + +/////////////////////////////////////////////////////////////////////////////// +// metafunction is_recursive_wrapper (modeled on code by David Abrahams) +// +// True iff specified type matches recursive_wrapper<T>. +// + +namespace detail { + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename T> +struct is_recursive_wrapper_impl +    : mpl::false_ +{ +}; + +template <typename T> +struct is_recursive_wrapper_impl< recursive_wrapper<T> > +    : mpl::true_ +{ +}; + +#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +typedef char (&yes_recursive_wrapper_t)[1]; +typedef char (&no_recursive_wrapper_t)[2]; + +no_recursive_wrapper_t is_recursive_wrapper_test(...); + +template<typename T> +yes_recursive_wrapper_t is_recursive_wrapper_test( +      type< ::boost::recursive_wrapper<T> > +    ); + +template<typename T> +struct is_recursive_wrapper_impl +{ +    BOOST_STATIC_CONSTANT(bool, value = ( +          sizeof(is_recursive_wrapper_test(type<T>())) +          == sizeof(yes_recursive_wrapper_t) +        )); +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( +      is_recursive_wrapper +    , T +    , (::boost::detail::is_recursive_wrapper_impl<T>::value) +    ) + +/////////////////////////////////////////////////////////////////////////////// +// metafunction unwrap_recursive +// +// If specified type T matches recursive_wrapper<U>, then U; else T. +// + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename T> +struct unwrap_recursive +{ +    typedef T type; + +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,unwrap_recursive,(T)) +}; + +template <typename T> +struct unwrap_recursive< recursive_wrapper<T> > +{ +    typedef T type; + +    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,unwrap_recursive,(T)) +}; + +#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) + +template <typename T> +struct unwrap_recursive +    : mpl::eval_if< +          is_recursive_wrapper<T> +        , T +        , mpl::identity< T > +        > +{ +    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,unwrap_recursive,(T)) +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround + +} // namespace boost + +#include "boost/type_traits/detail/bool_trait_undef.hpp" + +#endif // BOOST_VARIANT_RECURSIVE_WRAPPER_FWD_HPP diff --git a/3rdParty/Boost/src/boost/variant/static_visitor.hpp b/3rdParty/Boost/src/boost/variant/static_visitor.hpp new file mode 100644 index 0000000..b59b6f5 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/static_visitor.hpp @@ -0,0 +1,97 @@ +//----------------------------------------------------------------------------- +// boost variant/static_visitor.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_STATIC_VISITOR_HPP +#define BOOST_VARIANT_STATIC_VISITOR_HPP + +#include "boost/config.hpp" +#include "boost/detail/workaround.hpp" + +#include "boost/mpl/if.hpp" +#include "boost/type_traits/is_base_and_derived.hpp" + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +#   include "boost/type_traits/is_same.hpp" +#endif + +// should be the last #include +#include "boost/type_traits/detail/bool_trait_def.hpp" + +namespace boost { + +////////////////////////////////////////////////////////////////////////// +// class template static_visitor +// +// An empty base class that typedefs the return type of a deriving static +// visitor. The class is analogous to std::unary_function in this role. +// + +namespace detail { + +    struct is_static_visitor_tag { }; + +    typedef void static_visitor_default_return; + +} // namespace detail + +template <typename R = ::boost::detail::static_visitor_default_return> +class static_visitor +    : public detail::is_static_visitor_tag +{ +public: // typedefs + +    typedef R result_type; + +protected: // for use as base class only + +    static_visitor() { } +    ~static_visitor() { } + +}; + +////////////////////////////////////////////////////////////////////////// +// metafunction is_static_visitor +// +// Value metafunction indicates whether the specified type derives from +// static_visitor<...>. +// +// NOTE #1: This metafunction does NOT check whether the specified type +//  fulfills the requirements of the StaticVisitor concept. +// +// NOTE #2: This template never needs to be specialized! +// + +namespace detail { + +template <typename T> +struct is_static_visitor_impl +{ +    BOOST_STATIC_CONSTANT(bool, value =  +        (::boost::is_base_and_derived<  +            detail::is_static_visitor_tag, +            T +        >::value)); +}; + +} // namespace detail + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( +      is_static_visitor +    , T +    , (::boost::detail::is_static_visitor_impl<T>::value) +    ) + +} // namespace boost + +#include "boost/type_traits/detail/bool_trait_undef.hpp" + +#endif // BOOST_VARIANT_STATIC_VISITOR_HPP diff --git a/3rdParty/Boost/src/boost/variant/variant.hpp b/3rdParty/Boost/src/boost/variant/variant.hpp new file mode 100644 index 0000000..7e3c9e8 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/variant.hpp @@ -0,0 +1,1862 @@ +//----------------------------------------------------------------------------- +// boost variant/variant.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman, Itay Maman +// +// 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) + +#ifndef BOOST_VARIANT_VARIANT_HPP +#define BOOST_VARIANT_VARIANT_HPP + +#include <cstddef> // for std::size_t +#include <new> // for placement new + +#if !defined(BOOST_NO_TYPEID) +#include <typeinfo> // for typeid, std::type_info +#endif // BOOST_NO_TYPEID + +#include "boost/variant/detail/config.hpp" +#include "boost/mpl/aux_/config/eti.hpp" +#include "boost/mpl/aux_/value_wknd.hpp" + +#include "boost/variant/variant_fwd.hpp" +#include "boost/variant/detail/backup_holder.hpp" +#include "boost/variant/detail/enable_recursive_fwd.hpp" +#include "boost/variant/detail/forced_return.hpp" +#include "boost/variant/detail/initializer.hpp" +#include "boost/variant/detail/make_variant_list.hpp" +#include "boost/variant/detail/over_sequence.hpp" +#include "boost/variant/detail/visitation_impl.hpp" + +#include "boost/variant/detail/generic_result_type.hpp" +#include "boost/variant/detail/has_nothrow_move.hpp" +#include "boost/variant/detail/move.hpp" + +#include "boost/detail/reference_content.hpp" +#include "boost/aligned_storage.hpp" +#include "boost/blank.hpp" +#include "boost/static_assert.hpp" +#include "boost/preprocessor/cat.hpp" +#include "boost/preprocessor/repeat.hpp" +#include "boost/type_traits/alignment_of.hpp" +#include "boost/type_traits/add_const.hpp" +#include "boost/type_traits/has_nothrow_constructor.hpp" +#include "boost/type_traits/has_nothrow_copy.hpp" +#include "boost/type_traits/is_const.hpp" +#include "boost/type_traits/is_same.hpp" +#include "boost/utility/enable_if.hpp" +#include "boost/variant/recursive_wrapper_fwd.hpp" +#include "boost/variant/static_visitor.hpp" + +#include "boost/mpl/eval_if.hpp" +#include "boost/mpl/begin_end.hpp" +#include "boost/mpl/bool.hpp" +#include "boost/mpl/empty.hpp" +#include "boost/mpl/find_if.hpp" +#include "boost/mpl/front.hpp" +#include "boost/mpl/identity.hpp" +#include "boost/mpl/if.hpp" +#include "boost/mpl/int.hpp" +#include "boost/mpl/is_sequence.hpp" +#include "boost/mpl/iterator_range.hpp" +#include "boost/mpl/iter_fold_if.hpp" +#include "boost/mpl/logical.hpp" +#include "boost/mpl/max_element.hpp" +#include "boost/mpl/next.hpp" +#include "boost/mpl/deref.hpp" +#include "boost/mpl/pair.hpp" +#include "boost/mpl/protect.hpp" +#include "boost/mpl/push_front.hpp" +#include "boost/mpl/same_as.hpp" +#include "boost/mpl/size_t.hpp" +#include "boost/mpl/sizeof.hpp" +#include "boost/mpl/transform.hpp" +#include "boost/mpl/assert.hpp" + +/////////////////////////////////////////////////////////////////////////////// +// Implementation Macros: +// +// BOOST_VARIANT_VISITATION_UNROLLING_LIMIT +//   Defined in boost/variant/detail/visitation_impl.hpp. +// +// BOOST_VARIANT_MINIMIZE_SIZE +//   When #defined, implementation employs all known means to minimize the +//   size of variant obje   cts. However, often unsuccessful due to alignment +//   issues, and potentially harmful to runtime speed, so not enabled by +//   default. (TODO: Investigate further.) + +#if defined(BOOST_VARIANT_MINIMIZE_SIZE) +#   include <climits> // for SCHAR_MAX +#   include "boost/mpl/eval_if.hpp" +#   include "boost/mpl/equal_to.hpp" +#   include "boost/mpl/identity.hpp" +#   include "boost/mpl/int.hpp" +#   include "boost/mpl/if.hpp" +#   include "boost/mpl/less.hpp" +#   include "boost/mpl/long.hpp" +#   include "boost/mpl/O1_size.hpp" +#endif + + +namespace boost { + +namespace detail { namespace variant { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction max_value +// +// Finds the maximum value of the unary metafunction F over Sequence. +// +template <typename Sequence, typename F> +struct max_value +{ +private: // helpers, for metafunction result (below) + +    typedef typename mpl::transform1<Sequence, F>::type transformed_; +    typedef typename mpl::max_element<transformed_ +           +        >::type max_it; + +public: // metafunction result + +    typedef typename mpl::deref<max_it>::type +        type; + +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction find_fallback_type +// +// Provides a fallback (i.e., nothrow default-constructible) type from the +// specified sequence, or no_fallback_type if not found. +// +// This implementation is designed to prefer boost::blank over other potential +// fallback types, regardless of its position in the specified sequence. +// + +class no_fallback_type; + +struct find_fallback_type_pred +{ +    template <typename Iterator> +    struct apply +    { +    private: +        typedef typename mpl::deref<Iterator>::type t_; + +    public: +        typedef mpl::not_< has_nothrow_constructor<t_> > type; +    }; +}; + +template <typename Types> +struct find_fallback_type +{ +private: // helpers, for metafunction result (below) + +    typedef typename mpl::end<Types>::type end_it; + +    // [Find the first suitable fallback type...] + +    typedef typename mpl::iter_fold_if< +          Types +        , mpl::int_<0>, mpl::protect< mpl::next<> > +        , mpl::protect< find_fallback_type_pred > +        >::type first_result_; + +    typedef typename first_result_::first first_result_index; +    typedef typename first_result_::second first_result_it; + +    // [...now search the rest of the sequence for boost::blank...] + +    typedef typename mpl::iter_fold_if< +          mpl::iterator_range< first_result_it,end_it > +        , first_result_index, mpl::protect< mpl::next<> > +        , mpl::protect< mpl::not_same_as<boost::blank> > +        >::type second_result_; + +    typedef typename second_result_::second second_result_it; + +public: // metafunction result + +    // [...and return the results of the search:] +    typedef typename mpl::eval_if< +          is_same< second_result_it,end_it > +        , mpl::if_< +              is_same< first_result_it,end_it > +            , mpl::pair< no_fallback_type,no_fallback_type > +            , first_result_ +            > +        , mpl::identity< second_result_ > +        >::type type; + +}; + +#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) + +template<> +struct find_fallback_type<int> +{ +    typedef mpl::pair< no_fallback_type,no_fallback_type > type; +}; + +#endif // BOOST_MPL_CFG_MSVC_60_ETI_BUG workaround + +/////////////////////////////////////////////////////////////////////////////// +// (detail) metafunction make_storage +// +// Provides an aligned storage type capable of holding any of the types +// specified in the given type-sequence. +// + +template <typename Types, typename NeverUsesBackupFlag> +struct make_storage +{ +private: // helpers, for metafunction result (below) + +    typedef typename mpl::eval_if< +          NeverUsesBackupFlag +        , mpl::identity< Types > +        , mpl::push_front< +              Types, backup_holder<void*> +            > +        >::type types; + +    typedef typename max_value< +          types, mpl::sizeof_<mpl::_1> +        >::type max_size; + +#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551)) + +    typedef typename max_value< +          types, alignment_of<mpl::_1> +        >::type max_alignment; + +#else // borland + +    // temporary workaround -- use maximal alignment +    typedef mpl::size_t< -1 > max_alignment; + +#endif // borland workaround + +public: // metafunction result + +#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + +    typedef ::boost::aligned_storage< +          BOOST_MPL_AUX_VALUE_WKND(max_size)::value +        , BOOST_MPL_AUX_VALUE_WKND(max_alignment)::value +        > type; + +#else // MSVC7 and below + +    BOOST_STATIC_CONSTANT(std::size_t, msvc_max_size_c = max_size::value); +    BOOST_STATIC_CONSTANT(std::size_t, msvc_max_alignment_c = max_alignment::value); + +    typedef ::boost::aligned_storage< +          msvc_max_size_c +        , msvc_max_alignment_c +        > type; + +#endif // MSVC workaround + +}; + +#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG) + +template<> +struct make_storage<int,int> +{ +    typedef int type; +}; + +#endif // BOOST_MPL_CFG_MSVC_60_ETI_BUG workaround + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class destroyer +// +// Internal visitor that destroys the value it visits. +// +struct destroyer +    : public static_visitor<> +{ +public: // visitor interfaces + +    template <typename T> +        BOOST_VARIANT_AUX_RETURN_VOID_TYPE +    internal_visit(T& operand, int) const +    { +        operand.~T(); + +#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551)) || \ +    BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600)) +        operand; // suppresses warnings +#endif + +        BOOST_VARIANT_AUX_RETURN_VOID; +    } + +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class template known_get +// +// Visitor that returns a reference to content of the specified type. +// +// Precondition: visited variant MUST contain logical content of type T. +// +template <typename T> +class known_get +    : public static_visitor<T&> +{ + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + +public: // visitor interface + +    T& operator()(T& operand) const +    { +        return operand; +    } + +    template <typename U> +    T& operator()(U&) const +    { +        // logical error to be here: see precondition above +        BOOST_ASSERT(false); +        return ::boost::detail::variant::forced_return< T& >(); +    } + +#else // MSVC6 + +private: // helpers, for visitor interface (below) + +    T& execute(T& operand, mpl::true_) const +    { +        return operand; +    } + +    template <typename U> +    T& execute(U& operand, mpl::false_) const +    { +        // logical error to be here: see precondition above +        BOOST_ASSERT(false); +        return ::boost::detail::variant::forced_return< T& >(); +    } + +public: // visitor interface + +    template <typename U> +    T& operator()(U& operand) const +    { +        typedef typename is_same< U,T >::type +            U_is_T; + +        return execute(operand, U_is_T()); +    } + +#endif // MSVC6 workaround + +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class copy_into +// +// Internal visitor that copies the value it visits into the given buffer. +// +class copy_into +    : public static_visitor<> +{ +private: // representation + +    void* storage_; + +public: // structors + +    explicit copy_into(void* storage) +        : storage_(storage) +    { +    } + +public: // internal visitor interface + +    template <typename T> +        BOOST_VARIANT_AUX_RETURN_VOID_TYPE +    internal_visit(boost::detail::variant::backup_holder<T>& operand, long) const +    { +        new(storage_) T( operand.get() ); +        BOOST_VARIANT_AUX_RETURN_VOID; +    } + +    template <typename T> +        BOOST_VARIANT_AUX_RETURN_VOID_TYPE +    internal_visit(const boost::detail::variant::backup_holder<T>& operand, long) const +    { +        new(storage_) T( operand.get() ); +        BOOST_VARIANT_AUX_RETURN_VOID; +    } + +    template <typename T> +        BOOST_VARIANT_AUX_RETURN_VOID_TYPE +    internal_visit(const T& operand, int) const +    { +        new(storage_) T(operand); +        BOOST_VARIANT_AUX_RETURN_VOID; +    } + +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class assign_storage +// +// Internal visitor that assigns the given storage (which must be a +// constructed value of the same type) to the value it visits. +// +struct assign_storage +    : public static_visitor<> +{ +private: // representation + +    const void* rhs_storage_; + +public: // structors + +    explicit assign_storage(const void* rhs_storage) +        : rhs_storage_(rhs_storage) +    { +    } + +public: // internal visitor interfaces + +    template <typename T> +        BOOST_VARIANT_AUX_RETURN_VOID_TYPE +    internal_visit(backup_holder<T>& lhs_content, long) const +    { +        lhs_content.get() +            = static_cast< const backup_holder<T>* >(rhs_storage_)->get(); +        BOOST_VARIANT_AUX_RETURN_VOID; +    } + +    template <typename T> +        BOOST_VARIANT_AUX_RETURN_VOID_TYPE +    internal_visit(const backup_holder<T>& lhs_content, long) const +    { +        lhs_content.get() +            = static_cast< const backup_holder<T>* >(rhs_storage_)->get(); +        BOOST_VARIANT_AUX_RETURN_VOID; +    } + +    template <typename T> +        BOOST_VARIANT_AUX_RETURN_VOID_TYPE +    internal_visit(T& lhs_content, int) const +    { +        // NOTE TO USER : +        // Compile error here indicates one of variant's bounded types does +        // not meet the requirements of the Assignable concept. Thus, +        // variant is not Assignable. +        // +        // Hint: Are any of the bounded types const-qualified or references? +        // +        lhs_content = *static_cast< const T* >(rhs_storage_); +        BOOST_VARIANT_AUX_RETURN_VOID; +    } + +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class direct_assigner +// +// Generic static visitor that: if and only if the visited value is of the +// specified type, assigns the given value to the visited value and returns +// true; else returns false. +// +template <typename T> +class direct_assigner +    : public static_visitor<bool> +{ +private: // representation + +    const T& rhs_; + +public: // structors + +    explicit direct_assigner(const T& rhs) +        : rhs_(rhs) +    { +    } + +#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) + +public: // visitor interface + +    bool operator()(T& lhs) +    { +        lhs = rhs_; +        return true; +    } + +    template <typename U> +    bool operator()(U&) +    { +        return false; +    } + +#else // MSVC6 + +private: // helpers, for visitor interface (below) + +    bool execute(T& lhs, mpl::true_) +    { +        lhs = rhs_; +        return true; +    } + +    template <typename U> +    bool execute(U&, mpl::false_) +    { +        return false; +    } + +public: // visitor interface + +    template <typename U> +    bool operator()(U& lhs) +    { +        typedef typename is_same<U,T>::type U_is_T; +        return execute(lhs, U_is_T()); +    } + +#endif // MSVC6 workaround + +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600)) +private: +    // silence MSVC warning C4512: assignment operator could not be generated +    direct_assigner& operator= (direct_assigner const&); +#endif +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class backup_assigner +// +// Internal visitor that "assigns" the given value to the visited value, +// using backup to recover if the destroy-copy sequence fails. +// +// NOTE: This needs to be a friend of variant, as it needs access to +// indicate_which, indicate_backup_which, etc. +// +template <typename Variant, typename RhsT> +class backup_assigner +    : public static_visitor<> +{ +private: // representation + +    Variant& lhs_; +    int rhs_which_; +    const RhsT& rhs_content_; + +public: // structors + +    backup_assigner(Variant& lhs, int rhs_which, const RhsT& rhs_content) +        : lhs_(lhs) +        , rhs_which_(rhs_which) +        , rhs_content_(rhs_content) +    { +    } + +private: // helpers, for visitor interface (below) + +    template <typename LhsT> +    void backup_assign_impl( +          LhsT& lhs_content +        , mpl::true_// has_nothrow_move +        ) +    { +        // Move lhs content to backup... +        LhsT backup_lhs_content( +              ::boost::detail::variant::move(lhs_content) +            ); // nothrow + +        // ...destroy lhs content... +        lhs_content.~LhsT(); // nothrow + +        try +        { +            // ...and attempt to copy rhs content into lhs storage: +            new(lhs_.storage_.address()) RhsT(rhs_content_); +        } +        catch (...) +        { +            // In case of failure, restore backup content to lhs storage... +            new(lhs_.storage_.address()) +                LhsT( +                      ::boost::detail::variant::move(backup_lhs_content) +                    ); // nothrow + +            // ...and rethrow: +            throw; +        } + +        // In case of success, indicate new content type: +        lhs_.indicate_which(rhs_which_); // nothrow +    } + +    template <typename LhsT> +    void backup_assign_impl( +          LhsT& lhs_content +        , mpl::false_// has_nothrow_move +        ) +    { +        // Backup lhs content... +        LhsT* backup_lhs_ptr = new LhsT(lhs_content); + +        // ...destroy lhs content... +        lhs_content.~LhsT(); // nothrow + +        try +        { +            // ...and attempt to copy rhs content into lhs storage: +            new(lhs_.storage_.address()) RhsT(rhs_content_); +        } +        catch (...) +        { +            // In case of failure, copy backup pointer to lhs storage... +            new(lhs_.storage_.address()) +                backup_holder<LhsT>( backup_lhs_ptr ); // nothrow + +            // ...indicate now using backup... +            lhs_.indicate_backup_which( lhs_.which() ); // nothrow + +            // ...and rethrow: +            throw; +        } + +        // In case of success, indicate new content type... +        lhs_.indicate_which(rhs_which_); // nothrow + +        // ...and delete backup: +        delete backup_lhs_ptr; // nothrow +    } + +public: // visitor interface + +    template <typename LhsT> +        BOOST_VARIANT_AUX_RETURN_VOID_TYPE +    internal_visit(LhsT& lhs_content, int) +    { +        typedef typename has_nothrow_move_constructor<LhsT>::type +            nothrow_move; + +        backup_assign_impl( lhs_content, nothrow_move() ); + +        BOOST_VARIANT_AUX_RETURN_VOID; +    } + +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600)) +private: +    // silence MSVC warning C4512: assignment operator could not be generated +    backup_assigner& operator= (backup_assigner const&); +#endif +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class swap_with +// +// Visitor that swaps visited value with content of given variant. +// +// Precondition: Given variant MUST have same logical type as visited value. +// +template <typename Variant> +struct swap_with +    : public static_visitor<> +{ +private: // representation + +    Variant& toswap_; + +public: // structors + +    explicit swap_with(Variant& toswap) +        : toswap_(toswap) +    { +    } + +public: // internal visitor interfaces + +    template <typename T> +    void operator()(T& operand) const +    { +        // Since the precondition ensures types are same, get T... +        known_get<T> getter; +        T& other = toswap_.apply_visitor(getter); + +        // ...and swap: +        ::boost::detail::variant::move_swap( operand, other ); +    } + +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class reflect +// +// Generic static visitor that performs a typeid on the value it visits. +// + +#if !defined(BOOST_NO_TYPEID) + +class reflect +    : public static_visitor<const std::type_info&> +{ +public: // visitor interfaces + +    template <typename T> +    const std::type_info& operator()(const T&) const +    { +        return typeid(T); +    } + +}; + +#endif // BOOST_NO_TYPEID + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class comparer +// +// Generic static visitor that compares the content of the given lhs variant +// with the visited rhs content using Comp. +// +// Precondition: lhs.which() == rhs.which() +// +template <typename Variant, typename Comp> +class comparer +    : public static_visitor<bool> +{ +private: // representation + +    const Variant& lhs_; + +public: // structors + +    explicit comparer(const Variant& lhs) +        : lhs_(lhs) +    { +    } + +public: // visitor interfaces + +    template <typename T> +    bool operator()(const T& rhs_content) const +    { +        // Since the precondition ensures lhs and rhs types are same, get T... +        known_get<const T> getter; +        const T& lhs_content = lhs_.apply_visitor(getter); + +        // ...and compare lhs and rhs contents: +        return Comp()(lhs_content, rhs_content); +    } + +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class equal_comp +// +// Generic function object compares lhs with rhs using operator==. +// +struct equal_comp +{ +    template <typename T> +    bool operator()(const T& lhs, const T& rhs) const +    { +        return lhs == rhs; +    } +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class less_comp +// +// Generic function object compares lhs with rhs using operator<. +// +struct less_comp +{ +    template <typename T> +    bool operator()(const T& lhs, const T& rhs) const +    { +        return lhs < rhs; +    } +}; + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class template invoke_visitor +// +// Internal visitor that invokes the given visitor using: +//  * for wrappers (e.g., recursive_wrapper), the wrapper's held value. +//  * for all other values, the value itself. +// +template <typename Visitor> +class invoke_visitor +{ +private: // representation + +    Visitor& visitor_; + +public: // visitor typedefs + +    typedef typename Visitor::result_type +        result_type; + +public: // structors + +    explicit invoke_visitor(Visitor& visitor) +        : visitor_(visitor) +    { +    } + +#if !defined(BOOST_NO_VOID_RETURNS) + +public: // internal visitor interfaces + +    template <typename T> +    result_type internal_visit(T& operand, int) +    { +        return visitor_(operand); +    } + +#   if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0564)) +    template <typename T> +    result_type internal_visit(const T& operand, int) +    { +        return visitor_(operand); +    } +#   endif + +#else // defined(BOOST_NO_VOID_RETURNS) + +private: // helpers, for internal visitor interfaces (below) + +    template <typename T> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    visit_impl(T& operand, mpl::false_) +    { +        return visitor_(operand); +    } + +    template <typename T> +        BOOST_VARIANT_AUX_RETURN_VOID_TYPE +    visit_impl(T& operand, mpl::true_) +    { +        visitor_(operand); +        BOOST_VARIANT_AUX_RETURN_VOID; +    } + +public: // internal visitor interfaces + +    template <typename T> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    internal_visit(T& operand, int) +    { +        typedef typename is_same<result_type, void>::type +            has_void_result_type; + +        return visit_impl(operand, has_void_result_type()); +    } + +#endif // BOOST_NO_VOID_RETURNS) workaround + +public: // internal visitor interfaces, cont. + +    template <typename T> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    internal_visit(boost::recursive_wrapper<T>& operand, long) +    { +        return internal_visit( operand.get(), 1L ); +    } + +    template <typename T> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    internal_visit(const boost::recursive_wrapper<T>& operand, long) +    { +        return internal_visit( operand.get(), 1L ); +    } + +    template <typename T> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    internal_visit(boost::detail::reference_content<T>& operand, long) +    { +        return internal_visit( operand.get(), 1L ); +    } + +    template <typename T> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    internal_visit(const boost::detail::reference_content<T>& operand, long) +    { +        return internal_visit( operand.get(), 1L ); +    } + +    template <typename T> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    internal_visit(boost::detail::variant::backup_holder<T>& operand, long) +    { +        return internal_visit( operand.get(), 1L ); +    } + +    template <typename T> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    internal_visit(const boost::detail::variant::backup_holder<T>& operand, long) +    { +        return internal_visit( operand.get(), 1L ); +    } + +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600)) +private: +    // silence MSVC warning C4512: assignment operator could not be generated +    invoke_visitor& operator= (invoke_visitor const&); +#endif +}; + +}} // namespace detail::variant + +/////////////////////////////////////////////////////////////////////////////// +// class template variant (concept inspired by Andrei Alexandrescu) +// +// See docs and boost/variant/variant_fwd.hpp for more information. +// +template < +      typename T0_ +    , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(typename T) +    > +class variant +{ +private: // helpers, for typedefs (below) + +    typedef variant wknd_self_t; + +    struct is_recursive_ +        : detail::variant::is_recursive_flag<T0_> +    { +    }; + +    typedef typename mpl::eval_if< +          is_recursive_ +        , T0_ +        , mpl::identity< T0_ > +        >::type unwrapped_T0_; + +    struct is_sequence_based_ +        : detail::variant::is_over_sequence<unwrapped_T0_> +    { +    }; + +#if !defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT) + +private: // helpers, for typedefs (below) + +    typedef typename mpl::eval_if< +          is_sequence_based_ +        , unwrapped_T0_ // over_sequence<...>::type +        , detail::variant::make_variant_list< +              unwrapped_T0_ +            , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T) +            > +        >::type specified_types; + +    BOOST_STATIC_ASSERT(( +          ::boost::mpl::not_< mpl::empty<specified_types> >::value +        )); + +    typedef typename mpl::eval_if< +          is_recursive_ +        , mpl::transform< +              specified_types +            , mpl::protect< +                  detail::variant::quoted_enable_recursive<wknd_self_t> +                > +            > +        , mpl::identity< specified_types > +        >::type recursive_enabled_types; + +public: // public typedefs + +    typedef typename mpl::transform< +          recursive_enabled_types +        , unwrap_recursive<mpl::_1> +        >::type types; + +private: // internal typedefs + +    typedef typename mpl::transform< +          recursive_enabled_types +        , mpl::protect< detail::make_reference_content<> > +        >::type internal_types; + +    typedef typename mpl::front< +          internal_types +        >::type internal_T0; + +#else // defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT) + +private: // helpers, for typedefs (below) + +    typedef unwrapped_T0_ T0; + +    #define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS(z,N,_) \ +        typedef typename mpl::eval_if< \ +              is_recursive_ \ +            , detail::variant::enable_recursive< \ +                  BOOST_PP_CAT(T,N) \ +                , wknd_self_t \ +                > \ +            , mpl::identity< BOOST_PP_CAT(T,N) > \ +            >::type BOOST_PP_CAT(recursive_enabled_T,N); \ +        /**/ + +    BOOST_PP_REPEAT( +          BOOST_VARIANT_LIMIT_TYPES +        , BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS +        , _ +        ) + +    #undef BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS + +    #define BOOST_VARIANT_AUX_UNWRAP_RECURSIVE_TYPEDEFS(z,N,_) \ +        typedef typename unwrap_recursive< \ +              BOOST_PP_CAT(recursive_enabled_T,N) \ +            >::type BOOST_PP_CAT(public_T,N); \ +        /**/ + +    BOOST_PP_REPEAT( +          BOOST_VARIANT_LIMIT_TYPES +        , BOOST_VARIANT_AUX_UNWRAP_RECURSIVE_TYPEDEFS +        , _ +        ) + +    #undef BOOST_VARIANT_AUX_UNWRAP_RECURSIVE_TYPEDEFS + +public: // public typedefs + +    typedef typename detail::variant::make_variant_list< +          BOOST_VARIANT_ENUM_PARAMS(public_T) +        >::type types; + +private: // helpers, for internal typedefs (below) + +    #define BOOST_VARIANT_AUX_MAKE_REFERENCE_CONTENT_TYPEDEFS(z,N,_) \ +        typedef detail::make_reference_content< \ +              BOOST_PP_CAT(recursive_enabled_T,N) \ +            >::type BOOST_PP_CAT(internal_T,N); \ +        /**/ + +    BOOST_PP_REPEAT( +          BOOST_VARIANT_LIMIT_TYPES +        , BOOST_VARIANT_AUX_MAKE_REFERENCE_CONTENT_TYPEDEFS +        , _ +        ) + +    #undef BOOST_VARIANT_AUX_MAKE_REFERENCE_CONTENT_TYPEDEFS + +private: // internal typedefs + +    typedef typename detail::variant::make_variant_list< +          BOOST_VARIANT_ENUM_PARAMS(internal_T) +        >::type internal_types; + +private: // static precondition assertions + +    // NOTE TO USER : +    // variant< type-sequence > syntax is not supported on this compiler! +    // +    BOOST_MPL_ASSERT_NOT(( is_sequence_based_ )); + +#endif // BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT workaround + +private: // helpers, for representation (below) + +    typedef typename detail::variant::find_fallback_type< +          internal_types +        >::type fallback_type_result_; + +    typedef typename fallback_type_result_::first +        fallback_type_index_; +    typedef typename fallback_type_result_::second +        fallback_type_; + +    struct has_fallback_type_ +        : mpl::not_< +              is_same< fallback_type_, detail::variant::no_fallback_type > +            > +    { +    }; + +    typedef has_fallback_type_ +        never_uses_backup_flag; + +    typedef typename detail::variant::make_storage< +          internal_types, never_uses_backup_flag +        >::type storage_t; + +private: // helpers, for representation (below) + +    // which_ on: +    // * [0,  size<internal_types>) indicates stack content +    // * [-size<internal_types>, 0) indicates pointer to heap backup +    // if which_ >= 0: +    // * then which() -> which_ +    // * else which() -> -(which_ + 1) + +#if !defined(BOOST_VARIANT_MINIMIZE_SIZE) + +    typedef int which_t; + +#else // defined(BOOST_VARIANT_MINIMIZE_SIZE) + +    // [if O1_size available, then attempt which_t size optimization...] +    // [select signed char if fewer than SCHAR_MAX types, else signed int:] +    typedef typename mpl::eval_if< +          mpl::equal_to< mpl::O1_size<internal_types>, mpl::long_<-1> > +        , mpl::identity< int > +        , mpl::if_< +              mpl::less< mpl::O1_size<internal_types>, mpl::int_<SCHAR_MAX> > +            , signed char +            , int +            > +        >::type which_t; + +#endif // BOOST_VARIANT_MINIMIZE_SIZE switch + +// representation -- private when possible +#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) +    private: +#else +    public: +#endif + +    which_t which_; +    storage_t storage_; + +    void indicate_which(int which) +    { +        which_ = static_cast<which_t>( which ); +    } + +    void indicate_backup_which(int which) +    { +        which_ = static_cast<which_t>( -(which + 1) ); +    } + +private: // helpers, for queries (below) + +    bool using_backup() const +    { +        return which_ < 0; +    } + +public: // queries + +    int which() const +    { +        // If using heap backup... +        if (using_backup()) +            // ...then return adjusted which_: +            return -(which_ + 1); + +        // Otherwise, return which_ directly: +        return which_; +    } + +private: // helpers, for structors (below) + +    struct initializer +        : BOOST_VARIANT_AUX_INITIALIZER_T( +              recursive_enabled_types, recursive_enabled_T +            ) +    { +    }; + +    void destroy_content() +    { +        detail::variant::destroyer visitor; +        this->internal_apply_visitor(visitor); +    } + +public: // structors + +    ~variant() +    { +        destroy_content(); +    } + +    variant() +    { +        // NOTE TO USER : +        // Compile error from here indicates that the first bound +        // type is not default-constructible, and so variant cannot +        // support its own default-construction. +        // +        new( storage_.address() ) internal_T0(); +        indicate_which(0); // zero is the index of the first bounded type +    } + +private: // helpers, for structors, cont. (below) + +    class convert_copy_into +        : public static_visitor<int> +    { +    private: // representation + +        void* storage_; + +    public: // structors + +        explicit convert_copy_into(void* storage) +            : storage_(storage) +        { +        } + +    public: // internal visitor interfaces (below) + +        template <typename T> +        int internal_visit(T& operand, int) const +        { +            // NOTE TO USER : +            // Compile error here indicates one of the source variant's types  +            // cannot be unambiguously converted to the destination variant's +            // types (or that no conversion exists). +            // +            return initializer::initialize(storage_, operand); +        } + +#   if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0564)) +        template <typename T> +        result_type internal_visit(const T& operand, int) const +        { +            return initializer::initialize(storage_, operand); +        } +#   endif + +        template <typename T> +        int internal_visit(boost::detail::reference_content<T>& operand, long) const +        { +            return internal_visit( operand.get(), 1L ); +        } + +        template <typename T> +        int internal_visit(const boost::detail::reference_content<T>& operand, long) const +        { +            return internal_visit( operand.get(), 1L ); +        } + +        template <typename T> +        int internal_visit(boost::detail::variant::backup_holder<T>& operand, long) const +        { +            return internal_visit( operand.get(), 1L ); +        } + +        template <typename T> +        int internal_visit(const boost::detail::variant::backup_holder<T>& operand, long) const +        { +            return internal_visit( operand.get(), 1L ); +        } + +        template <typename T> +        int internal_visit(boost::recursive_wrapper<T>& operand, long) const +        { +            return internal_visit( operand.get(), 1L ); +        } + +        template <typename T> +        int internal_visit(const boost::recursive_wrapper<T>& operand, long) const +        { +            return internal_visit( operand.get(), 1L ); +        } + +    }; + +    friend class convert_copy_into; + +private: // helpers, for structors, below  + +    template <typename T> +    void convert_construct( +          T& operand +        , int +        , mpl::false_ = mpl::false_() // is_foreign_variant +        ) +    { +        // NOTE TO USER : +        // Compile error here indicates that the given type is not  +        // unambiguously convertible to one of the variant's types +        // (or that no conversion exists). +        // +        indicate_which( +              initializer::initialize( +                  storage_.address() +                , operand +                ) +            ); +    } + +    template <typename Variant> +    void convert_construct( +          Variant& operand +        , long +        , mpl::true_// is_foreign_variant +        ) +    { +        convert_copy_into visitor(storage_.address()); +        indicate_which( +              operand.internal_apply_visitor(visitor) +            ); +    } + +    template <typename Variant> +    void convert_construct_variant(Variant& operand) +    { +        // [Determine if the given variant is itself a bounded type, or if its +        //  content needs to be converted (i.e., it is a 'foreign' variant):] +        // + +        typedef typename mpl::find_if< +              types +            , is_same< +                  add_const<mpl::_1> +                , const Variant +                > +            >::type found_it; + +        typedef typename mpl::end<types>::type not_found; +        typedef typename is_same< +              found_it, not_found +            >::type is_foreign_variant; + +        // Convert construct from operand: +        convert_construct( +              operand, 1L +            , is_foreign_variant() +            ); +    } + +    template <BOOST_VARIANT_ENUM_PARAMS(typename U)> +    void convert_construct( +          boost::variant<BOOST_VARIANT_ENUM_PARAMS(U)>& operand +        , long +        ) +    { +        convert_construct_variant(operand); +    } + +    template <BOOST_VARIANT_ENUM_PARAMS(typename U)> +    void convert_construct( +          const boost::variant<BOOST_VARIANT_ENUM_PARAMS(U)>& operand +        , long +        ) +    { +        convert_construct_variant(operand);     +    } + +public: // structors, cont. + +#if !defined(BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING) + +    template <typename T> +    variant(const T& operand) +    { +        convert_construct(operand, 1L); +    } + +    template <typename T> +    variant(T& operand) +    { +        convert_construct(operand, 1L); +    } + +#elif defined(BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND) + +    // For compilers that cannot distinguish between T& and const T& in +    // template constructors, but do fully support SFINAE, we can workaround: + +    template <typename T> +    variant(const T& operand) +    { +        convert_construct(operand, 1L); +    } + +    template <typename T> +    variant( +          T& operand +        , typename enable_if< +              mpl::not_< is_const<T> > +            , void +            >::type* = 0 +        ) +    { +        convert_construct(operand, 1L); +    } + +#else // !defined(BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND) + +    // For compilers that cannot distinguish between T& and const T& in +    // template constructors, and do NOT support SFINAE, we can't workaround: + +    template <typename T> +    variant(const T& operand) +    { +        convert_construct(operand, 1L); +    } + +#endif // BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING workarounds + +public: // structors, cont. + +    // [MSVC6 requires copy constructor appear after template constructors] +    variant(const variant& operand) +    { +        // Copy the value of operand into *this... +        detail::variant::copy_into visitor( storage_.address() ); +        operand.internal_apply_visitor(visitor); + +        // ...and activate the *this's primary storage on success: +        indicate_which(operand.which()); +    } + +private: // helpers, for modifiers (below) + +#   if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) +    template <typename Variant, typename RhsT> +    friend class detail::variant::backup_assigner; +#   endif + +    // class assigner +    // +    // Internal visitor that "assigns" the visited value to the given variant +    // by appropriate destruction and copy-construction. +    // + +    class assigner +        : public static_visitor<> +    { +    private: // representation + +        variant& lhs_; +        int rhs_which_; + +    public: // structors + +        assigner(variant& lhs, int rhs_which) +            : lhs_(lhs) +            , rhs_which_(rhs_which) +        { +        } + +    private: // helpers, for internal visitor interface (below) + +        template <typename RhsT, typename B1, typename B2> +        void assign_impl( +              const RhsT& rhs_content +            , mpl::true_// has_nothrow_copy +            , B1// has_nothrow_move_constructor +            , B2// has_fallback_type +            ) +        { +            // Destroy lhs's content... +            lhs_.destroy_content(); // nothrow + +            // ...copy rhs content into lhs's storage... +            new(lhs_.storage_.address()) +                RhsT( rhs_content ); // nothrow + +            // ...and indicate new content type: +            lhs_.indicate_which(rhs_which_); // nothrow +        } + +        template <typename RhsT, typename B> +        void assign_impl( +              const RhsT& rhs_content +            , mpl::false_// has_nothrow_copy +            , mpl::true_// has_nothrow_move_constructor +            , B// has_fallback_type +            ) +        { +            // Attempt to make a temporary copy (so as to move it below)... +            RhsT temp(rhs_content); + +            // ...and upon success destroy lhs's content... +            lhs_.destroy_content(); // nothrow + +            // ...move the temporary copy into lhs's storage... +            new(lhs_.storage_.address()) +                RhsT( detail::variant::move(temp) ); // nothrow + +            // ...and indicate new content type: +            lhs_.indicate_which(rhs_which_); // nothrow +        } + +        template <typename RhsT> +        void assign_impl( +              const RhsT& rhs_content +            , mpl::false_// has_nothrow_copy +            , mpl::false_// has_nothrow_move_constructor +            , mpl::true_// has_fallback_type +            ) +        { +            // Destroy lhs's content... +            lhs_.destroy_content(); // nothrow + +            try +            { +                // ...and attempt to copy rhs's content into lhs's storage: +                new(lhs_.storage_.address()) +                    RhsT( rhs_content ); +            } +            catch (...) +            { +                // In case of failure, default-construct fallback type in lhs's storage... +                new (lhs_.storage_.address()) +                    fallback_type_; // nothrow + +                // ...indicate construction of fallback type... +                lhs_.indicate_which( +                      BOOST_MPL_AUX_VALUE_WKND(fallback_type_index_)::value +                    ); // nothrow + +                // ...and rethrow: +                throw; +            } + +            // In the event of success, indicate new content type: +            lhs_.indicate_which(rhs_which_); // nothrow +        } + +        template <typename RhsT> +        void assign_impl( +              const RhsT& rhs_content +            , mpl::false_// has_nothrow_copy +            , mpl::false_// has_nothrow_move_constructor +            , mpl::false_// has_fallback_type +            ) +        { +            detail::variant::backup_assigner<wknd_self_t, RhsT> +                visitor(lhs_, rhs_which_, rhs_content); +            lhs_.internal_apply_visitor(visitor); +        } + +    public: // internal visitor interfaces + +        template <typename RhsT> +            BOOST_VARIANT_AUX_RETURN_VOID_TYPE +        internal_visit(const RhsT& rhs_content, int) +        { +            typedef typename has_nothrow_copy<RhsT>::type +                nothrow_copy; +            typedef typename mpl::or_< // reduces compile-time +                  nothrow_copy +                , detail::variant::has_nothrow_move_constructor<RhsT> +                >::type nothrow_move_constructor; + +            assign_impl( +                  rhs_content +                , nothrow_copy() +                , nothrow_move_constructor() +                , has_fallback_type_() +                ); + +            BOOST_VARIANT_AUX_RETURN_VOID; +        } + +#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600)) +    private: +        // silence MSVC warning C4512: assignment operator could not be generated +        assigner& operator= (assigner const&); +#endif +    }; + +    friend class assigner; + +    void variant_assign(const variant& rhs) +    { +        // If the contained types are EXACTLY the same... +        if (which_ == rhs.which_) +        { +            // ...then assign rhs's storage to lhs's content: +            detail::variant::assign_storage visitor(rhs.storage_.address()); +            this->internal_apply_visitor(visitor); +        } +        else +        { +            // Otherwise, perform general (copy-based) variant assignment: +            assigner visitor(*this, rhs.which()); +            rhs.internal_apply_visitor(visitor);  +        } +    } + +private: // helpers, for modifiers (below) + +    template <typename T> +    void assign(const T& rhs) +    { +        // If direct T-to-T assignment is not possible... +        detail::variant::direct_assigner<T> direct_assign(rhs); +        if (this->apply_visitor(direct_assign) == false) +        { +            // ...then convert rhs to variant and assign: +            // +            // While potentially inefficient, the following construction of a +            // variant allows T as any type convertible to one of the bounded +            // types without excessive code redundancy. +            // +            variant temp(rhs); +            variant_assign( detail::variant::move(temp) ); +        } +    } + +public: // modifiers + +    template <typename T> +    variant& operator=(const T& rhs) +    { +        assign(rhs); +        return *this; +    } + +    // [MSVC6 requires copy assign appear after templated operator=] +    variant& operator=(const variant& rhs) +    { +        variant_assign(rhs); +        return *this; +    } + +    void swap(variant& rhs) +    { +        // If the contained types are the same... +        if (which() == rhs.which()) +        { +            // ...then swap the values directly: +            detail::variant::swap_with<variant> visitor(rhs); +            this->apply_visitor(visitor); +        } +        else +        { +            // ...otherwise, perform general variant swap: +            variant tmp( detail::variant::move(rhs) ); +            rhs = detail::variant::move(*this); +            *this = detail::variant::move(tmp); +        } +    } + +public: // queries + +    // +    // NOTE: member which() defined above. +    // + +    bool empty() const +    { +        return false; +    } + +#if !defined(BOOST_NO_TYPEID) +    const std::type_info& type() const +    { +        detail::variant::reflect visitor; +        return this->apply_visitor(visitor); +    } +#endif + +public: // prevent comparison with foreign types + +#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) + +#   define BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE \ +    void + +#else // MSVC7 + +    // +    // MSVC7 gives error about return types for above being different than +    // the true comparison operator overloads: +    // + +#   define BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE \ +    bool + +#endif // MSVC7 workaround + +    template <typename U> +        BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE +    operator==(const U&) const +    { +        BOOST_STATIC_ASSERT( false && sizeof(U) ); +    } + +    template <typename U> +        BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE +    operator<(const U&) const +    { +        BOOST_STATIC_ASSERT( false && sizeof(U) ); +    } + +public: // comparison operators + +    // [MSVC6 requires these operators appear after template operators] + +    bool operator==(const variant& rhs) const +    { +        if (this->which() != rhs.which()) +            return false; + +        detail::variant::comparer< +              variant, detail::variant::equal_comp +            > visitor(*this); +        return rhs.apply_visitor(visitor); +    } + +    bool operator<(const variant& rhs) const +    { +        // +        // Dirk Schreib suggested this collating order. +        // + +        if (this->which() != rhs.which()) +            return this->which() < rhs.which(); + +        detail::variant::comparer< +              variant, detail::variant::less_comp +            > visitor(*this); +        return rhs.apply_visitor(visitor); +    } + +// helpers, for visitation support (below) -- private when possible +#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + +    template < BOOST_VARIANT_ENUM_PARAMS(typename U) > +    friend class variant; + +private: + +#else// defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + +public: + +#endif// !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS) + +    template <typename Visitor, typename VoidPtrCV> +    static +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE( +              typename Visitor::result_type +            ) +    internal_apply_visitor_impl( +          int internal_which +        , int logical_which +        , Visitor& visitor +        , VoidPtrCV storage +        ) +    { +        typedef mpl::int_<0> first_which; +        typedef typename mpl::begin<internal_types>::type first_it; +        typedef typename mpl::end<internal_types>::type last_it; + +        typedef detail::variant::visitation_impl_step< +              first_it, last_it +            > first_step; + +        return detail::variant::visitation_impl( +              internal_which, logical_which +            , visitor, storage, mpl::false_() +            , never_uses_backup_flag() +            , static_cast<first_which*>(0), static_cast<first_step*>(0) +            ); +    } + +    template <typename Visitor> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE( +              typename Visitor::result_type +            ) +    internal_apply_visitor(Visitor& visitor) +    { +        return internal_apply_visitor_impl( +              which_, which(), visitor, storage_.address() +            ); +    } + +    template <typename Visitor> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE( +              typename Visitor::result_type +            ) +    internal_apply_visitor(Visitor& visitor) const +    { +        return internal_apply_visitor_impl( +              which_, which(), visitor, storage_.address() +            ); +    } + +public: // visitation support + +    template <typename Visitor> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE( +              typename Visitor::result_type +            ) +    apply_visitor(Visitor& visitor) +    { +        detail::variant::invoke_visitor<Visitor> invoker(visitor); +        return this->internal_apply_visitor(invoker); +    } + +    template <typename Visitor> +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE( +              typename Visitor::result_type +            ) +    apply_visitor(Visitor& visitor) const +    { +        detail::variant::invoke_visitor<Visitor> invoker(visitor); +        return this->internal_apply_visitor(invoker); +    } + +}; // class variant + +/////////////////////////////////////////////////////////////////////////////// +// metafunction make_variant_over +// +// See docs and boost/variant/variant_fwd.hpp for more information. +// +template <typename Types> +struct make_variant_over +{ +private: // precondition assertions + +#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) +    BOOST_STATIC_ASSERT(( ::boost::mpl::is_sequence<Types>::value )); +#endif + +public: // metafunction result + +    typedef variant< +          detail::variant::over_sequence< Types > +        > type; + +}; + +/////////////////////////////////////////////////////////////////////////////// +// function template swap +// +// Swaps two variants of the same type (i.e., identical specification). +// +template < BOOST_VARIANT_ENUM_PARAMS(typename T) > +inline void swap( +      variant< BOOST_VARIANT_ENUM_PARAMS(T) >& lhs +    , variant< BOOST_VARIANT_ENUM_PARAMS(T) >& rhs +    ) +{ +    lhs.swap(rhs); +} + +} // namespace boost + +// implementation additions + +#if !defined(BOOST_NO_IOSTREAM) +#include "boost/variant/detail/variant_io.hpp" +#endif // BOOST_NO_IOSTREAM + +#endif // BOOST_VARIANT_VARIANT_HPP diff --git a/3rdParty/Boost/src/boost/variant/variant_fwd.hpp b/3rdParty/Boost/src/boost/variant/variant_fwd.hpp new file mode 100644 index 0000000..7482ad4 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/variant_fwd.hpp @@ -0,0 +1,253 @@ +//----------------------------------------------------------------------------- +// boost variant/variant_fwd.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2003 +// Eric Friedman, Itay Maman +// +// 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) + +#ifndef BOOST_VARIANT_VARIANT_FWD_HPP +#define BOOST_VARIANT_VARIANT_FWD_HPP + +#include "boost/variant/detail/config.hpp" + +#include "boost/blank_fwd.hpp" +#include "boost/mpl/arg.hpp" +#include "boost/mpl/limits/arity.hpp" +#include "boost/mpl/aux_/na.hpp" +#include "boost/preprocessor/cat.hpp" +#include "boost/preprocessor/enum.hpp" +#include "boost/preprocessor/enum_params.hpp" +#include "boost/preprocessor/enum_shifted_params.hpp" +#include "boost/preprocessor/repeat.hpp" + +/////////////////////////////////////////////////////////////////////////////// +// macro BOOST_VARIANT_LIMIT_TYPES +// +// Implementation-defined preprocessor symbol describing the actual +// length of variant's pseudo-variadic template parameter list. +// +#include "boost/mpl/limits/list.hpp" +#define BOOST_VARIANT_LIMIT_TYPES \ +    BOOST_MPL_LIMIT_LIST_SIZE + +/////////////////////////////////////////////////////////////////////////////// +// macro BOOST_VARIANT_NO_REFERENCE_SUPPORT +// +// Defined if variant does not support references as bounded types.  +// +#if defined(BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING) \ + && !defined(BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND) \ + && !defined(BOOST_VARIANT_NO_REFERENCE_SUPPORT) +#   define BOOST_VARIANT_NO_REFERENCE_SUPPORT +#endif + +/////////////////////////////////////////////////////////////////////////////// +// macro BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT +// +// Defined if variant does not support make_variant_over (see below).  +// +#if defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) +#   define BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT +#endif + +/////////////////////////////////////////////////////////////////////////////// +// macro BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT +// +// Defined if make_recursive_variant cannot be supported as documented. +// +// Note: Currently, MPL lambda facility is used as workaround if defined, and +// so only types declared w/ MPL lambda workarounds will work. +// + +#include "boost/variant/detail/substitute_fwd.hpp" + +#if defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) \ + && !defined(BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT) +#   define BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT +#endif + +/////////////////////////////////////////////////////////////////////////////// +// macro BOOST_VARIANT_RECURSIVE_VARIANT_MAX_ARITY +// +// Exposes maximum allowed arity of class templates with recursive_variant +// arguments. That is, +//   make_recursive_variant< ..., T<[1], recursive_variant_, ... [N]> >. +// +#include "boost/mpl/limits/arity.hpp" +#define BOOST_VARIANT_RECURSIVE_VARIANT_MAX_ARITY \ +    BOOST_MPL_LIMIT_METAFUNCTION_ARITY + +/////////////////////////////////////////////////////////////////////////////// +// macro BOOST_VARIANT_ENUM_PARAMS +// +// Convenience macro for enumeration of BOOST_VARIANT_LIMIT_TYPES params. +// +// Rationale: Cleaner, simpler code for clients of variant library. +// +#define BOOST_VARIANT_ENUM_PARAMS( param )  \ +    BOOST_PP_ENUM_PARAMS(BOOST_VARIANT_LIMIT_TYPES, param) + +/////////////////////////////////////////////////////////////////////////////// +// macro BOOST_VARIANT_ENUM_SHIFTED_PARAMS +// +// Convenience macro for enumeration of BOOST_VARIANT_LIMIT_TYPES-1 params. +// +#define BOOST_VARIANT_ENUM_SHIFTED_PARAMS( param )  \ +    BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_VARIANT_LIMIT_TYPES, param) + + +namespace boost { + +namespace detail { namespace variant { + +/////////////////////////////////////////////////////////////////////////////// +// (detail) class void_ and class template convert_void +//  +// Provides the mechanism by which void(NN) types are converted to +// mpl::void_ (and thus can be passed to mpl::list). +// +// Rationale: This is particularly needed for the using-declarations +// workaround (below), but also to avoid associating mpl namespace with +// variant in argument dependent lookups (which used to happen because of +// defaulting of template parameters to mpl::void_). +// + +struct void_; + +template <typename T> +struct convert_void +{ +    typedef T type; +}; + +template <> +struct convert_void< void_ > +{ +    typedef mpl::na type; +}; + +/////////////////////////////////////////////////////////////////////////////// +// (workaround) BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE +// +// Needed to work around compilers that don't support using-declaration +// overloads. (See the variant::initializer workarounds below.) +// + +#if defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) + +// (detail) tags voidNN -- NN defined on [0, BOOST_VARIANT_LIMIT_TYPES) +// +// Defines void types that are each unique and specializations of +// convert_void that yields mpl::na for each voidNN type. +// + +#define BOOST_VARIANT_DETAIL_DEFINE_VOID_N(z,N,_)          \ +    struct BOOST_PP_CAT(void,N);                           \ +                                                           \ +    template <>                                            \ +    struct convert_void< BOOST_PP_CAT(void,N) >            \ +    {                                                      \ +        typedef mpl::na type;                              \ +    };                                                     \ +    /**/ + +BOOST_PP_REPEAT( +      BOOST_VARIANT_LIMIT_TYPES +    , BOOST_VARIANT_DETAIL_DEFINE_VOID_N +    , _ +    ) + +#undef BOOST_VARIANT_DETAIL_DEFINE_VOID_N + +#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround + +}} // namespace detail::variant + +/////////////////////////////////////////////////////////////////////////////// +// (detail) macro BOOST_VARIANT_AUX_DECLARE_PARAM +// +// Template parameter list for variant and recursive_variant declarations. +// + +#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) + +#   define BOOST_VARIANT_AUX_DECLARE_PARAMS_IMPL(z, N, T) \ +    typename BOOST_PP_CAT(T,N) = detail::variant::void_ \ +    /**/ + +#else // defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE) + +#   define BOOST_VARIANT_AUX_DECLARE_PARAMS_IMPL(z, N, T) \ +    typename BOOST_PP_CAT(T,N) = BOOST_PP_CAT(detail::variant::void,N) \ +    /**/ + +#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround + +#define BOOST_VARIANT_AUX_DECLARE_PARAMS \ +    BOOST_PP_ENUM( \ +          BOOST_VARIANT_LIMIT_TYPES \ +        , BOOST_VARIANT_AUX_DECLARE_PARAMS_IMPL \ +        , T \ +        ) \ +    /**/ + +/////////////////////////////////////////////////////////////////////////////// +// class template variant (concept inspired by Andrei Alexandrescu) +// +// Efficient, type-safe bounded discriminated union. +// +// Preconditions: +//  - Each type must be unique. +//  - No type may be const-qualified. +// +// Proper declaration form: +//   variant<types>    (where types is a type-sequence) +// or +//   variant<T0,T1,...,Tn>  (where T0 is NOT a type-sequence) +// +template < BOOST_VARIANT_AUX_DECLARE_PARAMS > class variant; + +/////////////////////////////////////////////////////////////////////////////// +// metafunction make_recursive_variant +// +// Exposes a boost::variant with recursive_variant_ tags (below) substituted +// with the variant itself (wrapped as needed with boost::recursive_wrapper). +// +template < BOOST_VARIANT_AUX_DECLARE_PARAMS > struct make_recursive_variant; + +#undef BOOST_VARIANT_AUX_DECLARE_PARAMS_IMPL +#undef BOOST_VARIANT_AUX_DECLARE_PARAMS + +/////////////////////////////////////////////////////////////////////////////// +// type recursive_variant_ +// +// Tag type indicates where recursive variant substitution should occur. +// +#if !defined(BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT) +    struct recursive_variant_; +#else +    typedef mpl::arg<1> recursive_variant_; +#endif + +/////////////////////////////////////////////////////////////////////////////// +// metafunction make_variant_over +// +// Result is a variant w/ types of the specified type sequence. +// +template <typename Types> struct make_variant_over; + +/////////////////////////////////////////////////////////////////////////////// +// metafunction make_recursive_variant_over +// +// Result is a recursive variant w/ types of the specified type sequence. +// +template <typename Types> struct make_recursive_variant_over; + +} // namespace boost + +#endif // BOOST_VARIANT_VARIANT_FWD_HPP diff --git a/3rdParty/Boost/src/boost/variant/visitor_ptr.hpp b/3rdParty/Boost/src/boost/variant/visitor_ptr.hpp new file mode 100644 index 0000000..b49a972 --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/visitor_ptr.hpp @@ -0,0 +1,116 @@ +//----------------------------------------------------------------------------- +// boost variant/visitor_ptr.hpp header file +// See http://www.boost.org for updates, documentation, and revision history. +//----------------------------------------------------------------------------- +// +// Copyright (c) 2002-2003 +// Eric Friedman +// +// 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) + +#ifndef BOOST_VARIANT_VISITOR_PTR_HPP +#define BOOST_VARIANT_VISITOR_PTR_HPP + +#include "boost/variant/bad_visit.hpp" +#include "boost/variant/static_visitor.hpp" + +#include "boost/mpl/eval_if.hpp" +#include "boost/mpl/identity.hpp" +#include "boost/type_traits/add_reference.hpp" +#include "boost/type_traits/is_reference.hpp" +#include "boost/type_traits/is_void.hpp" + +namespace boost { + +////////////////////////////////////////////////////////////////////////// +// function template visitor_ptr +// +// Adapts a function pointer for use as visitor capable of handling +// values of a single type. Throws bad_visit if inappropriately applied. +// +template <typename T, typename R> +class visitor_ptr_t +    : public static_visitor<R> +{ +private: // representation + +    typedef R (*visitor_t)(T); + +    visitor_t visitor_; + +public: // typedefs + +    typedef R result_type; + +private: // private typedefs + +    typedef typename mpl::eval_if< +          is_reference<T> +        , mpl::identity<T> +        , add_reference<const T> +        >::type argument_fwd_type; + +public: // structors + +    explicit visitor_ptr_t(visitor_t visitor) +      : visitor_(visitor) +    { +    } + +public: // static visitor interfaces + +    template <typename U> +    result_type operator()(const U&) const +    { +        throw bad_visit(); +    } + +#if !defined(BOOST_NO_VOID_RETURNS) + +public: // static visitor interfaces, cont. + +    result_type operator()(argument_fwd_type operand) const +    { +        return visitor_(operand); +    } + +#else // defined(BOOST_NO_VOID_RETURNS) + +private: // helpers, for static visitor interfaces (below) + +    result_type execute_impl(argument_fwd_type operand, mpl::false_) const +    { +        return visitor_(operand); +    } + +        BOOST_VARIANT_AUX_RETURN_VOID_TYPE +    execute_impl(argument_fwd_type operand, mpl::true_) const +    { +        visitor_(operand); +        BOOST_VARIANT_AUX_RETURN_VOID; +    } + +public: // static visitor interfaces, cont. + +        BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) +    operator()(argument_fwd_type operand) const +    { +        typedef typename is_void<result_type>::type has_void_result; +        return execute_impl(operand, has_void_result()); +    } + +#endif // BOOST_NO_VOID_RETURNS workaround + +}; + +template <typename R, typename T> +inline visitor_ptr_t<T,R> visitor_ptr(R (*visitor)(T)) +{ +    return visitor_ptr_t<T,R>(visitor); +} + +} // namespace boost + +#endif// BOOST_VISITOR_VISITOR_PTR_HPP diff --git a/3rdParty/Boost/update.sh b/3rdParty/Boost/update.sh index 81ac4e3..cd373e1 100755 --- a/3rdParty/Boost/update.sh +++ b/3rdParty/Boost/update.sh @@ -27,6 +27,7 @@ fi  	uuid/uuid.hpp \  	uuid/uuid_io.hpp \  	uuid/uuid_generators.hpp \ +	variant.hpp \  	regex.hpp \  	$TARGET_DIR  | 
 Swift