Skip to content

Commit d0f8932

Browse files
committed
feat: MemoryPackSerializer.BackupState, BackupSerializerState, BackupDeserializerState
1 parent 4b1e3f8 commit d0f8932

1 file changed

Lines changed: 86 additions & 0 deletions

File tree

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
using System.Runtime.CompilerServices;
2+
3+
namespace MemoryPack;
4+
5+
public static partial class MemoryPackSerializer
6+
{
7+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
8+
public static StateBackup BackupState() => new(true);
9+
10+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
11+
public static SerializerStateBackup BackupSerializerState() => new(true);
12+
13+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
14+
public static DeserializerStateBackup BackupDeserializerState() => new(true);
15+
16+
// Nested types
17+
18+
public readonly struct StateBackup : IDisposable
19+
{
20+
readonly SerializerWriterThreadStaticState? _threadStaticState;
21+
readonly MemoryPackWriterOptionalState? _threadStaticWriterOptionalState;
22+
readonly MemoryPackReaderOptionalState? _threadStaticReaderOptionalState;
23+
readonly bool _isValid;
24+
25+
internal StateBackup(bool isValid)
26+
{
27+
_threadStaticState = threadStaticState;
28+
_threadStaticWriterOptionalState = threadStaticWriterOptionalState;
29+
_threadStaticReaderOptionalState = threadStaticReaderOptionalState;
30+
_isValid = isValid;
31+
}
32+
33+
public void Dispose()
34+
{
35+
if (!_isValid)
36+
return;
37+
38+
threadStaticState = _threadStaticState;
39+
threadStaticWriterOptionalState = _threadStaticWriterOptionalState;
40+
threadStaticReaderOptionalState = _threadStaticReaderOptionalState;
41+
}
42+
}
43+
44+
public readonly struct SerializerStateBackup : IDisposable
45+
{
46+
readonly SerializerWriterThreadStaticState? _threadStaticState;
47+
readonly MemoryPackWriterOptionalState? _threadStaticWriterOptionalState;
48+
readonly bool _isValid;
49+
50+
internal SerializerStateBackup(bool isValid)
51+
{
52+
_threadStaticState = threadStaticState;
53+
_threadStaticWriterOptionalState = threadStaticWriterOptionalState;
54+
_isValid = isValid;
55+
}
56+
57+
public void Dispose()
58+
{
59+
if (!_isValid)
60+
return;
61+
62+
threadStaticState = _threadStaticState;
63+
threadStaticWriterOptionalState = _threadStaticWriterOptionalState;
64+
}
65+
}
66+
67+
public readonly struct DeserializerStateBackup : IDisposable
68+
{
69+
readonly MemoryPackReaderOptionalState? _threadStaticReaderOptionalState;
70+
readonly bool _isValid;
71+
72+
internal DeserializerStateBackup(bool isValid)
73+
{
74+
_threadStaticReaderOptionalState = threadStaticReaderOptionalState;
75+
_isValid = isValid;
76+
}
77+
78+
public void Dispose()
79+
{
80+
if (!_isValid)
81+
return;
82+
83+
threadStaticReaderOptionalState = _threadStaticReaderOptionalState;
84+
}
85+
}
86+
}

0 commit comments

Comments
 (0)