ossrv_pub/boost_apis/boost/lambda/numeric.hpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ossrv_pub/boost_apis/boost/lambda/numeric.hpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,119 @@
+// -- numeric.hpp -- Boost Lambda Library -----------------------------------
+// Copyright (C) 2002 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
+// Copyright (C) 2002 Gary Powell (gwpowell@hotmail.com)
+//
+// 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)
+//
+// For more information, see http://www.boost.org
+
+#ifndef BOOST_LAMBDA_NUMERIC_HPP
+#define BOOST_LAMBDA_NUMERIC_HPP
+
+#include "boost/lambda/core.hpp"
+
+#include <numeric>
+
+namespace boost {
+  namespace lambda {
+
+namespace ll {
+
+// accumulate ---------------------------------
+
+struct accumulate {
+  
+  template <class Args>
+  struct sig { 
+    typedef typename boost::remove_const<
+        typename boost::tuples::element<3, Args>::type 
+     >::type type; 
+  };
+
+  template <class A, class B, class C>
+  C
+  operator()(A a, B b, C c) const
+  { return ::std::accumulate(a, b, c); }
+
+  template <class A, class B, class C, class D>
+  C
+  operator()(A a, B b, C c, D d) const
+  { return ::std::accumulate(a, b, c, d); }
+};
+
+// inner_product ---------------------------------
+
+struct inner_product {
+  
+  template <class Args>
+  struct sig { 
+    typedef typename boost::remove_const<
+        typename boost::tuples::element<4, Args>::type 
+     >::type type; 
+  };
+
+  template <class A, class B, class C, class D>
+  D
+  operator()(A a, B b, C c, D d) const
+  { return ::std::inner_product(a, b, c, d); }
+
+  template <class A, class B, class C, class D, class E, class F>
+  D
+  operator()(A a, B b, C c, D d, E e, F f) const
+  { return ::std::inner_product(a, b, c, d, e, f); }
+};
+
+
+// partial_sum ---------------------------------
+
+struct partial_sum {
+  
+  template <class Args>
+  struct sig { 
+    typedef typename boost::remove_const<
+        typename boost::tuples::element<3, Args>::type 
+     >::type type; 
+  };
+
+  template <class A, class B, class C>
+  C
+  operator()(A a, B b, C c) const
+  { return ::std::partial_sum(a, b, c); }
+
+  template <class A, class B, class C, class D>
+  C
+  operator()(A a, B b, C c, D d) const
+  { return ::std::partial_sum(a, b, c, d); }
+};
+
+// adjacent_difference ---------------------------------
+
+struct adjacent_difference {
+  
+  template <class Args>
+  struct sig { 
+    typedef typename boost::remove_const<
+        typename boost::tuples::element<3, Args>::type 
+     >::type type; 
+  };
+
+  template <class A, class B, class C>
+  C
+  operator()(A a, B b, C c) const
+  { return ::std::adjacent_difference(a, b, c); }
+
+  template <class A, class B, class C, class D>
+  C
+  operator()(A a, B b, C c, D d) const
+  { return ::std::adjacent_difference(a, b, c, d); }
+};
+
+} // end of ll namespace
+
+} // end of lambda namespace
+} // end of boost namespace
+
+
+
+#endif