|
|
|
|
using System.Buffers;
|
|
|
|
|
using System.Runtime.CompilerServices;
|
|
|
|
|
|
|
|
|
|
/*https://github.com/sidristij/memory-pools*/
|
|
|
|
|
|
|
|
|
|
namespace MemoryPools.Memory
|
|
|
|
|
{
|
|
|
|
|
public static class MemoryEx
|
|
|
|
|
{
|
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
|
public static int Length<T>(this IMemoryOwner<T> that) =>
|
|
|
|
|
that.Memory.Length;
|
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
|
public static CountdownMemoryOwner<T> AsCountdown<T>(this CountdownMemoryOwner<T> that, bool noDefaultOwner = false) =>
|
|
|
|
|
Pool<CountdownMemoryOwner<T>>.Get().Init(that, 0, that.Memory.Length, noDefaultOwner);
|
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
|
public static CountdownMemoryOwner<T> AsCountdown<T>(this CountdownMemoryOwner<T> that, int offset,
|
|
|
|
|
bool noDefaultOwner = false) =>
|
|
|
|
|
Pool<CountdownMemoryOwner<T>>.Get().Init(that, offset, that.Memory.Length - offset, noDefaultOwner);
|
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
|
public static CountdownMemoryOwner<T> AsCountdown<T>(this CountdownMemoryOwner<T> that, int offset, int length, bool noDefaultOwner = false) =>
|
|
|
|
|
Pool<CountdownMemoryOwner<T>>.Get().Init(that, offset, length, noDefaultOwner);
|
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
|
public static IMemoryOwner<T> Slice<T>(this CountdownMemoryOwner<T> that, int offset) =>
|
|
|
|
|
Slice(that, offset, that.Memory.Length - offset);
|
|
|
|
|
|
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
|
public static IMemoryOwner<T> Slice<T>(this CountdownMemoryOwner<T> that, int offset, int length) =>
|
|
|
|
|
that.AsCountdown(offset, length);
|
|
|
|
|
}
|
|
|
|
|
}
|