

// 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/set_c.hpp" header

// -- DO NOT modify by hand!



namespace boost { namespace mpl {



namespace aux {

template< int N >

struct set_c_chooser;



}



namespace aux {



template<>

struct set_c_chooser<0>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set0_c<

              T

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<1>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set1_c<

              T, C0

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<2>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set2_c<

              T, C0, C1

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<3>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set3_c<

              T, C0, C1, C2

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<4>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set4_c<

              T, C0, C1, C2, C3

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<5>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set5_c<

              T, C0, C1, C2, C3, C4

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<6>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set6_c<

              T, C0, C1, C2, C3, C4, C5

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<7>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set7_c<

              T, C0, C1, C2, C3, C4, C5, C6

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<8>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set8_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<9>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set9_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<10>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set10_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<11>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set11_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<12>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set12_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<13>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set13_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<14>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set14_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<15>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set15_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<16>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set16_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<17>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set17_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<18>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set18_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<19>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set19_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_c_chooser<20>

{

    template<

          typename T, long C0, long C1, long C2, long C3, long C4, long C5

        , long C6, long C7, long C8, long C9, long C10, long C11, long C12

        , long C13, long C14, long C15, long C16, long C17, long C18, long C19

        >

    struct result_

    {

        typedef typename set20_c<

              T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19

            >::type type;



    };

};



} // namespace aux



namespace aux {



template< long C >

struct is_set_c_arg

{

    BOOST_STATIC_CONSTANT(bool, value  = true);

};



template<>

struct is_set_c_arg<LONG_MAX>

{

    BOOST_STATIC_CONSTANT(bool, value  = false);

};



template<

      long C1, long C2, long C3, long C4, long C5, long C6, long C7, long C8

    , long C9, long C10, long C11, long C12, long C13, long C14, long C15

    , long C16, long C17, long C18, long C19, long C20

    >

struct set_c_count_args

{

    BOOST_STATIC_CONSTANT(int, value =

          is_set_c_arg<C1>::value + is_set_c_arg<C2>::value 

        + is_set_c_arg<C3>::value + is_set_c_arg<C4>::value 

        + is_set_c_arg<C5>::value + is_set_c_arg<C6>::value 

        + is_set_c_arg<C7>::value + is_set_c_arg<C8>::value 

        + is_set_c_arg<C9>::value + is_set_c_arg<C10>::value 

        + is_set_c_arg<C11>::value + is_set_c_arg<C12>::value 

        + is_set_c_arg<C13>::value + is_set_c_arg<C14>::value 

        + is_set_c_arg<C15>::value + is_set_c_arg<C16>::value 

        + is_set_c_arg<C17>::value + is_set_c_arg<C18>::value 

        + is_set_c_arg<C19>::value + is_set_c_arg<C20>::value

        );



};



template<

      typename T, long C0, long C1, long C2, long C3, long C4, long C5

    , long C6, long C7, long C8, long C9, long C10, long C11, long C12

    , long C13, long C14, long C15, long C16, long C17, long C18, long C19

    >

struct set_c_impl

{

    typedef aux::set_c_count_args<

          C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19

        > arg_num_;



    typedef typename aux::set_c_chooser< arg_num_::value >

        ::template result_< T,C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >::type type;

};



} // namespace aux



template<

      typename T, long C0 = LONG_MAX, long C1 = LONG_MAX, long C2 = LONG_MAX

    , long C3 = LONG_MAX, long C4 = LONG_MAX, long C5 = LONG_MAX

    , long C6 = LONG_MAX, long C7 = LONG_MAX, long C8 = LONG_MAX

    , long C9 = LONG_MAX, long C10 = LONG_MAX, long C11 = LONG_MAX

    , long C12 = LONG_MAX, long C13 = LONG_MAX, long C14 = LONG_MAX

    , long C15 = LONG_MAX, long C16 = LONG_MAX, long C17 = LONG_MAX

    , long C18 = LONG_MAX, long C19 = LONG_MAX

    >

struct set_c

    : aux::set_c_impl<

          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19

        >::type

{

    typedef typename aux::set_c_impl<

          T, C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19

        >::type type;

};



}}



