From 6a0b8dc22fc86a5de37278231f3f8418afc9b836 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Tue, 28 Apr 2020 11:08:01 -0400 Subject: Fix stateful decoder i think --- IrcTokens/StatefulDecoder.cs | 37 +++---------------------------------- 1 file changed, 3 insertions(+), 34 deletions(-) (limited to 'IrcTokens/StatefulDecoder.cs') diff --git a/IrcTokens/StatefulDecoder.cs b/IrcTokens/StatefulDecoder.cs index 2db32f2..62d1703 100644 --- a/IrcTokens/StatefulDecoder.cs +++ b/IrcTokens/StatefulDecoder.cs @@ -56,41 +56,10 @@ namespace IrcTokens { if (data == null || data.Length == 0) return null; - _buffer = _buffer.Concat(data).ToArray(); + _buffer = _buffer == null ? Array.Empty() : _buffer.Concat(data).ToArray(); - // simulate string.Split('\n') before decoding - var newLineIndices = _buffer.Select((b, i) => b == '\n' ? i : -1).Where(i => i != -1).ToArray(); - var lines = new List(); - - for (int i = 0, currentIndex = 0; i < newLineIndices.Length; ++i) - { - var n = new byte[newLineIndices[i] - currentIndex]; - Array.Copy(_buffer, currentIndex, n, 0, newLineIndices[i] - currentIndex); - currentIndex = newLineIndices[i] + 1; - lines.Add(n); - } - - var listLines = lines.Select(l => l.ToList()).ToList(); - - // simulate string.Trim('\r') before decoding - foreach (var line in listLines) - { - var i = 0; - while (line[i] == '\r') - { - line.RemoveAt(i); - i++; - } - - i = line.Count - 1; - while (line[i] == '\r') - { - line.RemoveAt(i); - i--; - } - } - - _buffer = listLines[^1].ToArray(); + var listLines = _buffer.Split((byte) '\n').Select(l => l.Trim((byte) '\r')).ToList(); + _buffer = listLines.Last(); var decodeLines = new List(); foreach (var line in listLines.SkipLast(1).Select(l => l.ToArray())) -- cgit 1.4.1