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/Memory/InternalArraysPool.cs

37 lines
1.0 KiB

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;
}
}
}

Powered by TurnKey Linux.