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