1 /*============================================================================= 2 Copyright (c) 1999-2003 Jaakko Jarvi 3 Copyright (c) 2001-2011 Joel de Guzman 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 ==============================================================================*/ 8 #if !defined(FUSION_LESS_EQUAL_05052005_1141) 9 #define FUSION_LESS_EQUAL_05052005_1141 10 11 #include <boost/fusion/support/config.hpp> 12 #include <boost/mpl/bool.hpp> 13 #include <boost/fusion/iterator/deref.hpp> 14 #include <boost/fusion/iterator/next.hpp> 15 #include <boost/fusion/iterator/equal_to.hpp> 16 #include <boost/fusion/support/as_const.hpp> 17 18 namespace boost { namespace fusion { namespace detail 19 { 20 template <typename Seq1, typename Seq2> 21 struct sequence_less_equal 22 { 23 typedef typename result_of::end<Seq1>::type end1_type; 24 typedef typename result_of::end<Seq2>::type end2_type; 25 26 template <typename I1, typename I2> 27 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED 28 static bool 29 call(I1 const&, I2 const&, mpl::true_) 30 { 31 return true; 32 } 33 34 template <typename I1, typename I2> 35 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED 36 static bool 37 call(I1 const& a, I2 const& b, mpl::false_) 38 { 39 return extension::as_const(*a) <= extension::as_const(*b) 40 && (!(extension::as_const(*b) <= extension::as_const(*a)) || 41 call(fusion::next(a), fusion::next(b))); 42 } 43 44 template <typename I1, typename I2> 45 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED 46 static bool 47 call(I1 const& a, I2 const& b) 48 { 49 typename result_of::equal_to<I1, end1_type>::type eq; 50 return call(a, b, eq); 51 } 52 }; 53 }}} 54 55 #endif 56