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.
20 lines
478 B
20 lines
478 B
1 year ago
|
using System;
|
||
|
using System.Runtime.InteropServices;
|
||
|
|
||
|
namespace gaemstone.Utility;
|
||
|
|
||
|
public readonly ref struct SpanToRef<T>
|
||
|
where T : class
|
||
|
{
|
||
|
private readonly Span<nint> _span;
|
||
|
|
||
|
public int Length => _span.Length;
|
||
|
public T? this[int index] => (_span[index] != 0)
|
||
|
? (T)((GCHandle)_span[index]).Target! : null;
|
||
|
|
||
|
internal SpanToRef(Span<nint> span) => _span = span;
|
||
|
|
||
|
public void Clear() => _span.Clear();
|
||
|
public void CopyTo(SpanToRef<T> dest) => _span.CopyTo(dest._span);
|
||
|
}
|