qamp/Qrakhen.Qamp.Memory/LineBuffer.cs

49 lines
1.3 KiB
C#

using System.ComponentModel;
using System.Text;
namespace Qrakhen.Qamp.Memory;
public sealed class LineBuffer : TailBuffer<byte>, INotifyPropertyChanged
{
public Encoding Encoding { get; }
public string Cached { get; private set; } = "";
public event PropertyChangedEventHandler? PropertyChanged;
public LineBuffer(Encoding encoding, int size = 0x80) : base(size)
{
Encoding = encoding;
}
public LineBuffer(string data) : this(data, Encoding.ASCII) { }
public LineBuffer(string data, Encoding encoding) : this(encoding.GetBytes(data), encoding) { }
public LineBuffer(byte[] data, Encoding encoding) : base(data)
{
Encoding = encoding;
Cached = ToString();
}
protected override void SetTail(int tail = -1)
{
base.SetTail(tail);
Cached = ToString();
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Cached)));
}
public void Insert(int cursor, string data)
=> Insert(cursor, Encoding.GetBytes(data));
public override string ToString()
{
if (Tail == 0 || Encoding == null)
return string.Empty;
return Encoding.GetString(Data, 0, Tail);
}
public override object Clone()
{
return new LineBuffer(_data.ToArray(), Encoding);
}
public static implicit operator LineBuffer(string s) => new LineBuffer(s);
}