123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- // -- 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
|