You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Zero/ZeroLevel/Services/MemoryPools/Collections/Linq/Aggregate.cs

82 lines
2.4 KiB

using System;
namespace MemoryPools.Collections.Linq
{
public static partial class PoolingEnumerable
{
public static TSource Aggregate<TSource>(this IPoolingEnumerable<TSource> source, Func<TSource, TSource, TSource> func)
{
if (source == null!)
{
throw new ArgumentNullException(nameof(source));
}
if (func == null!)
{
throw new ArgumentNullException(nameof(func));
}
using (var enumerator = source.GetEnumerator())
{
if (!enumerator.MoveNext())
{
throw new InvalidOperationException("Sequence contains no elements");
}
var result = enumerator.Current;
while (enumerator.MoveNext())
{
result = func(result, enumerator.Current);
}
return result;
}
}
public static TAccumulate Aggregate<TSource, TAccumulate>(this IPoolingEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func)
{
if (source == null!)
{
throw new ArgumentNullException(nameof(source));
}
if (func == null!)
{
throw new ArgumentNullException(nameof(func));
}
var result = seed;
foreach (var element in source)
{
result = func(result, element);
}
return result;
}
public static TResult Aggregate<TSource, TAccumulate, TResult>(this IPoolingEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector)
{
if (source == null!)
{
throw new ArgumentNullException(nameof(source));
}
if (func == null!)
{
throw new ArgumentNullException(nameof(func));
}
if (resultSelector == null!)
{
throw new ArgumentNullException(nameof(resultSelector));
}
var result = seed;
foreach (var element in source)
{
result = func(result, element);
}
return resultSelector(result);
}
}
}

Powered by TurnKey Linux.