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.
|
|
|
|
using MemoryPools.Memory.Pooling;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Runtime.CompilerServices;
|
|
|
|
|
|
|
|
|
|
/*https://github.com/sidristij/memory-pools*/
|
|
|
|
|
|
|
|
|
|
namespace MemoryPools.Memory
|
|
|
|
|
{
|
|
|
|
|
internal sealed class InternalArraysPool
|
|
|
|
|
{
|
|
|
|
|
private const int MinBufferSize = 128;
|
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
|
public static CountdownMemoryOwner<byte> Rent(int length)
|
|
|
|
|
{
|
|
|
|
|
return Rent<byte>(length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
|
public static CountdownMemoryOwner<T> Rent<T>(int length, bool noDefaultOwner = false)
|
|
|
|
|
{
|
|
|
|
|
var realLength = length;
|
|
|
|
|
var allocLength = length > MinBufferSize ? length : MinBufferSize;
|
|
|
|
|
var owner = BucketsBasedCrossThreadsMemoryPool<T>.Shared.Rent(allocLength);
|
|
|
|
|
return owner.AsCountdown(0, realLength, noDefaultOwner);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
|
public static CountdownMemoryOwner<T> RentFrom<T>(ReadOnlySpan<T> source, bool noDefaultOwner = false)
|
|
|
|
|
{
|
|
|
|
|
var mem = Rent<T>(source.Length, noDefaultOwner);
|
|
|
|
|
source.CopyTo(mem.Memory.Span);
|
|
|
|
|
return mem;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|