epoc32/include/stdapis/stlport/stl/_numeric.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
/*
williamr@2
     2
 *
williamr@2
     3
 * Copyright (c) 1994
williamr@2
     4
 * Hewlett-Packard Company
williamr@2
     5
 *
williamr@2
     6
 * Copyright (c) 1996,1997
williamr@2
     7
 * Silicon Graphics Computer Systems, Inc.
williamr@2
     8
 *
williamr@2
     9
 * Copyright (c) 1999 
williamr@2
    10
 * Boris Fomitchev
williamr@2
    11
 *
williamr@2
    12
 * This material is provided "as is", with absolutely no warranty expressed
williamr@2
    13
 * or implied. Any use is at your own risk.
williamr@2
    14
 *
williamr@2
    15
 * Permission to use or copy this software for any purpose is hereby granted 
williamr@2
    16
 * without fee, provided the above notices are retained on all copies.
williamr@2
    17
 * Permission to modify the code and to distribute modified code is granted,
williamr@2
    18
 * provided the above notices are retained, and a notice that the code was
williamr@2
    19
 * modified is included with the above copyright notice.
williamr@2
    20
 *
williamr@2
    21
 */
williamr@2
    22
williamr@2
    23
/* NOTE: This is an internal header file, included by other STL headers.
williamr@2
    24
 *   You should not attempt to use it directly.
williamr@2
    25
 */
williamr@2
    26
williamr@2
    27
williamr@2
    28
#ifndef _STLP_INTERNAL_NUMERIC_H
williamr@2
    29
#define _STLP_INTERNAL_NUMERIC_H
williamr@2
    30
williamr@2
    31
#ifndef _STLP_INTERNAL_FUNCTION_H
williamr@2
    32
# include <stl/_function_base.h>
williamr@2
    33
#endif
williamr@2
    34
williamr@2
    35
#ifndef _STLP_INTERNAL_ITERATOR_BASE_H
williamr@2
    36
# include <stl/_iterator_base.h>
williamr@2
    37
#endif
williamr@2
    38
williamr@2
    39
_STLP_BEGIN_NAMESPACE
williamr@2
    40
williamr@2
    41
template <class _InputIterator, class _Tp>
williamr@2
    42
_STLP_INLINE_LOOP
williamr@2
    43
_Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp _Init)
williamr@2
    44
{
williamr@2
    45
  _STLP_DEBUG_CHECK(__check_range(__first, __last))
williamr@2
    46
  for ( ; __first != __last; ++__first)
williamr@2
    47
#ifndef 	__SYMBIAN32__  	
williamr@2
    48
    _Init = _Init + *__first;
williamr@2
    49
#else
williamr@2
    50
	    _Init +=  *__first;
williamr@2
    51
#endif
williamr@2
    52
  return _Init;
williamr@2
    53
}
williamr@2
    54
williamr@2
    55
template <class _InputIterator, class _Tp, class _BinaryOperation>
williamr@2
    56
_STLP_INLINE_LOOP
williamr@2
    57
_Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp _Init,
williamr@2
    58
               _BinaryOperation __binary_op)
williamr@2
    59
{
williamr@2
    60
  _STLP_DEBUG_CHECK(__check_range(__first, __last))
williamr@2
    61
  for ( ; __first != __last; ++__first)
williamr@2
    62
    _Init = __binary_op(_Init, *__first);
williamr@2
    63
  return _Init;
williamr@2
    64
}
williamr@2
    65
williamr@2
    66
template <class _InputIterator1, class _InputIterator2, class _Tp>
williamr@2
    67
_STLP_INLINE_LOOP
williamr@2
    68
_Tp inner_product(_InputIterator1 __first1, _InputIterator1 __last1,
williamr@2
    69
                  _InputIterator2 __first2, _Tp _Init)
williamr@2
    70
{
williamr@2
    71
  _STLP_DEBUG_CHECK(__check_range(__first1, __last1))
williamr@2
    72
  for ( ; __first1 != __last1; ++__first1, ++__first2)
williamr@2
    73
    _Init = _Init + (*__first1 * *__first2);
williamr@2
    74
  return _Init;
williamr@2
    75
}
williamr@2
    76
williamr@2
    77
template <class _InputIterator1, class _InputIterator2, class _Tp,
williamr@2
    78
          class _BinaryOperation1, class _BinaryOperation2>
williamr@2
    79
_STLP_INLINE_LOOP
williamr@2
    80
_Tp inner_product(_InputIterator1 __first1, _InputIterator1 __last1,
williamr@2
    81
                  _InputIterator2 __first2, _Tp _Init, 
williamr@2
    82
                  _BinaryOperation1 __binary_op1,
williamr@2
    83
                  _BinaryOperation2 __binary_op2)
williamr@2
    84
{
williamr@2
    85
  _STLP_DEBUG_CHECK(__check_range(__first1, __last1))
williamr@2
    86
  for ( ; __first1 != __last1; ++__first1, ++__first2)
williamr@2
    87
    _Init = __binary_op1(_Init, __binary_op2(*__first1, *__first2));
williamr@2
    88
  return _Init;
williamr@2
    89
}
williamr@2
    90
williamr@2
    91
template <class _InputIterator, class _OutputIterator, class _Tp,
williamr@2
    92
          class _BinaryOperation>
williamr@2
    93
_OutputIterator 
williamr@2
    94
__partial_sum(_InputIterator __first, _InputIterator __last, 
williamr@2
    95
              _OutputIterator __result, _Tp*, _BinaryOperation __binary_op);
williamr@2
    96
williamr@2
    97
williamr@2
    98
template <class _InputIterator, class _OutputIterator>
williamr@2
    99
inline _OutputIterator 
williamr@2
   100
partial_sum(_InputIterator __first, _InputIterator __last,
williamr@2
   101
            _OutputIterator __result) {
williamr@2
   102
  return __partial_sum(__first, __last, __result, _STLP_VALUE_TYPE(__first, _InputIterator),
williamr@2
   103
                       __plus(_STLP_VALUE_TYPE(__first, _InputIterator)));
williamr@2
   104
}
williamr@2
   105
williamr@2
   106
template <class _InputIterator, class _OutputIterator, class _BinaryOperation>
williamr@2
   107
inline _OutputIterator 
williamr@2
   108
partial_sum(_InputIterator __first, _InputIterator __last,
williamr@2
   109
            _OutputIterator __result, _BinaryOperation __binary_op) {
williamr@2
   110
  return __partial_sum(__first, __last, __result, _STLP_VALUE_TYPE(__first, _InputIterator), 
williamr@2
   111
                       __binary_op);
williamr@2
   112
}
williamr@2
   113
williamr@2
   114
williamr@2
   115
template <class _InputIterator, class _OutputIterator, class _Tp, 
williamr@2
   116
          class _BinaryOperation>
williamr@2
   117
_OutputIterator
williamr@2
   118
__adjacent_difference(_InputIterator __first, _InputIterator __last, 
williamr@2
   119
                      _OutputIterator __result, _Tp*,
williamr@2
   120
                      _BinaryOperation __binary_op);
williamr@2
   121
williamr@2
   122
template <class _InputIterator, class _OutputIterator>
williamr@2
   123
inline _OutputIterator
williamr@2
   124
adjacent_difference(_InputIterator __first,
williamr@2
   125
                    _InputIterator __last, _OutputIterator __result) {
williamr@2
   126
  return __adjacent_difference(__first, __last, __result,
williamr@2
   127
                               _STLP_VALUE_TYPE(__first, _InputIterator),
williamr@2
   128
                               __minus(_STLP_VALUE_TYPE(__first, _InputIterator)));
williamr@2
   129
}
williamr@2
   130
williamr@2
   131
template <class _InputIterator, class _OutputIterator, class _BinaryOperation>
williamr@2
   132
_OutputIterator 
williamr@2
   133
adjacent_difference(_InputIterator __first, _InputIterator __last,
williamr@2
   134
                    _OutputIterator __result, _BinaryOperation __binary_op) {
williamr@2
   135
  return __adjacent_difference(__first, __last, __result,
williamr@2
   136
                               _STLP_VALUE_TYPE(__first, _InputIterator),
williamr@2
   137
                               __binary_op);
williamr@2
   138
}
williamr@2
   139
williamr@2
   140
template <class _Tp, class _Integer, class _MonoidOperation>
williamr@2
   141
_Tp __power(_Tp __x, _Integer __n, _MonoidOperation __opr);
williamr@2
   142
williamr@2
   143
# ifndef _STLP_NO_EXTENSIONS
williamr@2
   144
williamr@2
   145
// Returns __x ** __n, where __n >= 0.  _Note that "multiplication"
williamr@2
   146
// is required to be associative, but not necessarily commutative.
williamr@2
   147
williamr@2
   148
template <class _Tp, class _Integer>
williamr@2
   149
inline _Tp __power(_Tp __x, _Integer __n)
williamr@2
   150
{
williamr@2
   151
  return __power(__x, __n, multiplies<_Tp>());
williamr@2
   152
}
williamr@2
   153
williamr@2
   154
// Alias for the internal name __power.  Note that power is an extension,
williamr@2
   155
// not part of the C++ standard.
williamr@2
   156
template <class _Tp, class _Integer, class _MonoidOperation>
williamr@2
   157
inline _Tp power(_Tp __x, _Integer __n, _MonoidOperation __opr) {
williamr@2
   158
  return __power(__x, __n, __opr);
williamr@2
   159
}
williamr@2
   160
williamr@2
   161
williamr@2
   162
template <class _Tp, class _Integer>
williamr@2
   163
inline _Tp power(_Tp __x, _Integer __n) {
williamr@2
   164
  return __power(__x, __n, multiplies<_Tp>());
williamr@2
   165
}
williamr@2
   166
williamr@2
   167
// iota is not part of the C++ standard.  It is an extension.
williamr@2
   168
williamr@2
   169
template <class _ForwardIterator, class _Tp>
williamr@2
   170
_STLP_INLINE_LOOP
williamr@2
   171
void 
williamr@2
   172
iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __val)
williamr@2
   173
{
williamr@2
   174
  _STLP_DEBUG_CHECK(__check_range(__first, __last))
williamr@2
   175
  while (__first != __last)
williamr@2
   176
    *__first++ = __val++;
williamr@2
   177
}
williamr@2
   178
# endif
williamr@2
   179
williamr@2
   180
_STLP_END_NAMESPACE
williamr@2
   181
williamr@2
   182
# if !defined (_STLP_LINK_TIME_INSTANTIATION)
williamr@2
   183
#  include <stl/_numeric.c>
williamr@2
   184
# endif
williamr@2
   185
williamr@2
   186
#endif /* _STLP_INTERNAL_NUMERIC_H */
williamr@2
   187
williamr@2
   188
// Local Variables:
williamr@2
   189
// mode:C++
williamr@2
   190
// End: