about summary refs log tree commit diff
path: root/IrcTokens/StatefulEncoder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'IrcTokens/StatefulEncoder.cs')
-rw-r--r--IrcTokens/StatefulEncoder.cs26
1 files changed, 10 insertions, 16 deletions
diff --git a/IrcTokens/StatefulEncoder.cs b/IrcTokens/StatefulEncoder.cs
index c036400..b486736 100644
--- a/IrcTokens/StatefulEncoder.cs
+++ b/IrcTokens/StatefulEncoder.cs
@@ -7,8 +7,14 @@ namespace IrcTokens
 {
     public class StatefulEncoder
     {
+        private Queue<Line> _bufferedLines;
         private Encoding _encoding;
 
+        public StatefulEncoder()
+        {
+            Clear();
+        }
+
         public Encoding Encoding
         {
             get => _encoding ?? Encoding.GetEncoding(Encoding.UTF8.CodePage, EncoderFallback.ExceptionFallback,
@@ -16,15 +22,11 @@ namespace IrcTokens
             set
             {
                 if (value != null)
-                {
                     _encoding = Encoding.GetEncoding(value.CodePage, EncoderFallback.ExceptionFallback,
                         DecoderFallback.ExceptionFallback);
-                }
             }
         }
 
-        private Queue<Line> _bufferedLines;
-
         public byte[] PendingBytes { get; private set; }
 
         public string Pending()
@@ -40,23 +42,15 @@ namespace IrcTokens
             }
         }
 
-        public StatefulEncoder()
-        {
-            Clear();
-        }
-
         public void Clear()
         {
-            PendingBytes = Array.Empty<byte>();
+            PendingBytes   = Array.Empty<byte>();
             _bufferedLines = new Queue<Line>();
         }
 
         public void Push(Line line)
         {
-            if (line == null)
-            {
-                throw new ArgumentNullException(nameof(line));
-            }
+            if (line == null) throw new ArgumentNullException(nameof(line));
 
             PendingBytes = PendingBytes.Concat(Encoding.GetBytes($"{line.Format()}\r\n")).ToArray();
             _bufferedLines.Enqueue(line);
@@ -66,8 +60,8 @@ namespace IrcTokens
         {
             var sent = PendingBytes.Take(byteCount).Count(c => c == '\n');
 
-            PendingBytes = PendingBytes.Skip(byteCount).ToArray();
-            _bufferedLines = new Queue<Line>(_bufferedLines.Skip(sent));
+            PendingBytes   = PendingBytes.Skip(byteCount).ToArray();
+            _bufferedLines = new Queue<Line>(_bufferedLines.Take(sent));
 
             return Enumerable.Range(0, sent)
                 .Select(_ => _bufferedLines.Dequeue())