diff options
Diffstat (limited to 'IrcTokens/StatefulDecoder.cs')
-rw-r--r-- | IrcTokens/StatefulDecoder.cs | 25 |
1 files changed, 8 insertions, 17 deletions
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<byte>(); @@ -58,16 +54,13 @@ namespace IrcTokens public List<Line> 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<byte[]>(); + var lines = new List<byte[]>(); for (int i = 0, currentIndex = 0; i < newLineIndices.Length; ++i) { @@ -99,7 +92,6 @@ namespace IrcTokens var decodeLines = new List<string>(); 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)) |