From 29e2e134a89d913ebe2581b6d4d3457ee661f3a4 Mon Sep 17 00:00:00 2001 From: Exanite Date: Tue, 21 Jan 2025 09:27:33 -0500 Subject: [PATCH] Add UnsafeUtility.AlignmentOf --- CsLatest/Utilities/UnsafeUtility.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CsLatest/Utilities/UnsafeUtility.cs b/CsLatest/Utilities/UnsafeUtility.cs index 4f9f8c0..855bf24 100644 --- a/CsLatest/Utilities/UnsafeUtility.cs +++ b/CsLatest/Utilities/UnsafeUtility.cs @@ -15,5 +15,20 @@ public static class UnsafeUtility { return (byte*)Unsafe.AsPointer(ref Unsafe.AsRef(in MemoryMarshal.AsRef(utf8StringLiteral))); } + + /// + /// Gets the alignment of an unmanaged type. + /// See: https://stackoverflow.com/questions/77212211/how-do-i-find-the-alignment-of-a-struct-in-c + /// + public static int AlignmentOf() where T : unmanaged + { + return (int)Marshal.OffsetOf>(nameof(AlignmentHelper.Target)); + } + + internal struct AlignmentHelper where T : unmanaged + { + public byte Padding; + public T Target; + } } #endif