~ubuntu-branches/ubuntu/wily/bombono-dvd/wily

« back to all changes in this revision

Viewing changes to libs/boost-lib/boost/mpl/advance.hpp

  • Committer: Bazaar Package Importer
  • Author(s): Alessio Treglia
  • Date: 2010-11-04 11:46:25 UTC
  • mto: This revision was merged to the branch mainline in revision 8.
  • Revision ID: james.westby@ubuntu.com-20101104114625-8xfdhvhpsm51i0nu
Tags: upstream-0.8.0
ImportĀ upstreamĀ versionĀ 0.8.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#ifndef BOOST_MPL_ADVANCE_HPP_INCLUDED
 
3
#define BOOST_MPL_ADVANCE_HPP_INCLUDED
 
4
 
 
5
// Copyright Aleksey Gurtovoy 2000-2004
 
6
//
 
7
// Distributed under the Boost Software License, Version 1.0. 
 
8
// (See accompanying file LICENSE_1_0.txt or copy at 
 
9
// http://www.boost.org/LICENSE_1_0.txt)
 
10
//
 
11
// See http://www.boost.org/libs/mpl for documentation.
 
12
 
 
13
// $Id: advance.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
 
14
// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
 
15
// $Revision: 49267 $
 
16
 
 
17
#include <boost/mpl/advance_fwd.hpp>
 
18
#include <boost/mpl/less.hpp>
 
19
#include <boost/mpl/negate.hpp>
 
20
#include <boost/mpl/long.hpp>
 
21
#include <boost/mpl/if.hpp>
 
22
#include <boost/mpl/tag.hpp>
 
23
#include <boost/mpl/apply_wrap.hpp>
 
24
#include <boost/mpl/aux_/advance_forward.hpp>
 
25
#include <boost/mpl/aux_/advance_backward.hpp>
 
26
#include <boost/mpl/aux_/value_wknd.hpp>
 
27
#include <boost/mpl/aux_/na_spec.hpp>
 
28
#include <boost/mpl/aux_/nttp_decl.hpp>
 
29
 
 
30
namespace boost { namespace mpl {
 
31
 
 
32
// default implementation for forward/bidirectional iterators
 
33
template< typename Tag >
 
34
struct advance_impl
 
35
{
 
36
    template< typename Iterator, typename N > struct apply
 
37
    {
 
38
        typedef typename less< N,long_<0> >::type backward_;
 
39
        typedef typename if_< backward_, negate<N>, N >::type offset_;
 
40
 
 
41
        typedef typename if_<
 
42
              backward_
 
43
            , aux::advance_backward< BOOST_MPL_AUX_VALUE_WKND(offset_)::value >
 
44
            , aux::advance_forward< BOOST_MPL_AUX_VALUE_WKND(offset_)::value >
 
45
            >::type f_;
 
46
 
 
47
        typedef typename apply_wrap1<f_,Iterator>::type type;
 
48
    };
 
49
};
 
50
 
 
51
 
 
52
template<
 
53
      typename BOOST_MPL_AUX_NA_PARAM(Iterator)
 
54
    , typename BOOST_MPL_AUX_NA_PARAM(N)
 
55
    >
 
56
struct advance
 
57
    : advance_impl< typename tag<Iterator>::type >
 
58
        ::template apply<Iterator,N>
 
59
{
 
60
};
 
61
 
 
62
template<
 
63
      typename Iterator
 
64
    , BOOST_MPL_AUX_NTTP_DECL(long, N)
 
65
    >
 
66
struct advance_c
 
67
    : advance_impl< typename tag<Iterator>::type >
 
68
        ::template apply<Iterator,long_<N> >
 
69
{
 
70
};
 
71
 
 
72
BOOST_MPL_AUX_NA_SPEC(2, advance)
 
73
 
 
74
}}
 
75
 
 
76
#endif // BOOST_MPL_ADVANCE_HPP_INCLUDED