about summary refs log tree commit diff
path: root/IrcTokens/StatefulDecoder.cs
diff options
context:
space:
mode:
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()))