From f9639923cc0c70fc0214b79a22bb300322e60efd Mon Sep 17 00:00:00 2001 From: Rutherther Date: Wed, 4 Jan 2023 22:37:58 +0100 Subject: [PATCH] feat(packets): add PerparedLevel to PacketStringEnumerator's levels to allow multiple prepared levels for nested packets --- .../PacketStringEnumerator.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Packets/NosSmooth.PacketSerializer.Abstractions/PacketStringEnumerator.cs b/Packets/NosSmooth.PacketSerializer.Abstractions/PacketStringEnumerator.cs index 5cc8d1c..1b69717 100644 --- a/Packets/NosSmooth.PacketSerializer.Abstractions/PacketStringEnumerator.cs +++ b/Packets/NosSmooth.PacketSerializer.Abstractions/PacketStringEnumerator.cs @@ -17,7 +17,6 @@ public ref struct PacketStringEnumerator private readonly ReadOnlySpan _data; private readonly Dictionary _numberOfSeparators; private EnumeratorLevel _currentLevel; - private (char Separator, uint? MaxTokens)? _preparedLevel; private bool _currentTokenRead; private PacketToken _currentToken; private bool _readToLast; @@ -37,7 +36,6 @@ public ref struct PacketStringEnumerator _numberOfSeparators = new Dictionary(); _numberOfSeparators.Add(separator, 1); _currentToken = new PacketToken(default, default, default, default); - _preparedLevel = null; _readToLast = false; _currentTokenRead = false; } @@ -70,7 +68,7 @@ public ref struct PacketStringEnumerator /// The maximum number of tokens for the level. public void PrepareLevel(char separator, uint? maxTokens = null) { - _preparedLevel = (separator, maxTokens); + _currentLevel.PreparedLevel = (separator, maxTokens); } /// @@ -78,7 +76,7 @@ public ref struct PacketStringEnumerator /// public void RemovePreparedLevel() { - _preparedLevel = null; + _currentLevel.PreparedLevel = null; } /// @@ -87,23 +85,24 @@ public ref struct PacketStringEnumerator /// Whether there is a prepared level present. public bool PushPreparedLevel() { - if (_preparedLevel is null) + var preparedLevel = _currentLevel.PreparedLevel; + if (preparedLevel is null) { return false; } _currentTokenRead = false; - _currentLevel = new EnumeratorLevel(_currentLevel, _preparedLevel.Value.Separator, _preparedLevel.Value.MaxTokens) + _currentLevel = new EnumeratorLevel(_currentLevel, preparedLevel.Value.Separator, preparedLevel.Value.MaxTokens) { ReachedEnd = _currentLevel.ReachedEnd }; - if (!_numberOfSeparators.ContainsKey(_preparedLevel.Value.Separator)) + if (!_numberOfSeparators.ContainsKey(preparedLevel.Value.Separator)) { - _numberOfSeparators.Add(_preparedLevel.Value.Separator, 0); + _numberOfSeparators.Add(preparedLevel.Value.Separator, 0); } - _numberOfSeparators[_preparedLevel.Value.Separator]++; + _numberOfSeparators[preparedLevel.Value.Separator]++; return true; } @@ -118,7 +117,6 @@ public ref struct PacketStringEnumerator /// The maximum number of tokens to read. public void PushLevel(char separator, uint? maxTokens = default) { - _preparedLevel = null; _currentTokenRead = false; _currentLevel = new EnumeratorLevel(_currentLevel, separator, maxTokens) { @@ -367,5 +365,7 @@ public ref struct PacketStringEnumerator public uint TokensRead { get; set; } public bool? ReachedEnd { get; set; } + + public (char Separator, uint? MaxTokens)? PreparedLevel { get; set; } } } \ No newline at end of file -- 2.49.0