74 #ifndef SLIP_ARITHMETIC_OP_HPP
75 #define SLIP_ARITHMETIC_OP_HPP
121 template<
typename InputIterator1,
122 typename InputIterator2,
123 typename OutputIterator>
125 void plus(InputIterator1 __first1,
126 InputIterator1 __last1,
127 InputIterator2 __first2,
128 OutputIterator __result)
130 std::transform(__first1,__last1,
133 std::plus<
typename std::iterator_traits<OutputIterator>::value_type>());
197 template<
typename _InputIterator1,
198 typename _InputIterator2,
199 typename _MaskIterator,
200 typename _OutputIterator>
202 void plus_mask(_InputIterator1 __first1, _InputIterator1 __last1,
203 _MaskIterator __mask_first,
204 _InputIterator2 __first2,
205 _OutputIterator __result,
206 typename std::iterator_traits<_MaskIterator>::value_type value=
typename std::iterator_traits<_MaskIterator>::value_type(1))
214 std::plus<
typename std::iterator_traits<_InputIterator1>::value_type>(),
262 template<
typename _InputIterator1,
263 typename _InputIterator2,
264 typename _OutputIterator,
267 void plus_if(_InputIterator1 __first1, _InputIterator1 __last1,
268 _InputIterator2 __first2,
269 _OutputIterator __result,
277 std::plus<
typename std::iterator_traits<_InputIterator1>::value_type>(),
311 template<
typename InputIterator1,
312 typename InputIterator2,
313 typename OutputIterator>
316 InputIterator1 __last1,
317 InputIterator2 __first2,
318 OutputIterator __result)
320 std::transform(__first1,__last1,
323 std::minus<
typename std::iterator_traits<OutputIterator>::value_type>());
387 template<
typename _InputIterator1,
388 typename _InputIterator2,
389 typename _MaskIterator,
390 typename _OutputIterator>
392 void minus_mask(_InputIterator1 __first1, _InputIterator1 __last1,
393 _MaskIterator __mask_first,
394 _InputIterator2 __first2,
395 _OutputIterator __result,
396 typename std::iterator_traits<_MaskIterator>::value_type value=
typename std::iterator_traits<_MaskIterator>::value_type(1))
404 std::minus<
typename std::iterator_traits<_InputIterator1>::value_type>(),
453 template<
typename _InputIterator1,
454 typename _InputIterator2,
455 typename _OutputIterator,
458 void minus_if(_InputIterator1 __first1, _InputIterator1 __last1,
459 _InputIterator2 __first2,
460 _OutputIterator __result,
468 std::minus<
typename std::iterator_traits<_InputIterator1>::value_type>(),
504 template<
typename InputIterator1,
505 typename InputIterator2,
506 typename OutputIterator>
509 InputIterator1 __last1,
510 InputIterator2 __first2,
511 OutputIterator __result)
513 std::transform(__first1,__last1,
516 std::multiplies<
typename std::iterator_traits<OutputIterator>::value_type>());
580 template<
typename _InputIterator1,
581 typename _InputIterator2,
582 typename _MaskIterator,
583 typename _OutputIterator>
586 _MaskIterator __mask_first,
587 _InputIterator2 __first2,
588 _OutputIterator __result,
589 typename std::iterator_traits<_MaskIterator>::value_type value=
typename std::iterator_traits<_MaskIterator>::value_type(1))
597 std::multiplies<
typename std::iterator_traits<_InputIterator1>::value_type>(),
647 template<
typename _InputIterator1,
648 typename _InputIterator2,
649 typename _OutputIterator,
653 _InputIterator2 __first2,
654 _OutputIterator __result,
662 std::multiplies<
typename std::iterator_traits<_InputIterator1>::value_type>(),
697 template<
typename InputIterator1,
698 typename InputIterator2,
699 typename OutputIterator>
702 InputIterator1 __last1,
703 InputIterator2 __first2,
704 OutputIterator __result)
706 std::transform(__first1,__last1,
709 std::divides<
typename std::iterator_traits<OutputIterator>::value_type>());
772 template<
typename _InputIterator1,
773 typename _InputIterator2,
774 typename _MaskIterator,
775 typename _OutputIterator>
778 _MaskIterator __mask_first,
779 _InputIterator2 __first2,
780 _OutputIterator __result,
781 typename std::iterator_traits<_MaskIterator>::value_type value=
typename std::iterator_traits<_MaskIterator>::value_type(1))
789 std::divides<
typename std::iterator_traits<_InputIterator1>::value_type>(),
838 template<
typename _InputIterator1,
839 typename _InputIterator2,
840 typename _OutputIterator,
843 void divides_if(_InputIterator1 __first1, _InputIterator1 __last1,
844 _InputIterator2 __first2,
845 _OutputIterator __result,
853 std::divides<
typename std::iterator_traits<_InputIterator1>::value_type>(),
887 template<
typename InputIterator1,
888 typename InputIterator2,
889 typename OutputIterator>
892 InputIterator1 __last1,
893 InputIterator2 __first2,
894 OutputIterator __result)
896 std::transform(__first1,__last1,
899 slip::mini<
typename std::iterator_traits<OutputIterator>::value_type>());
962 template<
typename _InputIterator1,
963 typename _InputIterator2,
964 typename _MaskIterator,
965 typename _OutputIterator>
968 _MaskIterator __mask_first,
969 _InputIterator2 __first2,
970 _OutputIterator __result,
971 typename std::iterator_traits<_MaskIterator>::value_type value=
typename std::iterator_traits<_MaskIterator>::value_type(1))
979 slip::mini<
typename std::iterator_traits<_InputIterator1>::value_type>(),
1027 template<
typename _InputIterator1,
1028 typename _InputIterator2,
1029 typename _OutputIterator,
1030 typename _Predicate>
1032 void minimum_if(_InputIterator1 __first1, _InputIterator1 __last1,
1033 _InputIterator2 __first2,
1034 _OutputIterator __result,
1042 slip::mini<
typename std::iterator_traits<_InputIterator1>::value_type>(),
1077 template<
typename InputIterator1,
1078 typename InputIterator2,
1079 typename OutputIterator>
1082 InputIterator1 __last1,
1083 InputIterator2 __first2,
1084 OutputIterator __result)
1086 std::transform(__first1,__last1,
1089 slip::maxi<
typename std::iterator_traits<OutputIterator>::value_type>());
1152 template<
typename _InputIterator1,
1153 typename _InputIterator2,
1154 typename _MaskIterator,
1155 typename _OutputIterator>
1158 _MaskIterator __mask_first,
1159 _InputIterator2 __first2,
1160 _OutputIterator __result,
1161 typename std::iterator_traits<_MaskIterator>::value_type value=
typename std::iterator_traits<_MaskIterator>::value_type(1))
1169 slip::maxi<
typename std::iterator_traits<_InputIterator1>::value_type>(),
1217 template<
typename _InputIterator1,
1218 typename _InputIterator2,
1219 typename _OutputIterator,
1220 typename _Predicate>
1222 void maximum_if(_InputIterator1 __first1, _InputIterator1 __last1,
1223 _InputIterator2 __first2,
1224 _OutputIterator __result,
1232 slip::maxi<
typename std::iterator_traits<_InputIterator1>::value_type>(),
1266 template<
typename InputIterator1,
1267 typename OutputIterator>
1270 InputIterator1 __last1,
1271 const typename std::iterator_traits<InputIterator1>::value_type& scalar,
1272 OutputIterator __result)
1274 std::transform(__first1,__last1,
1276 std::bind2nd(
std::plus<
typename std::iterator_traits<InputIterator1>::value_type>(),scalar));
1331 template<
typename _InputIterator1,
1332 typename _MaskIterator,
1333 typename _OutputIterator>
1336 _MaskIterator __mask_first,
1337 const typename std::iterator_traits<_InputIterator1>::value_type& scalar,
1338 _OutputIterator __result,
1339 typename std::iterator_traits<_MaskIterator>::value_type value=
typename std::iterator_traits<_MaskIterator>::value_type(1))
1346 std::bind2nd(
std::plus<
typename std::iterator_traits<_InputIterator1>::value_type>(),scalar),
1389 template<
typename _InputIterator1,
1390 typename _OutputIterator,
1391 typename _Predicate>
1394 const typename std::iterator_traits<_InputIterator1>::value_type& scalar,
1395 _OutputIterator __result,
1402 std::bind2nd(
std::plus<
typename std::iterator_traits<_InputIterator1>::value_type>(),scalar),
1430 template<
typename InputIterator1,
1431 typename OutputIterator>
1434 InputIterator1 __last1,
1435 const typename std::iterator_traits<InputIterator1>::value_type& scalar,
1436 OutputIterator __result)
1438 std::transform(__first1,__last1,
1440 std::bind2nd(
std::minus<
typename std::iterator_traits<InputIterator1>::value_type>(),scalar));
1495 template<
typename _InputIterator1,
1496 typename _MaskIterator,
1497 typename _OutputIterator>
1500 _MaskIterator __mask_first,
1501 const typename std::iterator_traits<_InputIterator1>::value_type& scalar,
1502 _OutputIterator __result,
1503 typename std::iterator_traits<_MaskIterator>::value_type value=
typename std::iterator_traits<_MaskIterator>::value_type(1))
1510 std::bind2nd(
std::minus<
typename std::iterator_traits<_InputIterator1>::value_type>(),scalar),
1552 template<
typename _InputIterator1,
1553 typename _OutputIterator,
1554 typename _Predicate>
1557 const typename std::iterator_traits<_InputIterator1>::value_type& scalar,
1558 _OutputIterator __result,
1565 std::bind2nd(
std::minus<
typename std::iterator_traits<_InputIterator1>::value_type>(),scalar),
1594 template<
typename InputIterator1,
1595 typename OutputIterator>
1598 InputIterator1 __last1,
1599 const typename std::iterator_traits<InputIterator1>::value_type& scalar,
1600 OutputIterator __result)
1602 std::transform(__first1,__last1,
1604 std::bind2nd(
std::multiplies<
typename std::iterator_traits<InputIterator1>::value_type>(),scalar));
1659 template<
typename _InputIterator1,
1660 typename _MaskIterator,
1661 typename _OutputIterator>
1664 _MaskIterator __mask_first,
1665 const typename std::iterator_traits<_InputIterator1>::value_type& scalar,
1666 _OutputIterator __result,
1667 typename std::iterator_traits<_MaskIterator>::value_type value=
typename std::iterator_traits<_MaskIterator>::value_type(1))
1674 std::bind2nd(
std::multiplies<
typename std::iterator_traits<_InputIterator1>::value_type>(),scalar),
1717 template<
typename _InputIterator1,
1718 typename _OutputIterator,
1719 typename _Predicate>
1722 const typename std::iterator_traits<_InputIterator1>::value_type& scalar,
1723 _OutputIterator __result,
1730 std::bind2nd(
std::multiplies<
typename std::iterator_traits<_InputIterator1>::value_type>(),scalar),
1759 template<
typename InputIterator1,
1760 typename OutputIterator>
1763 InputIterator1 __last1,
1764 const typename std::iterator_traits<InputIterator1>::value_type& scalar,
1765 OutputIterator __result)
1767 std::transform(__first1,__last1,
1769 std::bind2nd(
std::divides<
typename std::iterator_traits<InputIterator1>::value_type>(),scalar));
1823 template<
typename _InputIterator1,
1824 typename _MaskIterator,
1825 typename _OutputIterator>
1828 _MaskIterator __mask_first,
1829 const typename std::iterator_traits<_InputIterator1>::value_type& scalar,
1830 _OutputIterator __result,
1831 typename std::iterator_traits<_MaskIterator>::value_type value=
typename std::iterator_traits<_MaskIterator>::value_type(1))
1838 std::bind2nd(
std::divides<
typename std::iterator_traits<_InputIterator1>::value_type>(),scalar),
1881 template<
typename _InputIterator1,
1882 typename _OutputIterator,
1883 typename _Predicate>
1886 const typename std::iterator_traits<_InputIterator1>::value_type& scalar,
1887 _OutputIterator __result,
1894 std::bind2nd(
std::divides<
typename std::iterator_traits<_InputIterator1>::value_type>(),scalar),
1928 template<
typename InputIterator,
typename OutputIterator>
1931 InputIterator __last1,
1932 OutputIterator __result)
1935 std::transform(__first1,__last1,
1937 std::negate<
typename std::iterator_traits<InputIterator>::value_type>());
1988 template<
typename InputIterator,
1989 typename MaskIterator,
1990 typename OutputIterator>
1993 InputIterator __last1,
1994 MaskIterator __mask_first,
1995 OutputIterator __result,
1996 typename std::iterator_traits<MaskIterator>::value_type value=
typename std::iterator_traits<MaskIterator>::value_type(1))
2002 std::negate<
typename std::iterator_traits<InputIterator>::value_type>(),value);
2039 template<
typename _InputIterator1,
2040 typename _OutputIterator,
2041 typename _Predicate>
2043 void negate_if(_InputIterator1 __first1, _InputIterator1 __last1,
2045 _OutputIterator __result,
2052 std::negate<
typename std::iterator_traits<_InputIterator1>::value_type>(),
2085 template <
class ForwardIterator,
class T>
2087 void iota(ForwardIterator first, ForwardIterator last, T value, T step = T(1))
2089 for (;first != last; ++first)
2092 value = value + step;
2129 template <
class ForwardIterator,
typename MaskIterator,
class T>
2132 ForwardIterator last,
2133 MaskIterator mask_first,
2134 T value, T step = T(1),
2135 typename std::iterator_traits<MaskIterator>::value_type value_mask=
typename std::iterator_traits<MaskIterator>::value_type(1))
2137 for (;first != last; ++first,++mask_first)
2139 if(*mask_first == value_mask)
2142 value = value + step;
2154 #endif //SLIP_ARITHMETIC_OP_HPP
void minus(InputIterator1 __first1, InputIterator1 __last1, InputIterator2 __first2, OutputIterator __result)
Computes the difference of two ranges.
void minimum_mask(_InputIterator1 __first1, _InputIterator1 __last1, _MaskIterator __mask_first, _InputIterator2 __first2, _OutputIterator __result, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Computes the minimum of two ranges according to a mask sequence.
void negate(InputIterator __first1, InputIterator __last1, OutputIterator __result)
Computes the negation of a range.
Computes the maximum value between two values.
void minimum_if(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _OutputIterator __result, _Predicate __pred)
Computes the minimum of two ranges according to a Predicate.
void minus_if(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _OutputIterator __result, _Predicate __pred)
Computes the difference of two ranges according to a Predicate.
void divides_scalar_if(_InputIterator1 __first1, _InputIterator1 __last1, const typename std::iterator_traits< _InputIterator1 >::value_type &scalar, _OutputIterator __result, _Predicate __pred)
Divides a range by a scalar according to a Predicate.
void multiplies_scalar_if(_InputIterator1 __first1, _InputIterator1 __last1, const typename std::iterator_traits< _InputIterator1 >::value_type &scalar, _OutputIterator __result, _Predicate __pred)
Multiplies a range by a scalar according to a Predicate.
_OutputIterator transform_if(_InputIterator first, _InputIterator last, _OutputIterator result, _UnaryOperation unary_op, _Predicate pred)
Perform an operation on a sequence according to a Predicate.
void negate_mask(InputIterator __first1, InputIterator __last1, MaskIterator __mask_first, OutputIterator __result, typename std::iterator_traits< MaskIterator >::value_type value=typename std::iterator_traits< MaskIterator >::value_type(1))
Computes the negation of a range according to a mask range.
void plus_mask(_InputIterator1 __first1, _InputIterator1 __last1, _MaskIterator __mask_first, _InputIterator2 __first2, _OutputIterator __result, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Computes the addition of two ranges according to a mask sequence.
void divides_scalar(InputIterator1 __first1, InputIterator1 __last1, const typename std::iterator_traits< InputIterator1 >::value_type &scalar, OutputIterator __result)
Divides a range by a scalar.
void negate_if(_InputIterator1 __first1, _InputIterator1 __last1, _OutputIterator __result, _Predicate __pred)
Computes the pointwise negate of a ranges according to a Predicate.
void divides(InputIterator1 __first1, InputIterator1 __last1, InputIterator2 __first2, OutputIterator __result)
Computes the pointwise division of two ranges.
_OutputIterator transform_mask_bin(_InputIterator1 first1, _InputIterator1 last1, _MaskIterator mask_first, _InputIterator2 first2, _OutputIterator result, _BinaryOperation binary_op, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Perform an operation on corresponding elements of two sequences according to a mask sequence...
void multiplies_scalar(InputIterator1 __first1, InputIterator1 __last1, const typename std::iterator_traits< InputIterator1 >::value_type &scalar, OutputIterator __result)
Multiplies a range by a scalar.
void plus_if(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _OutputIterator __result, _Predicate __pred)
Computes the addition of two ranges according to a Predicate.
void minimum(InputIterator1 __first1, InputIterator1 __last1, InputIterator2 __first2, OutputIterator __result)
Computes the minimum of two ranges.
void iota_mask(ForwardIterator first, ForwardIterator last, MaskIterator mask_first, T value, T step=T(1), typename std::iterator_traits< MaskIterator >::value_type value_mask=typename std::iterator_traits< MaskIterator >::value_type(1))
Iota_mask sequential increasing values based on a predefined step to a range according to a mask sequ...
void iota(ForwardIterator first, ForwardIterator last, T value, T step=T(1))
Iota assigns sequential increasing values based on a predefined step to a range. That is...
Computes the minimum value between two values.
void maximum(InputIterator1 __first1, InputIterator1 __last1, InputIterator2 __first2, OutputIterator __result)
Computes the maximum of two ranges.
void plus_scalar(InputIterator1 __first1, InputIterator1 __last1, const typename std::iterator_traits< InputIterator1 >::value_type &scalar, OutputIterator __result)
Adds a scalar to a range.
void multiplies_mask(_InputIterator1 __first1, _InputIterator1 __last1, _MaskIterator __mask_first, _InputIterator2 __first2, _OutputIterator __result, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Computes the pointwise product of two ranges according to a mask sequence.
void maximum_if(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _OutputIterator __result, _Predicate __pred)
Computes the maximum of two ranges according to a Predicate.
void minus_scalar_if(_InputIterator1 __first1, _InputIterator1 __last1, const typename std::iterator_traits< _InputIterator1 >::value_type &scalar, _OutputIterator __result, _Predicate __pred)
Substracts a scalar to a range according to a Predicate.
void divides_if(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _OutputIterator __result, _Predicate __pred)
Computes the pointwise division of two ranges. according to a Predicate.
void plus(InputIterator1 __first1, InputIterator1 __last1, InputIterator2 __first2, OutputIterator __result)
Computes the addition of two ranges.
void multiplies(InputIterator1 __first1, InputIterator1 __last1, InputIterator2 __first2, OutputIterator __result)
Computes the pointwise product of two ranges.
_OutputIterator transform_mask_un(_InputIterator first, _InputIterator last, _MaskIterator mask_first, _OutputIterator result, _UnaryOperation unary_op, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Perform an operation on a sequence according to a mask sequence.
void multiplies_if(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _OutputIterator __result, _Predicate __pred)
Computes the pointwise product of two ranges according to a Predicate.
Provides some mathematical functors and constants.
Provides some extension to STL algorithms.
void minus_scalar(InputIterator1 __first1, InputIterator1 __last1, const typename std::iterator_traits< InputIterator1 >::value_type &scalar, OutputIterator __result)
Substracts a scalar to a range.
void maximum_mask(_InputIterator1 __first1, _InputIterator1 __last1, _MaskIterator __mask_first, _InputIterator2 __first2, _OutputIterator __result, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Computes the maximum of two ranges according to a mask sequence.
void multiplies_scalar_mask(_InputIterator1 __first1, _InputIterator1 __last1, _MaskIterator __mask_first, const typename std::iterator_traits< _InputIterator1 >::value_type &scalar, _OutputIterator __result, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Multiplies a range by a scalar according to a mask sequence.
void minus_scalar_mask(_InputIterator1 __first1, _InputIterator1 __last1, _MaskIterator __mask_first, const typename std::iterator_traits< _InputIterator1 >::value_type &scalar, _OutputIterator __result, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Substracts a scalar to a range according to a mask sequence.
void divides_scalar_mask(_InputIterator1 __first1, _InputIterator1 __last1, _MaskIterator __mask_first, const typename std::iterator_traits< _InputIterator1 >::value_type &scalar, _OutputIterator __result, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Divides a range by a scalar according to a mask sequence.
void plus_scalar_if(_InputIterator1 __first1, _InputIterator1 __last1, const typename std::iterator_traits< _InputIterator1 >::value_type &scalar, _OutputIterator __result, _Predicate __pred)
Adds a scalar to a range according to a Predicate.
void minus_mask(_InputIterator1 __first1, _InputIterator1 __last1, _MaskIterator __mask_first, _InputIterator2 __first2, _OutputIterator __result, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Computes the difference of two ranges according to a mask sequence.
void divides_mask(_InputIterator1 __first1, _InputIterator1 __last1, _MaskIterator __mask_first, _InputIterator2 __first2, _OutputIterator __result, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Computes the pointwise division of two ranges according to a mask sequence.
void plus_scalar_mask(_InputIterator1 __first1, _InputIterator1 __last1, _MaskIterator __mask_first, const typename std::iterator_traits< _InputIterator1 >::value_type &scalar, _OutputIterator __result, typename std::iterator_traits< _MaskIterator >::value_type value=typename std::iterator_traits< _MaskIterator >::value_type(1))
Adds a scalar to a range according to a mask sequence.