summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/Boost/boost/mpl/vector/aux_/iterator.hpp')
-rw-r--r--3rdParty/Boost/boost/mpl/vector/aux_/iterator.hpp130
1 files changed, 130 insertions, 0 deletions
diff --git a/3rdParty/Boost/boost/mpl/vector/aux_/iterator.hpp b/3rdParty/Boost/boost/mpl/vector/aux_/iterator.hpp
new file mode 100644
index 0000000..5864aff
--- /dev/null
+++ b/3rdParty/Boost/boost/mpl/vector/aux_/iterator.hpp
@@ -0,0 +1,130 @@
+
+#ifndef BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_AUX_VECTOR_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/vector/aux_/at.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/plus.hpp>
+#include <boost/mpl/minus.hpp>
+#include <boost/mpl/advance_fwd.hpp>
+#include <boost/mpl/distance_fwd.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/prior.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename Vector
+ , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+ >
+struct v_iter
+{
+ typedef aux::v_iter_tag tag;
+ typedef random_access_iterator_tag category;
+ typedef typename v_at<Vector,n_>::type type;
+
+ typedef Vector vector_;
+ typedef mpl::long_<n_> pos;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ enum {
+ next_ = n_ + 1
+ , prior_ = n_ - 1
+ , pos_ = n_
+ };
+
+ typedef v_iter<Vector,next_> next;
+ typedef v_iter<Vector,prior_> prior;
+#endif
+
+};
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename Vector
+ , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+ >
+struct next< v_iter<Vector,n_> >
+{
+ typedef v_iter<Vector,(n_ + 1)> type;
+};
+
+template<
+ typename Vector
+ , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+ >
+struct prior< v_iter<Vector,n_> >
+{
+ typedef v_iter<Vector,(n_ - 1)> type;
+};
+
+template<
+ typename Vector
+ , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+ , typename Distance
+ >
+struct advance< v_iter<Vector,n_>,Distance>
+{
+ typedef v_iter<
+ Vector
+ , (n_ + BOOST_MPL_AUX_NESTED_VALUE_WKND(long, Distance))
+ > type;
+};
+
+template<
+ typename Vector
+ , BOOST_MPL_AUX_NTTP_DECL(long, n_)
+ , BOOST_MPL_AUX_NTTP_DECL(long, m_)
+ >
+struct distance< v_iter<Vector,n_>, v_iter<Vector,m_> >
+ : mpl::long_<(m_ - n_)>
+{
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template<> struct advance_impl<aux::v_iter_tag>
+{
+ template< typename Iterator, typename N > struct apply
+ {
+ enum { pos_ = Iterator::pos_, n_ = N::value };
+ typedef v_iter<
+ typename Iterator::vector_
+ , (pos_ + n_)
+ > type;
+ };
+};
+
+template<> struct distance_impl<aux::v_iter_tag>
+{
+ template< typename Iter1, typename Iter2 > struct apply
+ {
+ enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ };
+ typedef long_<( pos2_ - pos1_ )> type;
+ BOOST_STATIC_CONSTANT(long, value = ( pos2_ - pos1_ ));
+ };
+};
+
+#endif
+
+}}
+
+#endif // BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED