diff options
author | Ben Harris <ben@tilde.team> | 2020-04-28 11:08:01 -0400 |
---|---|---|
committer | Ben Harris <ben@tilde.team> | 2020-04-28 11:08:01 -0400 |
commit | 6a0b8dc22fc86a5de37278231f3f8418afc9b836 (patch) | |
tree | 2cac03089c4d15bfe5a66b30e2b2ee5be5255f49 /IrcTokens/StatefulDecoder.cs | |
parent | 70e2eb8e7debc342d46a9ca08d70725cb624e19d (diff) |
Fix stateful decoder i think
Diffstat (limited to 'IrcTokens/StatefulDecoder.cs')
-rw-r--r-- | IrcTokens/StatefulDecoder.cs | 37 |
1 files changed, 3 insertions, 34 deletions
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<byte>() : _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<byte[]>(); - - 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<Line>(); foreach (var line in listLines.SkipLast(1).Select(l => l.ToArray())) |