public static unsafe void Copy <T>(BufferSpan <T> source, BufferSpan <T> destination, int count) where T : struct { DebugGuard.MustBeLessThanOrEqualTo(count, source.Length, nameof(count)); DebugGuard.MustBeLessThanOrEqualTo(count, destination.Length, nameof(count)); ref byte srcRef = ref Unsafe.As <T, byte>(ref source.DangerousGetPinnableReference());
public BufferSpan(T[] array, int start) { GuardArray(array); DebugGuard.MustBeLessThanOrEqualTo(start, array.Length, nameof(start)); this.Array = array; this.Length = array.Length - start; this.Start = start; }
public BufferSpan(T[] array, void *pointerToArray, int start) { GuardArrayAndPointer(array, pointerToArray); DebugGuard.MustBeLessThanOrEqualTo(start, array.Length, nameof(start)); this.Array = array; this.Length = array.Length - start; this.Start = start; this.PointerAtOffset = (IntPtr)pointerToArray + (Unsafe.SizeOf <T>() * start); }
public void Clear(int count) { DebugGuard.MustBeLessThanOrEqualTo(count, this.Length, nameof(count)); if (count < 256) { Unsafe.InitBlock((void *)this.PointerAtOffset, 0, BufferSpan.USizeOf <T>(count)); } else { System.Array.Clear(this.Array, this.Start, count); } }
public BufferSpan <T> Slice(int start, int length) { DebugGuard.MustBeLessThanOrEqualTo(start, this.Length, nameof(start)); DebugGuard.MustBeLessThanOrEqualTo(length, this.Length - start, nameof(length)); BufferSpan <T> result = default(BufferSpan <T>); result.Array = this.Array; result.Start = this.Start + start; result.PointerAtOffset = this.PointerAtOffset + (Unsafe.SizeOf <T>() * start); result.Length = length; return(result); }