Skip to content

Instantly share code, notes, and snippets.

@ocoanet
Last active August 6, 2019 12:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ocoanet/f300d1a063a0c1a1f5517338da1165ab to your computer and use it in GitHub Desktop.
Save ocoanet/f300d1a063a0c1a1f5517338da1165ab to your computer and use it in GitHub Desktop.
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public T Read<T>()
{
if (TypeCache<T>.CanUsePadding16)
return Unsafe.As<Padding16, T>(ref _valueStorage);
return (T)_defaultStorage;
}
public static class TypeCache<T>
{
public static readonly bool CanUsePadding16;
static TypeCache()
{
CanUsePadding16 =
!IsReferenceOrContainsReferences(typeof(T)) && Unsafe.SizeOf<T>() <= 16;
}
private static bool IsReferenceOrContainsReferences(Type type)
{
// Custom implementation using reflection
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment