Update of /cvsroot/boost/boost/boost/fusion/sequence/view/zip_view/detail
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv25707/detail

Modified Files:
        strictest_traversal.hpp 
Log Message:
support for sequences weaker than Forward Sequence


Index: strictest_traversal.hpp
===================================================================
RCS file: 
/cvsroot/boost/boost/boost/fusion/sequence/view/zip_view/detail/strictest_traversal.hpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- strictest_traversal.hpp     2 Mar 2007 10:44:13 -0000       1.2
+++ strictest_traversal.hpp     19 Mar 2007 18:13:24 -0000      1.3
@@ -15,7 +15,7 @@
 #include <boost/fusion/sequence/intrinsic/mpl.hpp>
 #include <boost/fusion/algorithm/iteration/fold.hpp>
 #include <boost/type_traits/remove_reference.hpp>
-#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/is_convertible.hpp>
 
 namespace boost { namespace fusion {
     
@@ -25,6 +25,19 @@
 
     namespace detail
     {
+        template<typename Tag1, typename Tag2,
+            bool Tag1Stricter = boost::is_convertible<Tag2,Tag1>::value>
+        struct stricter_traversal
+        {
+            typedef Tag1 type;
+        };
+
+        template<typename Tag1, typename Tag2>
+        struct stricter_traversal<Tag1,Tag2,false>
+        {
+            typedef Tag2 type;
+        };
+
         template<typename Next, typename StrictestSoFar>
         struct strictest_traversal_impl
         {
@@ -32,23 +45,7 @@
             typedef typename traits::category_of<
                 typename remove_reference<Next>::type>::type tag2;
 
-            typedef typename mpl::or_<
-                is_same<tag1, fusion::forward_traversal_tag>,
-                is_same<tag2, fusion::forward_traversal_tag> >::type 
-            has_forward_traversal;
-
-            typedef typename mpl::or_<
-                is_same<tag1, fusion::bidirectional_traversal_tag>,
-                is_same<tag2, fusion::bidirectional_traversal_tag> >::type
-            has_bidirectional_traversal;
-
-            typedef typename mpl::if_<
-                has_forward_traversal,
-                forward_traversal_tag,
-                typename mpl::if_<
-                has_bidirectional_traversal,
-                bidirectional_traversal_tag,
-                random_access_traversal_tag>::type>::type type;
+            typedef typename stricter_traversal<tag1,tag2>::type type;
         };
 
         template<typename Sequence>


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to