

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

// -- DO NOT modify by hand!



namespace boost { namespace mpl { namespace aux {



template< long N > struct advance_backward;

template<>

struct advance_backward<0>

{

    template< typename Iterator > struct apply

    {

        typedef Iterator iter0;

        typedef iter0 type;

    };

};



template<>

struct advance_backward<1>

{

    template< typename Iterator > struct apply

    {

        typedef Iterator iter0;

        typedef typename prior<iter0>::type iter1;

        typedef iter1 type;

    };

};



template<>

struct advance_backward<2>

{

    template< typename Iterator > struct apply

    {

        typedef Iterator iter0;

        typedef typename prior<iter0>::type iter1;

        typedef typename prior<iter1>::type iter2;

        typedef iter2 type;

    };

};



template<>

struct advance_backward<3>

{

    template< typename Iterator > struct apply

    {

        typedef Iterator iter0;

        typedef typename prior<iter0>::type iter1;

        typedef typename prior<iter1>::type iter2;

        typedef typename prior<iter2>::type iter3;

        typedef iter3 type;

    };

};



template<>

struct advance_backward<4>

{

    template< typename Iterator > struct apply

    {

        typedef Iterator iter0;

        typedef typename prior<iter0>::type iter1;

        typedef typename prior<iter1>::type iter2;

        typedef typename prior<iter2>::type iter3;

        typedef typename prior<iter3>::type iter4;

        typedef iter4 type;

    };

};



template< long N >

struct advance_backward

{

    template< typename Iterator > struct apply

    {

        typedef typename apply_wrap1<

              advance_backward<4>

            , Iterator

            >::type chunk_result_;



        typedef typename apply_wrap1<

              advance_backward<(

                (N - 4) < 0

                    ? 0

                    : N - 4

                    )>

            , chunk_result_

            >::type type;

    };

};



}}}



