120 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			120 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | // -- numeric.hpp -- Boost Lambda Library -----------------------------------
 | ||
|  | // Copyright (C) 2002 Jaakko Jarvi (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
 |