|
|
|
|
using MemoryPools.Collections.Specialized;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
|
|
namespace MemoryPools.Collections.Linq
|
|
|
|
|
{
|
|
|
|
|
public static partial class PoolingEnumerable
|
|
|
|
|
{
|
|
|
|
|
public static PoolingList<T> AsPoolingList<T>(this IEnumerable<T> source)
|
|
|
|
|
{
|
|
|
|
|
var collection = Pool<PoolingList<T>>.Get().Init();
|
|
|
|
|
collection.AddRange(source);
|
|
|
|
|
return collection;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static PoolingList<T> AsPoolingList<T>(this IPoolingEnumerable<T> source)
|
|
|
|
|
{
|
|
|
|
|
var collection = Pool<PoolingList<T>>.Get().Init();
|
|
|
|
|
collection.AddRange(source);
|
|
|
|
|
return collection;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static PoolingDictionary<TK, TV> AsPoolingDictionary<TK, TV>(this IEnumerable<KeyValuePair<TK, TV>> source)
|
|
|
|
|
{
|
|
|
|
|
return AsPoolingDictionary(source.AsPooling());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static PoolingDictionary<TK, TV> AsPoolingDictionary<TK, TV>(this IPoolingEnumerable<KeyValuePair<TK, TV>> source)
|
|
|
|
|
{
|
|
|
|
|
var collection = Pool<PoolingDictionary<TK, TV>>.Get().Init();
|
|
|
|
|
collection.AddRange(source);
|
|
|
|
|
return collection;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static PoolingDictionary<TKey, TValue> AsPoolingDictionary<TSource, TKey, TValue>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TValue> valueSelector)
|
|
|
|
|
{
|
|
|
|
|
return AsPoolingDictionary(source.AsPooling(), keySelector, valueSelector);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static PoolingDictionary<TKey, TValue> AsPoolingDictionary<TSource, TKey, TValue>(this IPoolingEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TValue> valueSelector)
|
|
|
|
|
{
|
|
|
|
|
var collection = Pool<PoolingDictionary<TKey, TValue>>.Get().Init();
|
|
|
|
|
collection.AddRange(
|
|
|
|
|
source
|
|
|
|
|
.Select((keySelector, valueSelector), (ctx, x) => new KeyValuePair<TKey, TValue>(ctx.keySelector(x), ctx.valueSelector(x)))
|
|
|
|
|
);
|
|
|
|
|
return collection;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void AddRange<T>(this PoolingList<T> target, IEnumerable<T> src)
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in src)
|
|
|
|
|
{
|
|
|
|
|
target.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void AddRange<T>(this PoolingList<T> target, IPoolingEnumerable<T> src)
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in src)
|
|
|
|
|
{
|
|
|
|
|
target.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void AddRange<TK, TV>(this PoolingDictionary<TK, TV> target, IEnumerable<KeyValuePair<TK, TV>> src)
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in src)
|
|
|
|
|
{
|
|
|
|
|
target.Add(item.Key, item.Value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void AddRange<TK, TV>(this PoolingDictionary<TK, TV> target, IPoolingEnumerable<KeyValuePair<TK, TV>> src)
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in src)
|
|
|
|
|
{
|
|
|
|
|
target.Add(item.Key, item.Value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void AddRangeSafe<TK, TV>(this PoolingDictionary<TK, TV> target, IEnumerable<KeyValuePair<TK, TV>> src)
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in src)
|
|
|
|
|
{
|
|
|
|
|
target[item.Key] = item.Value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void AddRangeSafe<TK, TV>(this PoolingDictionary<TK, TV> target, IPoolingEnumerable<KeyValuePair<TK, TV>> src)
|
|
|
|
|
{
|
|
|
|
|
foreach (var item in src)
|
|
|
|
|
{
|
|
|
|
|
target[item.Key] = item.Value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|