os/ossrv/ossrv_pub/boost_apis/boost/lambda/numeric.hpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// -- numeric.hpp -- Boost Lambda Library -----------------------------------
sl@0
     2
// Copyright (C) 2002 Jaakko Järvi (jaakko.jarvi@cs.utu.fi)
sl@0
     3
// Copyright (C) 2002 Gary Powell (gwpowell@hotmail.com)
sl@0
     4
//
sl@0
     5
// Distributed under the Boost Software License, Version 1.0. (See
sl@0
     6
// accompanying file LICENSE_1_0.txt or copy at
sl@0
     7
// http://www.boost.org/LICENSE_1_0.txt)
sl@0
     8
//
sl@0
     9
// For more information, see http://www.boost.org
sl@0
    10
sl@0
    11
#ifndef BOOST_LAMBDA_NUMERIC_HPP
sl@0
    12
#define BOOST_LAMBDA_NUMERIC_HPP
sl@0
    13
sl@0
    14
#include "boost/lambda/core.hpp"
sl@0
    15
sl@0
    16
#include <numeric>
sl@0
    17
sl@0
    18
namespace boost {
sl@0
    19
  namespace lambda {
sl@0
    20
sl@0
    21
namespace ll {
sl@0
    22
sl@0
    23
// accumulate ---------------------------------
sl@0
    24
sl@0
    25
struct accumulate {
sl@0
    26
  
sl@0
    27
  template <class Args>
sl@0
    28
  struct sig { 
sl@0
    29
    typedef typename boost::remove_const<
sl@0
    30
        typename boost::tuples::element<3, Args>::type 
sl@0
    31
     >::type type; 
sl@0
    32
  };
sl@0
    33
sl@0
    34
  template <class A, class B, class C>
sl@0
    35
  C
sl@0
    36
  operator()(A a, B b, C c) const
sl@0
    37
  { return ::std::accumulate(a, b, c); }
sl@0
    38
sl@0
    39
  template <class A, class B, class C, class D>
sl@0
    40
  C
sl@0
    41
  operator()(A a, B b, C c, D d) const
sl@0
    42
  { return ::std::accumulate(a, b, c, d); }
sl@0
    43
};
sl@0
    44
sl@0
    45
// inner_product ---------------------------------
sl@0
    46
sl@0
    47
struct inner_product {
sl@0
    48
  
sl@0
    49
  template <class Args>
sl@0
    50
  struct sig { 
sl@0
    51
    typedef typename boost::remove_const<
sl@0
    52
        typename boost::tuples::element<4, Args>::type 
sl@0
    53
     >::type type; 
sl@0
    54
  };
sl@0
    55
sl@0
    56
  template <class A, class B, class C, class D>
sl@0
    57
  D
sl@0
    58
  operator()(A a, B b, C c, D d) const
sl@0
    59
  { return ::std::inner_product(a, b, c, d); }
sl@0
    60
sl@0
    61
  template <class A, class B, class C, class D, class E, class F>
sl@0
    62
  D
sl@0
    63
  operator()(A a, B b, C c, D d, E e, F f) const
sl@0
    64
  { return ::std::inner_product(a, b, c, d, e, f); }
sl@0
    65
};
sl@0
    66
sl@0
    67
sl@0
    68
// partial_sum ---------------------------------
sl@0
    69
sl@0
    70
struct partial_sum {
sl@0
    71
  
sl@0
    72
  template <class Args>
sl@0
    73
  struct sig { 
sl@0
    74
    typedef typename boost::remove_const<
sl@0
    75
        typename boost::tuples::element<3, Args>::type 
sl@0
    76
     >::type type; 
sl@0
    77
  };
sl@0
    78
sl@0
    79
  template <class A, class B, class C>
sl@0
    80
  C
sl@0
    81
  operator()(A a, B b, C c) const
sl@0
    82
  { return ::std::partial_sum(a, b, c); }
sl@0
    83
sl@0
    84
  template <class A, class B, class C, class D>
sl@0
    85
  C
sl@0
    86
  operator()(A a, B b, C c, D d) const
sl@0
    87
  { return ::std::partial_sum(a, b, c, d); }
sl@0
    88
};
sl@0
    89
sl@0
    90
// adjacent_difference ---------------------------------
sl@0
    91
sl@0
    92
struct adjacent_difference {
sl@0
    93
  
sl@0
    94
  template <class Args>
sl@0
    95
  struct sig { 
sl@0
    96
    typedef typename boost::remove_const<
sl@0
    97
        typename boost::tuples::element<3, Args>::type 
sl@0
    98
     >::type type; 
sl@0
    99
  };
sl@0
   100
sl@0
   101
  template <class A, class B, class C>
sl@0
   102
  C
sl@0
   103
  operator()(A a, B b, C c) const
sl@0
   104
  { return ::std::adjacent_difference(a, b, c); }
sl@0
   105
sl@0
   106
  template <class A, class B, class C, class D>
sl@0
   107
  C
sl@0
   108
  operator()(A a, B b, C c, D d) const
sl@0
   109
  { return ::std::adjacent_difference(a, b, c, d); }
sl@0
   110
};
sl@0
   111
sl@0
   112
} // end of ll namespace
sl@0
   113
sl@0
   114
} // end of lambda namespace
sl@0
   115
} // end of boost namespace
sl@0
   116
sl@0
   117
sl@0
   118
sl@0
   119
#endif