about summary refs log tree commit diff
path: root/IrcTokens/StatefulDecoder.cs
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2020-04-28 11:08:01 -0400
committerBen Harris <ben@tilde.team>2020-04-28 11:08:01 -0400
commit6a0b8dc22fc86a5de37278231f3f8418afc9b836 (patch)
tree2cac03089c4d15bfe5a66b30e2b2ee5be5255f49 /IrcTokens/StatefulDecoder.cs
parent70e2eb8e7debc342d46a9ca08d70725cb624e19d (diff)
Fix stateful decoder i think
Diffstat (limited to 'IrcTokens/StatefulDecoder.cs')
-rw-r--r--IrcTokens/StatefulDecoder.cs37
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()))