]> git.donarmstrong.com Git - rsem.git/blobdiff - boost/fusion/container/list/detail/reverse_cons.hpp
Updated boost to v1.55.0
[rsem.git] / boost / fusion / container / list / detail / reverse_cons.hpp
diff --git a/boost/fusion/container/list/detail/reverse_cons.hpp b/boost/fusion/container/list/detail/reverse_cons.hpp
new file mode 100644 (file)
index 0000000..5083e0c
--- /dev/null
@@ -0,0 +1,43 @@
+/*=============================================================================
+    Copyright (c) 2011 Eric Niebler
+
+    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(BOOST_FUSION_REVERSE_CONS_HPP_INCLUDED)
+#define BOOST_FUSION_REVERSE_CONS_HPP_INCLUDED
+
+#include <boost/fusion/container/list/cons_fwd.hpp>
+
+namespace boost { namespace fusion { namespace detail
+{
+    ////////////////////////////////////////////////////////////////////////////
+    template<typename Cons, typename State = nil_>
+    struct reverse_cons;
+
+    template<typename Car, typename Cdr, typename State>
+    struct reverse_cons<cons<Car, Cdr>, State>
+    {
+        typedef reverse_cons<Cdr, cons<Car, State> > impl;
+        typedef typename impl::type type;
+
+        static type call(cons<Car, Cdr> const &cons, State const &state = State())
+        {
+            typedef fusion::cons<Car, State> cdr_type;
+            return impl::call(cons.cdr, cdr_type(cons.car, state));
+        }
+    };
+
+    template<typename State>
+    struct reverse_cons<nil_, State>
+    {
+        typedef State type;
+
+        static State const &call(nil_ const &, State const &state = State())
+        {
+            return state;
+        }
+    };
+}}}
+
+#endif