using System.ComponentModel; using System.Text; namespace Qrakhen.Qamp.Memory; public sealed class LineBuffer : TailBuffer, 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) : base(encoding.GetBytes(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 static implicit operator LineBuffer(string s) => new LineBuffer(s); }