|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
namespace MemoryPools.Collections.Linq
|
|
|
|
|
{
|
|
|
|
|
public static partial class PoolingEnumerable
|
|
|
|
|
{
|
|
|
|
|
public static int Sum(this IPoolingEnumerable<int> source)
|
|
|
|
|
{
|
|
|
|
|
if (source == null!) throw new ArgumentNullException(nameof(source));
|
|
|
|
|
int sum = 0;
|
|
|
|
|
checked {
|
|
|
|
|
foreach (var v in source) sum += v;
|
|
|
|
|
}
|
|
|
|
|
return sum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static int? Sum(this IPoolingEnumerable<int?> source) {
|
|
|
|
|
if (source == null!) throw new ArgumentNullException(nameof(source));
|
|
|
|
|
int sum = 0;
|
|
|
|
|
checked {
|
|
|
|
|
foreach (var v in source) {
|
|
|
|
|
if (v != null!) sum += v.GetValueOrDefault();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return sum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static long Sum(this IPoolingEnumerable<long> source) {
|
|
|
|
|
if (source == null!) throw new ArgumentNullException(nameof(source));
|
|
|
|
|
long sum = 0;
|
|
|
|
|
checked {
|
|
|
|
|
foreach (long v in source) sum += v;
|
|
|
|
|
}
|
|
|
|
|
return sum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static long? Sum(this IPoolingEnumerable<long?> source) {
|
|
|
|
|
if (source == null!) throw new ArgumentNullException(nameof(source));
|
|
|
|
|
long sum = 0;
|
|
|
|
|
checked {
|
|
|
|
|
foreach (var v in source) {
|
|
|
|
|
if (v != null!) sum += v.GetValueOrDefault();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return sum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static float Sum(this IPoolingEnumerable<float> source) {
|
|
|
|
|
if (source == null!) throw new ArgumentNullException(nameof(source));
|
|
|
|
|
double sum = 0;
|
|
|
|
|
foreach (var v in source) sum += v;
|
|
|
|
|
return (float)sum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static float? Sum(this IPoolingEnumerable<float?> source) {
|
|
|
|
|
if (source == null!) throw new ArgumentNullException(nameof(source));
|
|
|
|
|
double sum = 0;
|
|
|
|
|
foreach (var v in source) {
|
|
|
|
|
if (v != null!) sum += v.GetValueOrDefault();
|
|
|
|
|
}
|
|
|
|
|
return (float)sum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static double Sum(this IPoolingEnumerable<double> source) {
|
|
|
|
|
if (source == null!) throw new ArgumentNullException(nameof(source));
|
|
|
|
|
double sum = 0;
|
|
|
|
|
foreach (var v in source) sum += v;
|
|
|
|
|
return sum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static double? Sum(this IPoolingEnumerable<double?> source) {
|
|
|
|
|
if (source == null!) throw new ArgumentNullException(nameof(source));
|
|
|
|
|
double sum = 0;
|
|
|
|
|
foreach (var v in source) {
|
|
|
|
|
if (v != null!) sum += v.GetValueOrDefault();
|
|
|
|
|
}
|
|
|
|
|
return sum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static decimal Sum(this IPoolingEnumerable<decimal> source) {
|
|
|
|
|
if (source == null!) throw new ArgumentNullException(nameof(source));
|
|
|
|
|
decimal sum = 0;
|
|
|
|
|
foreach (var v in source) sum += v;
|
|
|
|
|
return sum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static decimal? Sum(this IPoolingEnumerable<decimal?> source) {
|
|
|
|
|
if (source == null!) throw new ArgumentNullException(nameof(source));
|
|
|
|
|
decimal sum = 0;
|
|
|
|
|
foreach (var v in source) {
|
|
|
|
|
if (v != null!) sum += v.GetValueOrDefault();
|
|
|
|
|
}
|
|
|
|
|
return sum;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static int Sum<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, int> selector) =>
|
|
|
|
|
Sum(source.Select(selector));
|
|
|
|
|
|
|
|
|
|
public static int? Sum<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, int?> selector) =>
|
|
|
|
|
Sum(source.Select(selector));
|
|
|
|
|
|
|
|
|
|
public static long Sum<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, long> selector) =>
|
|
|
|
|
Sum(source.Select(selector));
|
|
|
|
|
|
|
|
|
|
public static long? Sum<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, long?> selector) =>
|
|
|
|
|
Sum(source.Select(selector));
|
|
|
|
|
|
|
|
|
|
public static float Sum<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, float> selector) =>
|
|
|
|
|
Sum(source.Select(selector));
|
|
|
|
|
|
|
|
|
|
public static float? Sum<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, float?> selector) =>
|
|
|
|
|
Sum(source.Select(selector));
|
|
|
|
|
|
|
|
|
|
public static double Sum<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, double> selector) =>
|
|
|
|
|
Sum(source.Select(selector));
|
|
|
|
|
|
|
|
|
|
public static double? Sum<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, double?> selector) =>
|
|
|
|
|
Sum(source.Select(selector));
|
|
|
|
|
|
|
|
|
|
public static decimal Sum<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, decimal> selector) =>
|
|
|
|
|
Sum(source.Select(selector));
|
|
|
|
|
|
|
|
|
|
public static decimal? Sum<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, decimal?> selector) =>
|
|
|
|
|
Sum(source.Select(selector));
|
|
|
|
|
}
|
|
|
|
|
}
|