From 80afa2c0aec37b7f98cc22615417c36672e695da Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Tue, 28 Apr 2020 00:35:52 -0400 Subject: tidy up, work on stateful --- IrcTokens/StatefulDecoder.cs | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) (limited to 'IrcTokens/StatefulDecoder.cs') diff --git a/IrcTokens/StatefulDecoder.cs b/IrcTokens/StatefulDecoder.cs index 47106d9..bdaf81d 100644 --- a/IrcTokens/StatefulDecoder.cs +++ b/IrcTokens/StatefulDecoder.cs @@ -11,17 +11,20 @@ namespace IrcTokens private Encoding _encoding; private Encoding _fallback; + public StatefulDecoder() + { + Clear(); + } + public Encoding Encoding { get => _encoding ?? Encoding.GetEncoding(Encoding.UTF8.CodePage, EncoderFallback.ExceptionFallback, - DecoderFallback.ExceptionFallback); + DecoderFallback.ExceptionFallback); set { if (value != null) - { _encoding = Encoding.GetEncoding(value.CodePage, EncoderFallback.ExceptionFallback, DecoderFallback.ReplacementFallback); - } } } @@ -32,20 +35,13 @@ namespace IrcTokens set { if (value != null) - { _fallback = Encoding.GetEncoding(value.CodePage, EncoderFallback.ReplacementFallback, DecoderFallback.ReplacementFallback); - } } } public string Pending => Encoding.GetString(_buffer); - public StatefulDecoder() - { - Clear(); - } - public void Clear() { _buffer = Array.Empty(); @@ -58,16 +54,13 @@ namespace IrcTokens public List Push(byte[] data) { - if (data == null || data.Length == 0) - { - return null; - } + if (data == null || data.Length == 0) return null; _buffer = _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(); + var lines = new List(); for (int i = 0, currentIndex = 0; i < newLineIndices.Length; ++i) { @@ -99,7 +92,6 @@ namespace IrcTokens var decodeLines = new List(); foreach (var line in listLines.Select(l => l.ToArray())) - { try { decodeLines.Add(Encoding.GetString(line)); @@ -108,7 +100,6 @@ namespace IrcTokens { decodeLines.Add(Fallback.GetString(line)); } - } return decodeLines .Select(l => new Line(l)) -- cgit 1.4.1