From 3d12aa44a05fb9b18871f42898d14cb1d8045737 Mon Sep 17 00:00:00 2001 From: Akeit0 <90429982+Akeit0@users.noreply.github.com> Date: Sun, 3 Aug 2025 14:06:20 +0900 Subject: [PATCH 1/3] refactor: remove redundant checks in advance if possible in writer --- .../MemoryPackWriter.Unmanaged.cs | 180 +++++++++--------- .../MemoryPackWriter.Unmanaged.tt | 6 +- src/MemoryPack.Core/MemoryPackWriter.cs | 43 +++-- 3 files changed, 121 insertions(+), 108 deletions(-) diff --git a/src/MemoryPack.Core/MemoryPackWriter.Unmanaged.cs b/src/MemoryPack.Core/MemoryPackWriter.Unmanaged.cs index ec935adf..0d353098 100644 --- a/src/MemoryPack.Core/MemoryPackWriter.Unmanaged.cs +++ b/src/MemoryPack.Core/MemoryPackWriter.Unmanaged.cs @@ -13,9 +13,9 @@ public void WriteUnmanaged(scoped in T1 value1) var size = Unsafe.SizeOf(); ref var spanRef = ref GetSpanReference(size); Unsafe.WriteUnaligned(ref spanRef, value1); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1) where T1 : unmanaged @@ -24,7 +24,7 @@ public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 ref var spanRef = ref GetSpanReference(size); Unsafe.WriteUnaligned(ref spanRef, propertyCount); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, 1), value1); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -36,9 +36,9 @@ public void WriteUnmanaged(scoped in T1 value1, scoped in T2 value2) ref var spanRef = ref GetSpanReference(size); Unsafe.WriteUnaligned(ref spanRef, value1); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf()), value2); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2) where T1 : unmanaged @@ -49,7 +49,7 @@ public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in Unsafe.WriteUnaligned(ref spanRef, propertyCount); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, 1), value1); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + 1), value2); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -63,9 +63,9 @@ public void WriteUnmanaged(scoped in T1 value1, scoped in T2 value2, Unsafe.WriteUnaligned(ref spanRef, value1); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf()), value2); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf()), value3); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3) where T1 : unmanaged @@ -78,7 +78,7 @@ public void WriteUnmanagedWithObjectHeader(byte propertyCount, scope Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, 1), value1); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + 1), value2); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value3); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -94,9 +94,9 @@ public void WriteUnmanaged(scoped in T1 value1, scoped in T2 val Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf()), value2); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf()), value3); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value4); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4) where T1 : unmanaged @@ -111,7 +111,7 @@ public void WriteUnmanagedWithObjectHeader(byte propertyCount, s Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + 1), value2); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value3); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value4); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -129,9 +129,9 @@ public void WriteUnmanaged(scoped in T1 value1, scoped in T2 Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf()), value3); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value4); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value5); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5) where T1 : unmanaged @@ -148,7 +148,7 @@ public void WriteUnmanagedWithObjectHeader(byte propertyCoun Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value3); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value4); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value5); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -168,9 +168,9 @@ public void WriteUnmanaged(scoped in T1 value1, scoped i Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value4); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value5); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value6); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6) where T1 : unmanaged @@ -189,7 +189,7 @@ public void WriteUnmanagedWithObjectHeader(byte property Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value4); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value5); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value6); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -211,9 +211,9 @@ public void WriteUnmanaged(scoped in T1 value1, scop Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value5); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value6); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value7); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7) where T1 : unmanaged @@ -234,7 +234,7 @@ public void WriteUnmanagedWithObjectHeader(byte prop Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value5); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value6); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value7); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -258,9 +258,9 @@ public void WriteUnmanaged(scoped in T1 value1, Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value6); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value7); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value8); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8) where T1 : unmanaged @@ -283,7 +283,7 @@ public void WriteUnmanagedWithObjectHeader(byte Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value6); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value7); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value8); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -309,9 +309,9 @@ public void WriteUnmanaged(scoped in T1 valu Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value7); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value8); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value9); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9) where T1 : unmanaged @@ -336,7 +336,7 @@ public void WriteUnmanagedWithObjectHeader(b Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value7); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value8); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value9); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -364,9 +364,9 @@ public void WriteUnmanaged(scoped in T1 Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value8); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value9); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value10); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10) where T1 : unmanaged @@ -393,7 +393,7 @@ public void WriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value8); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value9); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value10); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -423,9 +423,9 @@ public void WriteUnmanaged(scoped Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value9); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value10); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value11); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10, scoped in T11 value11) where T1 : unmanaged @@ -454,7 +454,7 @@ public void WriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value9); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value10); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value11); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -486,9 +486,9 @@ public void WriteUnmanaged(sc Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value10); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value11); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value12); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10, scoped in T11 value11, scoped in T12 value12) where T1 : unmanaged @@ -519,7 +519,7 @@ public void WriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value10); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value11); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value12); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -553,9 +553,9 @@ public void WriteUnmanaged() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value11); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value12); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value13); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10, scoped in T11 value11, scoped in T12 value12, scoped in T13 value13) where T1 : unmanaged @@ -588,7 +588,7 @@ public void WriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value11); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value12); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value13); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -624,9 +624,9 @@ public void WriteUnmanaged() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value12); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value13); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value14); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10, scoped in T11 value11, scoped in T12 value12, scoped in T13 value13, scoped in T14 value14) where T1 : unmanaged @@ -661,7 +661,7 @@ public void WriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value12); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value13); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value14); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -699,9 +699,9 @@ public void WriteUnmanaged() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value13); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value14); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value15); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10, scoped in T11 value11, scoped in T12 value12, scoped in T13 value13, scoped in T14 value14, scoped in T15 value15) where T1 : unmanaged @@ -738,7 +738,7 @@ public void WriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value13); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value14); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value15); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -747,9 +747,9 @@ public void DangerousWriteUnmanaged(scoped in T1 value1) var size = Unsafe.SizeOf(); ref var spanRef = ref GetSpanReference(size); Unsafe.WriteUnaligned(ref spanRef, value1); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1) { @@ -757,7 +757,7 @@ public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scop ref var spanRef = ref GetSpanReference(size); Unsafe.WriteUnaligned(ref spanRef, propertyCount); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, 1), value1); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -767,9 +767,9 @@ public void DangerousWriteUnmanaged(scoped in T1 value1, scoped in T2 va ref var spanRef = ref GetSpanReference(size); Unsafe.WriteUnaligned(ref spanRef, value1); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf()), value2); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2) { @@ -778,7 +778,7 @@ public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, Unsafe.WriteUnaligned(ref spanRef, propertyCount); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, 1), value1); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + 1), value2); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -789,9 +789,9 @@ public void DangerousWriteUnmanaged(scoped in T1 value1, scoped in T Unsafe.WriteUnaligned(ref spanRef, value1); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf()), value2); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf()), value3); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3) { @@ -801,7 +801,7 @@ public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCou Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, 1), value1); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + 1), value2); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value3); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -813,9 +813,9 @@ public void DangerousWriteUnmanaged(scoped in T1 value1, scoped Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf()), value2); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf()), value3); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value4); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4) { @@ -826,7 +826,7 @@ public void DangerousWriteUnmanagedWithObjectHeader(byte propert Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + 1), value2); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value3); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value4); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -839,9 +839,9 @@ public void DangerousWriteUnmanaged(scoped in T1 value1, sco Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf()), value3); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value4); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value5); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5) { @@ -853,7 +853,7 @@ public void DangerousWriteUnmanagedWithObjectHeader(byte pro Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value3); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value4); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value5); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -867,9 +867,9 @@ public void DangerousWriteUnmanaged(scoped in T1 value1, Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value4); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value5); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value6); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6) { @@ -882,7 +882,7 @@ public void DangerousWriteUnmanagedWithObjectHeader(byte Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value4); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value5); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value6); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -897,9 +897,9 @@ public void DangerousWriteUnmanaged(scoped in T1 val Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value5); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value6); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value7); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7) { @@ -913,7 +913,7 @@ public void DangerousWriteUnmanagedWithObjectHeader( Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value5); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value6); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value7); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -929,9 +929,9 @@ public void DangerousWriteUnmanaged(scoped in T1 Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value6); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value7); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value8); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8) { @@ -946,7 +946,7 @@ public void DangerousWriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value6); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value7); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value8); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -963,9 +963,9 @@ public void DangerousWriteUnmanaged(scoped i Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value7); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value8); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value9); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9) { @@ -981,7 +981,7 @@ public void DangerousWriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value7); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value8); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value9); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -999,9 +999,9 @@ public void DangerousWriteUnmanaged(sco Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value8); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value9); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value10); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10) { @@ -1018,7 +1018,7 @@ public void DangerousWriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value8); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value9); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value10); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -1037,9 +1037,9 @@ public void DangerousWriteUnmanaged() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value9); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value10); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value11); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10, scoped in T11 value11) { @@ -1057,7 +1057,7 @@ public void DangerousWriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value9); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value10); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value11); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -1077,9 +1077,9 @@ public void DangerousWriteUnmanaged() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value10); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value11); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value12); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10, scoped in T11 value11, scoped in T12 value12) { @@ -1098,7 +1098,7 @@ public void DangerousWriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value10); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value11); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value12); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -1119,9 +1119,9 @@ public void DangerousWriteUnmanaged() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value11); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value12); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value13); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10, scoped in T11 value11, scoped in T12 value12, scoped in T13 value13) { @@ -1141,7 +1141,7 @@ public void DangerousWriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value11); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value12); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value13); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -1163,9 +1163,9 @@ public void DangerousWriteUnmanaged() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value12); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value13); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value14); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10, scoped in T11 value11, scoped in T12 value12, scoped in T13 value13, scoped in T14 value14) { @@ -1186,7 +1186,7 @@ public void DangerousWriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value12); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value13); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value14); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -1209,9 +1209,9 @@ public void DangerousWriteUnmanaged() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value13); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value14); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf()), value15); - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void DangerousWriteUnmanagedWithObjectHeader(byte propertyCount, scoped in T1 value1, scoped in T2 value2, scoped in T3 value3, scoped in T4 value4, scoped in T5 value5, scoped in T6 value6, scoped in T7 value7, scoped in T8 value8, scoped in T9 value9, scoped in T10 value10, scoped in T11 value11, scoped in T12 value12, scoped in T13 value13, scoped in T14 value14, scoped in T15 value15) { @@ -1233,7 +1233,7 @@ public void DangerousWriteUnmanagedWithObjectHeader() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value13); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value14); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + 1), value15); - Advance(size); + AdvanceUnsafe(size); } } diff --git a/src/MemoryPack.Core/MemoryPackWriter.Unmanaged.tt b/src/MemoryPack.Core/MemoryPackWriter.Unmanaged.tt index d14371b3..13ba0791 100644 --- a/src/MemoryPack.Core/MemoryPackWriter.Unmanaged.tt +++ b/src/MemoryPack.Core/MemoryPackWriter.Unmanaged.tt @@ -32,9 +32,9 @@ public ref partial struct MemoryPackWriter <# for(var j = 2; j <= i; j++) { #> Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, <#= MakeSize(j - 1) #>), value<#= j #>); <# } #> - Advance(size); + AdvanceUnsafe(size); } - + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void <#= dangerous ? "Dangerous" : "" #>WriteUnmanagedWithObjectHeader<<#= MakeT(i) #>>(byte propertyCount, <#= MakeArgs(i) #>) <# if(!dangerous) { #> @@ -48,7 +48,7 @@ public ref partial struct MemoryPackWriter <# for(var j = 2; j <= i; j++) { #> Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, <#= MakeSize(j - 1) #> + 1), value<#= j #>); <# } #> - Advance(size); + AdvanceUnsafe(size); } <# } } #> diff --git a/src/MemoryPack.Core/MemoryPackWriter.cs b/src/MemoryPack.Core/MemoryPackWriter.cs index 08f4a3ae..5dc5dc29 100644 --- a/src/MemoryPack.Core/MemoryPackWriter.cs +++ b/src/MemoryPack.Core/MemoryPackWriter.cs @@ -148,6 +148,19 @@ public void Advance(int count) writtenCount += count; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void AdvanceUnsafe(int count) + { + bufferLength = bufferLength - count; +#if NET7_0_OR_GREATER + bufferReference = ref Unsafe.Add(ref bufferReference, count); +#else + bufferReference = bufferReference.Slice(count); +#endif + advancedCount += count; + writtenCount += count; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Flush() { @@ -217,21 +230,21 @@ public void WriteObjectHeader(byte memberCount) MemoryPackSerializationException.ThrowWriteInvalidMemberCount(memberCount); } GetSpanReference(1) = memberCount; - Advance(1); + AdvanceUnsafe(1); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteNullObjectHeader() { GetSpanReference(1) = MemoryPackCode.NullObject; - Advance(1); + AdvanceUnsafe(1); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteObjectReferenceId(uint referenceId) { GetSpanReference(1) = MemoryPackCode.ReferenceId; - Advance(1); + AdvanceUnsafe(1); WriteVarInt(referenceId); } @@ -241,14 +254,14 @@ public void WriteUnionHeader(ushort tag) if (tag < MemoryPackCode.WideTag) { GetSpanReference(1) = (byte)tag; - Advance(1); + AdvanceUnsafe(1); } else { ref var spanRef = ref GetSpanReference(3); Unsafe.WriteUnaligned(ref spanRef, MemoryPackCode.WideTag); Unsafe.WriteUnaligned(ref Unsafe.Add(ref spanRef, 1), tag); - Advance(3); + AdvanceUnsafe(3); } } @@ -262,14 +275,14 @@ public void WriteNullUnionHeader() public void WriteCollectionHeader(int length) { Unsafe.WriteUnaligned(ref GetSpanReference(4), length); - Advance(4); + AdvanceUnsafe(4); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public void WriteNullCollectionHeader() { Unsafe.WriteUnaligned(ref GetSpanReference(4), MemoryPackCode.NullCollection); - Advance(4); + AdvanceUnsafe(4); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -312,7 +325,7 @@ public void WriteUtf16(string? value) MemoryMarshal.AsBytes(value.AsSpan()).CopyTo(MemoryMarshal.CreateSpan(ref Unsafe.Add(ref dest, 4), copyByteCount)); #endif - Advance(copyByteCount + 4); + AdvanceUnsafe(copyByteCount + 4); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -329,7 +342,7 @@ public void WriteUtf16(ReadOnlySpan value) ref var dest = ref GetSpanReference(copyByteCount + 4); Unsafe.WriteUnaligned(ref dest, value.Length); MemoryMarshal.AsBytes(value).CopyTo(MemoryMarshal.CreateSpan(ref Unsafe.Add(ref dest, 4), copyByteCount)); - Advance(copyByteCount + 4); + AdvanceUnsafe(copyByteCount + 4); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -372,7 +385,7 @@ public void WriteUtf8(string? value) // write written utf8-length in header, that is ~length Unsafe.WriteUnaligned(ref destPointer, ~bytesWritten); - Advance(bytesWritten + 8); // + header + AdvanceUnsafe(bytesWritten + 8); // + header } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -394,7 +407,7 @@ public void WriteUtf8(ReadOnlySpan utf8Value, int utf16Length = -1) var dest = MemoryMarshal.CreateSpan(ref Unsafe.Add(ref destPointer, 8), utf8Value.Length); utf8Value.CopyTo(dest); - Advance(utf8Value.Length + 8); + AdvanceUnsafe(utf8Value.Length + 8); } #if NET7_0_OR_GREATER @@ -628,7 +641,7 @@ public void DangerousWriteUnmanagedArray(T[]? value) Unsafe.WriteUnaligned(ref dest, value.Length); Unsafe.CopyBlockUnaligned(ref Unsafe.Add(ref dest, 4), ref src, (uint)srcLength); - Advance(allocSize); + AdvanceUnsafe(allocSize); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -649,7 +662,7 @@ public void DangerousWriteUnmanagedSpan(scoped Span value) Unsafe.WriteUnaligned(ref dest, value.Length); Unsafe.CopyBlockUnaligned(ref Unsafe.Add(ref dest, 4), ref src, (uint)srcLength); - Advance(allocSize); + AdvanceUnsafe(allocSize); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -670,7 +683,7 @@ public void DangerousWriteUnmanagedSpan(scoped ReadOnlySpan value) Unsafe.WriteUnaligned(ref dest, value.Length); Unsafe.CopyBlockUnaligned(ref Unsafe.Add(ref dest, 4), ref src, (uint)srcLength); - Advance(allocSize); + AdvanceUnsafe(allocSize); } #endregion @@ -689,7 +702,7 @@ public void WriteSpanWithoutLengthHeader(scoped ReadOnlySpan value) Unsafe.CopyBlockUnaligned(ref dest, ref src, (uint)srcLength); - Advance(srcLength); + AdvanceUnsafe(srcLength); return; } else From 01b5827e16913c45f5b55ede06eb2b04f8fd4e7a Mon Sep 17 00:00:00 2001 From: Akeit0 <90429982+Akeit0@users.noreply.github.com> Date: Sun, 3 Aug 2025 14:13:50 +0900 Subject: [PATCH 2/3] refactor: remove redundant checks in advance if possible in reader --- .../MemoryPackReader.Unmanaged.cs | 60 +++++++++---------- .../MemoryPackReader.Unmanaged.tt | 2 +- src/MemoryPack.Core/MemoryPackReader.cs | 39 ++++++++---- 3 files changed, 57 insertions(+), 44 deletions(-) diff --git a/src/MemoryPack.Core/MemoryPackReader.Unmanaged.cs b/src/MemoryPack.Core/MemoryPackReader.Unmanaged.cs index 170ed917..8095f1f4 100644 --- a/src/MemoryPack.Core/MemoryPackReader.Unmanaged.cs +++ b/src/MemoryPack.Core/MemoryPackReader.Unmanaged.cs @@ -13,7 +13,7 @@ public void ReadUnmanaged(out T1 value1) var size = Unsafe.SizeOf(); ref var spanRef = ref GetSpanReference(size); value1 = Unsafe.ReadUnaligned(ref spanRef); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -25,7 +25,7 @@ public void ReadUnmanaged(out T1 value1, out T2 value2) ref var spanRef = ref GetSpanReference(size); value1 = Unsafe.ReadUnaligned(ref spanRef); value2 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -39,7 +39,7 @@ public void ReadUnmanaged(out T1 value1, out T2 value2, out T3 value value1 = Unsafe.ReadUnaligned(ref spanRef); value2 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf())); value3 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -55,7 +55,7 @@ public void ReadUnmanaged(out T1 value1, out T2 value2, out T3 v value2 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf())); value3 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf())); value4 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -73,7 +73,7 @@ public void ReadUnmanaged(out T1 value1, out T2 value2, out value3 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf())); value4 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value5 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -93,7 +93,7 @@ public void ReadUnmanaged(out T1 value1, out T2 value2, value4 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value5 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value6 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -115,7 +115,7 @@ public void ReadUnmanaged(out T1 value1, out T2 valu value5 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value6 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value7 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -139,7 +139,7 @@ public void ReadUnmanaged(out T1 value1, out T2 value6 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value7 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value8 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -165,7 +165,7 @@ public void ReadUnmanaged(out T1 value1, out value7 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value8 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value9 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -193,7 +193,7 @@ public void ReadUnmanaged(out T1 value1 value8 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value9 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value10 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -223,7 +223,7 @@ public void ReadUnmanaged(out T1 v value9 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value10 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value11 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -255,7 +255,7 @@ public void ReadUnmanaged(out value10 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value11 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value12 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -289,7 +289,7 @@ public void ReadUnmanaged(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value12 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value13 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -325,7 +325,7 @@ public void ReadUnmanaged(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value13 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value14 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -363,7 +363,7 @@ public void ReadUnmanaged(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value14 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value15 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -372,7 +372,7 @@ public void DangerousReadUnmanaged(out T1 value1) var size = Unsafe.SizeOf(); ref var spanRef = ref GetSpanReference(size); value1 = Unsafe.ReadUnaligned(ref spanRef); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -382,7 +382,7 @@ public void DangerousReadUnmanaged(out T1 value1, out T2 value2) ref var spanRef = ref GetSpanReference(size); value1 = Unsafe.ReadUnaligned(ref spanRef); value2 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -393,7 +393,7 @@ public void DangerousReadUnmanaged(out T1 value1, out T2 value2, out value1 = Unsafe.ReadUnaligned(ref spanRef); value2 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf())); value3 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -405,7 +405,7 @@ public void DangerousReadUnmanaged(out T1 value1, out T2 value2, value2 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf())); value3 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf())); value4 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -418,7 +418,7 @@ public void DangerousReadUnmanaged(out T1 value1, out T2 val value3 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf())); value4 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value5 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -432,7 +432,7 @@ public void DangerousReadUnmanaged(out T1 value1, out T2 value4 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value5 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value6 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -447,7 +447,7 @@ public void DangerousReadUnmanaged(out T1 value1, ou value5 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value6 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value7 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -463,7 +463,7 @@ public void DangerousReadUnmanaged(out T1 value1 value6 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value7 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value8 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -480,7 +480,7 @@ public void DangerousReadUnmanaged(out T1 va value7 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value8 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value9 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -498,7 +498,7 @@ public void DangerousReadUnmanaged(out value8 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value9 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value10 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -517,7 +517,7 @@ public void DangerousReadUnmanaged value9 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value10 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value11 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -537,7 +537,7 @@ public void DangerousReadUnmanaged(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value11 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value12 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -558,7 +558,7 @@ public void DangerousReadUnmanaged(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value12 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value13 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -580,7 +580,7 @@ public void DangerousReadUnmanaged(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value13 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value14 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -603,7 +603,7 @@ public void DangerousReadUnmanaged(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value14 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); value15 = Unsafe.ReadUnaligned(ref Unsafe.Add(ref spanRef, Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf() + Unsafe.SizeOf())); - Advance(size); + AdvanceUnsafe(size); } } diff --git a/src/MemoryPack.Core/MemoryPackReader.Unmanaged.tt b/src/MemoryPack.Core/MemoryPackReader.Unmanaged.tt index c28ed80d..3c1db995 100644 --- a/src/MemoryPack.Core/MemoryPackReader.Unmanaged.tt +++ b/src/MemoryPack.Core/MemoryPackReader.Unmanaged.tt @@ -32,7 +32,7 @@ public ref partial struct MemoryPackReader <# for(var j = 2; j <= i; j++) { #> value<#= j #> = Unsafe.ReadUnaligned>(ref Unsafe.Add(ref spanRef, <#= MakeSize(j - 1) #>)); <# } #> - Advance(size); + AdvanceUnsafe(size); } <# } } #> diff --git a/src/MemoryPack.Core/MemoryPackReader.cs b/src/MemoryPack.Core/MemoryPackReader.cs index e72d153e..07fa314b 100644 --- a/src/MemoryPack.Core/MemoryPackReader.cs +++ b/src/MemoryPack.Core/MemoryPackReader.cs @@ -172,6 +172,19 @@ public void Advance(int count) consumed += count; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void AdvanceUnsafe(int count) + { + bufferLength = bufferLength - count; +#if NET7_0_OR_GREATER + bufferReference = ref Unsafe.Add(ref bufferReference, count); +#else + bufferReference = bufferReference.Slice(count); +#endif + advancedCount += count; + consumed += count; + } + [MethodImpl(MethodImplOptions.NoInlining)] bool TryAdvanceSequence(int count) { @@ -253,7 +266,7 @@ public IMemoryPackFormatter GetFormatter() public bool TryReadObjectHeader(out byte memberCount) { memberCount = GetSpanReference(1); - Advance(1); + AdvanceUnsafe(1); return memberCount != MemoryPackCode.NullObject; } @@ -261,7 +274,7 @@ public bool TryReadObjectHeader(out byte memberCount) public bool TryReadUnionHeader(out ushort tag) { var firstTag = GetSpanReference(1); - Advance(1); + AdvanceUnsafe(1); if (firstTag < MemoryPackCode.WideTag) { tag = firstTag; @@ -283,7 +296,7 @@ public bool TryReadUnionHeader(out ushort tag) public bool TryReadCollectionHeader(out int length) { length = Unsafe.ReadUnaligned(ref GetSpanReference(4)); - Advance(4); + AdvanceUnsafe(4); // If collection-length is larger than buffer-length, it is invalid data. if (Remaining < length) @@ -351,7 +364,7 @@ public bool TryPeekCollectionHeader(out int length) public bool DangerousTryReadCollectionHeader(out int length) { length = Unsafe.ReadUnaligned(ref GetSpanReference(4)); - Advance(4); + AdvanceUnsafe(4); return length != MemoryPackCode.NullCollection; } @@ -386,7 +399,7 @@ string ReadUtf16(int length) var str = new string(MemoryMarshal.CreateReadOnlySpan(ref Unsafe.As(ref src), length)); - Advance(byteCount); + AdvanceUnsafe(byteCount); return str; } @@ -443,7 +456,7 @@ string ReadUtf8(int utf8Length) #endif } - Advance(utf8Length + 4); + AdvanceUnsafe(utf8Length + 4); return str; } @@ -456,7 +469,7 @@ public T1 ReadUnmanaged() var size = Unsafe.SizeOf(); ref var spanRef = ref GetSpanReference(size); var value1 = Unsafe.ReadUnaligned(ref spanRef); - Advance(size); + AdvanceUnsafe(size); return value1; } @@ -744,7 +757,7 @@ public void ReadUnmanagedSpan(scoped ref Span value) ref var src = ref GetSpanReference(byteCount); var dest = AllocateUninitializedArray(length); Unsafe.CopyBlockUnaligned(ref Unsafe.As(ref GetArrayDataReference(dest)), ref src, (uint)byteCount); - Advance(byteCount); + AdvanceUnsafe(byteCount); return dest; } @@ -775,7 +788,7 @@ public unsafe void DangerousReadUnmanagedArray(scoped ref T[]? value) ref var dest = ref Unsafe.As(ref GetArrayDataReference(value)); Unsafe.CopyBlockUnaligned(ref dest, ref src, (uint)byteCount); - Advance(byteCount); + AdvanceUnsafe(byteCount); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -804,7 +817,7 @@ public unsafe void DangerousReadUnmanagedSpan(scoped ref Span value) ref var dest = ref Unsafe.As(ref MemoryMarshal.GetReference(value)); Unsafe.CopyBlockUnaligned(ref dest, ref src, (uint)byteCount); - Advance(byteCount); + AdvanceUnsafe(byteCount); } #endregion @@ -830,7 +843,7 @@ public void ReadSpanWithoutReadLengthHeader(int length, scoped ref Span v ref var dest = ref Unsafe.As(ref MemoryMarshal.GetReference(value)!); Unsafe.CopyBlockUnaligned(ref dest, ref src, (uint)byteCount); - Advance(byteCount); + AdvanceUnsafe(byteCount); } else { @@ -873,7 +886,7 @@ public void ReadPackableSpanWithoutReadLengthHeader(int length, scoped ref Sp ref var dest = ref Unsafe.As(ref MemoryMarshal.GetReference(value)!); Unsafe.CopyBlockUnaligned(ref dest, ref src, (uint)byteCount); - Advance(byteCount); + AdvanceUnsafe(byteCount); } else { @@ -913,7 +926,7 @@ public unsafe void DangerousReadUnmanagedSpanView(out bool isNull, out ReadOn var span = MemoryMarshal.CreateReadOnlySpan(ref src, byteCount); - Advance(byteCount); + AdvanceUnsafe(byteCount); view = span; // safe until call next GetSpanReference } } From 30c084e921b396779b30724353c8111429f24241 Mon Sep 17 00:00:00 2001 From: Akeit0 <90429982+Akeit0@users.noreply.github.com> Date: Sun, 3 Aug 2025 14:18:59 +0900 Subject: [PATCH 3/3] refactor: use AdvanceUnsafe in more places --- .../Formatters/MultiDimensionalArrayFormatters.cs | 8 ++++---- src/MemoryPack.Core/Formatters/StringBuilderFormatter.cs | 4 ++-- src/MemoryPack.Core/Formatters/UnmanagedFormatter.cs | 8 ++++---- src/MemoryPack.Core/MemoryPackReader.cs | 2 +- src/MemoryPack.Core/MemoryPackWriter.cs | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/MemoryPack.Core/Formatters/MultiDimensionalArrayFormatters.cs b/src/MemoryPack.Core/Formatters/MultiDimensionalArrayFormatters.cs index b78cdabd..42927275 100644 --- a/src/MemoryPack.Core/Formatters/MultiDimensionalArrayFormatters.cs +++ b/src/MemoryPack.Core/Formatters/MultiDimensionalArrayFormatters.cs @@ -34,7 +34,7 @@ public override void Serialize(ref MemoryPackWriter(ref MemoryPackWriter(ref MemoryPackWriter(ref MemoryPackWriter(ref MemoryMarshal.GetReference(chunk.Span)); Unsafe.CopyBlockUnaligned(ref p, ref src, (uint)chunk.Length * 2); - writer.Advance(chunk.Length * 2); + writer.AdvanceUnsafe(chunk.Length * 2); } return; } @@ -67,6 +67,6 @@ public override void Deserialize(ref MemoryPackReader reader, scoped ref StringB var src = MemoryMarshal.CreateSpan(ref Unsafe.As(ref p), length); value.Append(src); - reader.Advance(size); + reader.AdvanceUnsafe(size); } } diff --git a/src/MemoryPack.Core/Formatters/UnmanagedFormatter.cs b/src/MemoryPack.Core/Formatters/UnmanagedFormatter.cs index 127de9f6..702bf850 100644 --- a/src/MemoryPack.Core/Formatters/UnmanagedFormatter.cs +++ b/src/MemoryPack.Core/Formatters/UnmanagedFormatter.cs @@ -17,14 +17,14 @@ public sealed class UnmanagedFormatter : MemoryPackFormatter public override void Serialize(ref MemoryPackWriter writer, scoped ref T value) { Unsafe.WriteUnaligned(ref writer.GetSpanReference(Unsafe.SizeOf()), value); - writer.Advance(Unsafe.SizeOf()); + writer.AdvanceUnsafe(Unsafe.SizeOf()); } [Preserve] public override void Deserialize(ref MemoryPackReader reader, scoped ref T value) { value = Unsafe.ReadUnaligned(ref reader.GetSpanReference(Unsafe.SizeOf())); - reader.Advance(Unsafe.SizeOf()); + reader.AdvanceUnsafe(Unsafe.SizeOf()); } } @@ -35,13 +35,13 @@ public sealed class DangerousUnmanagedFormatter : MemoryPackFormatter public override void Serialize(ref MemoryPackWriter writer, scoped ref T? value) { Unsafe.WriteUnaligned(ref writer.GetSpanReference(Unsafe.SizeOf()), value); - writer.Advance(Unsafe.SizeOf()); + writer.AdvanceUnsafe(Unsafe.SizeOf()); } [Preserve] public override void Deserialize(ref MemoryPackReader reader, scoped ref T? value) { value = Unsafe.ReadUnaligned(ref reader.GetSpanReference(Unsafe.SizeOf())); - reader.Advance(Unsafe.SizeOf()); + reader.AdvanceUnsafe(Unsafe.SizeOf()); } } diff --git a/src/MemoryPack.Core/MemoryPackReader.cs b/src/MemoryPack.Core/MemoryPackReader.cs index 07fa314b..ea7a34c5 100644 --- a/src/MemoryPack.Core/MemoryPackReader.cs +++ b/src/MemoryPack.Core/MemoryPackReader.cs @@ -173,7 +173,7 @@ public void Advance(int count) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - void AdvanceUnsafe(int count) + internal void AdvanceUnsafe(int count) { bufferLength = bufferLength - count; #if NET7_0_OR_GREATER diff --git a/src/MemoryPack.Core/MemoryPackWriter.cs b/src/MemoryPack.Core/MemoryPackWriter.cs index 5dc5dc29..79251184 100644 --- a/src/MemoryPack.Core/MemoryPackWriter.cs +++ b/src/MemoryPack.Core/MemoryPackWriter.cs @@ -149,7 +149,7 @@ public void Advance(int count) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - void AdvanceUnsafe(int count) + internal void AdvanceUnsafe(int count) { bufferLength = bufferLength - count; #if NET7_0_OR_GREATER