summaryrefslogtreecommitdiff
path: root/boost/fusion/sequence/comparison/detail
diff options
context:
space:
mode:
Diffstat (limited to 'boost/fusion/sequence/comparison/detail')
-rw-r--r--boost/fusion/sequence/comparison/detail/equal_to.hpp60
-rw-r--r--boost/fusion/sequence/comparison/detail/greater.hpp49
-rw-r--r--boost/fusion/sequence/comparison/detail/greater_equal.hpp49
-rw-r--r--boost/fusion/sequence/comparison/detail/less.hpp49
-rw-r--r--boost/fusion/sequence/comparison/detail/less_equal.hpp49
-rw-r--r--boost/fusion/sequence/comparison/detail/not_equal_to.hpp60
6 files changed, 316 insertions, 0 deletions
diff --git a/boost/fusion/sequence/comparison/detail/equal_to.hpp b/boost/fusion/sequence/comparison/detail/equal_to.hpp
new file mode 100644
index 0000000000..3e15e63ae5
--- /dev/null
+++ b/boost/fusion/sequence/comparison/detail/equal_to.hpp
@@ -0,0 +1,60 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+==============================================================================*/
+#if !defined(FUSION_EQUAL_TO_05052005_1142)
+#define FUSION_EQUAL_TO_05052005_1142
+
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename Seq1, typename Seq2, bool same_size>
+ struct sequence_equal_to
+ {
+ typedef typename result_of::end<Seq1>::type end1_type;
+ typedef typename result_of::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ return true;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return *a == *b
+ && call(fusion::next(a), fusion::next(b));
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename result_of::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+ };
+
+ template <typename Seq1, typename Seq2>
+ struct sequence_equal_to<Seq1, Seq2, false>
+ {
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& /*a*/, I2 const& /*b*/)
+ {
+ return false;
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/fusion/sequence/comparison/detail/greater.hpp b/boost/fusion/sequence/comparison/detail/greater.hpp
new file mode 100644
index 0000000000..b4c4b087a6
--- /dev/null
+++ b/boost/fusion/sequence/comparison/detail/greater.hpp
@@ -0,0 +1,49 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+==============================================================================*/
+#if !defined(FUSION_GREATER_05052005_1142)
+#define FUSION_GREATER_05052005_1142
+
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename Seq1, typename Seq2>
+ struct sequence_greater
+ {
+ typedef typename result_of::end<Seq1>::type end1_type;
+ typedef typename result_of::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ return false;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return *a > *b ||
+ (!(*b > *a) && call(fusion::next(a), fusion::next(b)));
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename result_of::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/fusion/sequence/comparison/detail/greater_equal.hpp b/boost/fusion/sequence/comparison/detail/greater_equal.hpp
new file mode 100644
index 0000000000..f3eccd5d55
--- /dev/null
+++ b/boost/fusion/sequence/comparison/detail/greater_equal.hpp
@@ -0,0 +1,49 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+==============================================================================*/
+#if !defined(FUSION_GREATER_EQUAL_05052005_1142)
+#define FUSION_GREATER_EQUAL_05052005_1142
+
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename Seq1, typename Seq2>
+ struct sequence_greater_equal
+ {
+ typedef typename result_of::end<Seq1>::type end1_type;
+ typedef typename result_of::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ return true;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return *a >= *b
+ && (!(*b >= *a) || call(fusion::next(a), fusion::next(b)));
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename result_of::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/fusion/sequence/comparison/detail/less.hpp b/boost/fusion/sequence/comparison/detail/less.hpp
new file mode 100644
index 0000000000..4957d7bfa8
--- /dev/null
+++ b/boost/fusion/sequence/comparison/detail/less.hpp
@@ -0,0 +1,49 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+==============================================================================*/
+#if !defined(FUSION_LESS_05052005_1141)
+#define FUSION_LESS_05052005_1141
+
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename Seq1, typename Seq2>
+ struct sequence_less
+ {
+ typedef typename result_of::end<Seq1>::type end1_type;
+ typedef typename result_of::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ return false;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return *a < *b ||
+ (!(*b < *a) && call(fusion::next(a), fusion::next(b)));
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename result_of::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/fusion/sequence/comparison/detail/less_equal.hpp b/boost/fusion/sequence/comparison/detail/less_equal.hpp
new file mode 100644
index 0000000000..08fe9ec389
--- /dev/null
+++ b/boost/fusion/sequence/comparison/detail/less_equal.hpp
@@ -0,0 +1,49 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+==============================================================================*/
+#if !defined(FUSION_LESS_EQUAL_05052005_1141)
+#define FUSION_LESS_EQUAL_05052005_1141
+
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename Seq1, typename Seq2>
+ struct sequence_less_equal
+ {
+ typedef typename result_of::end<Seq1>::type end1_type;
+ typedef typename result_of::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ return true;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return *a <= *b
+ && (!(*b <= *a) || call(fusion::next(a), fusion::next(b)));
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename result_of::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+ };
+}}}
+
+#endif
diff --git a/boost/fusion/sequence/comparison/detail/not_equal_to.hpp b/boost/fusion/sequence/comparison/detail/not_equal_to.hpp
new file mode 100644
index 0000000000..ac54dfb7d4
--- /dev/null
+++ b/boost/fusion/sequence/comparison/detail/not_equal_to.hpp
@@ -0,0 +1,60 @@
+/*=============================================================================
+ Copyright (c) 1999-2003 Jaakko Jarvi
+ Copyright (c) 2001-2011 Joel de Guzman
+
+ 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)
+==============================================================================*/
+#if !defined(FUSION_NOT_EQUAL_TO_05052005_1141)
+#define FUSION_NOT_EQUAL_TO_05052005_1141
+
+#include <boost/mpl/bool.hpp>
+#include <boost/fusion/iterator/deref.hpp>
+#include <boost/fusion/iterator/next.hpp>
+#include <boost/fusion/iterator/equal_to.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+ template <typename Seq1, typename Seq2, bool same_size>
+ struct sequence_not_equal_to
+ {
+ typedef typename result_of::end<Seq1>::type end1_type;
+ typedef typename result_of::end<Seq2>::type end2_type;
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const&, I2 const&, mpl::true_)
+ {
+ return false;
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b, mpl::false_)
+ {
+ return *a != *b
+ || call(fusion::next(a), fusion::next(b));
+ }
+
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ typename result_of::equal_to<I1, end1_type>::type eq;
+ return call(a, b, eq);
+ }
+ };
+
+ template <typename Seq1, typename Seq2>
+ struct sequence_not_equal_to<Seq1, Seq2, false>
+ {
+ template <typename I1, typename I2>
+ static bool
+ call(I1 const& a, I2 const& b)
+ {
+ return true;
+ }
+ };
+}}}
+
+#endif