ossrv_pub/boost_apis/boost/mpl/map/aux_/iterator.hpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ossrv_pub/boost_apis/boost/mpl/map/aux_/iterator.hpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,169 @@
+
+#ifndef BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_MAP_AUX_ITERATOR_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.
+
+// $Source: /cvsroot/boost/boost/boost/mpl/map/aux_/iterator.hpp,v $
+// $Date: 2004/12/14 14:05:32 $
+// $Revision: 1.3 $
+
+#include <boost/mpl/map/aux_/map0.hpp>
+#include <boost/mpl/map/aux_/at_impl.hpp>
+#include <boost/mpl/map/aux_/tag.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/nttp_decl.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< 
+      typename Map
+    , long order
+    , long max_order
+    >
+struct next_order
+    : if_< 
+          is_void_< typename item_by_order<Map,order>::type >
+        , next_order<Map,(order+1),max_order>
+        , long_<order>
+        >::type
+{
+};
+
+template< 
+      typename Map
+    , long max_order
+    >
+struct next_order<Map,max_order,max_order>
+    : long_<max_order>
+{
+};
+
+
+template< typename Map, long order, long max_order >
+struct m_iter
+{
+    typedef forward_iterator_tag category;
+    typedef typename item_by_order<Map,order>::type type;
+};
+
+template< typename Map, long max_order >
+struct m_iter<Map,max_order,max_order>
+{
+    typedef forward_iterator_tag category;
+};
+
+
+template< typename Map, long order, long max_order > 
+struct next< m_iter<Map,order,max_order> >
+{
+    typedef m_iter<
+          Map
+        , next_order<Map,order+1,max_order>::value
+        , max_order
+        > type;
+};
+
+template< typename Map, long max_order > 
+struct next< m_iter<Map,max_order,max_order> >
+{
+};
+
+#else
+
+template< 
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct next_order;
+
+template< 
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct next_order_impl
+    : if_< 
+          is_void_< typename item_by_order<Map,order>::type >
+        , next_order<Map,(order+1),max_order>
+        , long_<order>
+        >::type
+    {
+    };
+
+template< 
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct next_order
+    : if_c<
+          (order != max_order)
+        , next_order_impl<Map,order,max_order>
+        , long_<order>
+        >::type
+{
+};
+
+
+template<
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct m_iter;
+
+struct m_iter_empty_base {};
+
+template< 
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct m_iter_base
+{
+    typedef typename item_by_order<Map,order>::type type;
+    
+    typedef m_iter<
+          Map
+        , next_order<Map,order+1,max_order>::value
+        , max_order
+        > next;
+};
+
+template<
+      typename Map
+    , BOOST_MPL_AUX_NTTP_DECL(long, order)
+    , BOOST_MPL_AUX_NTTP_DECL(long, max_order)
+    >
+struct m_iter
+  : if_c<
+          (order == max_order)
+        , m_iter_empty_base
+        , m_iter_base<Map,order,max_order>
+        >::type
+{
+    typedef forward_iterator_tag category;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}
+
+#endif // BOOST_MPL_MAP_AUX_ITERATOR_HPP_INCLUDED