You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
119 lines
2.7 KiB
119 lines
2.7 KiB
// -- 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
|
|
|