~ruther/NosSmooth

f9639923cc0c70fc0214b79a22bb300322e60efd — Rutherther 2 years ago 025319a
feat(packets): add PerparedLevel to PacketStringEnumerator's levels to allow multiple prepared levels for nested packets
1 files changed, 10 insertions(+), 10 deletions(-)

M Packets/NosSmooth.PacketSerializer.Abstractions/PacketStringEnumerator.cs
M Packets/NosSmooth.PacketSerializer.Abstractions/PacketStringEnumerator.cs => Packets/NosSmooth.PacketSerializer.Abstractions/PacketStringEnumerator.cs +10 -10
@@ 17,7 17,6 @@ public ref struct PacketStringEnumerator
    private readonly ReadOnlySpan<char> _data;
    private readonly Dictionary<char, ushort> _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<char, ushort>();
        _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
    /// <param name="maxTokens">The maximum number of tokens for the level.</param>
    public void PrepareLevel(char separator, uint? maxTokens = null)
    {
        _preparedLevel = (separator, maxTokens);
        _currentLevel.PreparedLevel = (separator, maxTokens);
    }

    /// <summary>


@@ 78,7 76,7 @@ public ref struct PacketStringEnumerator
    /// </summary>
    public void RemovePreparedLevel()
    {
        _preparedLevel = null;
        _currentLevel.PreparedLevel = null;
    }

    /// <summary>


@@ 87,23 85,24 @@ public ref struct PacketStringEnumerator
    /// <returns>Whether there is a prepared level present.</returns>
    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
    /// <param name="maxTokens">The maximum number of tokens to read.</param>
    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

Do not follow this link