Refactoring and xmldoc

This commit is contained in:
tznind
2024-10-26 17:05:26 +01:00
parent 3b53363b74
commit 6e4a6747db
4 changed files with 64 additions and 28 deletions

View File

@@ -270,34 +270,6 @@ internal abstract class AnsiResponseParserBase : IAnsiResponseParser
}
}
internal interface IHeld
{
void ClearHeld ();
string HeldToString ();
IEnumerable<object> HeldToObjects ();
void AddToHeld (object o);
}
internal class StringHeld : IHeld
{
private readonly StringBuilder held = new ();
public void ClearHeld () => held.Clear ();
public string HeldToString () => held.ToString ();
public IEnumerable<object> HeldToObjects () => held.ToString ().Select (c => (object)c);
public void AddToHeld (object o) => held.Append ((char)o);
}
internal class GenericHeld<T> : IHeld
{
private readonly List<Tuple<char, T>> held = new ();
public void ClearHeld () => held.Clear ();
public string HeldToString () => new (held.Select (h => h.Item1).ToArray ());
public IEnumerable<object> HeldToObjects () => held;
public void AddToHeld (object o) => held.Add ((Tuple<char, T>)o);
}
internal class AnsiResponseParser<T> : AnsiResponseParserBase
{
public AnsiResponseParser () : base (new GenericHeld<T> ()) { }

View File

@@ -0,0 +1,16 @@
#nullable enable
namespace Terminal.Gui;
/// <summary>
/// Implementation of <see cref="IHeld"/> for <see cref="AnsiResponseParser{T}"/>
/// </summary>
/// <typeparam name="T"></typeparam>
internal class GenericHeld<T> : IHeld
{
private readonly List<Tuple<char, T>> held = new ();
public void ClearHeld () => held.Clear ();
public string HeldToString () => new (held.Select (h => h.Item1).ToArray ());
public IEnumerable<object> HeldToObjects () => held;
public void AddToHeld (object o) => held.Add ((Tuple<char, T>)o);
}

View File

@@ -0,0 +1,33 @@
#nullable enable
namespace Terminal.Gui;
/// <summary>
/// Describes a sequence of chars (and optionally T metadata) accumulated
/// by an <see cref="IAnsiResponseParser"/>
/// </summary>
internal interface IHeld
{
/// <summary>
/// Clears all held objects
/// </summary>
void ClearHeld ();
/// <summary>
/// Returns string representation of the held objects
/// </summary>
/// <returns></returns>
string HeldToString ();
/// <summary>
/// Returns the collection objects directly e.g. <see langword="char"/>
/// or <see cref="Tuple"/> <see langword="char"/> + metadata T
/// </summary>
/// <returns></returns>
IEnumerable<object> HeldToObjects ();
/// <summary>
/// Adds the given object to the collection.
/// </summary>
/// <param name="o"></param>
void AddToHeld (object o);
}

View File

@@ -0,0 +1,15 @@
#nullable enable
namespace Terminal.Gui;
/// <summary>
/// Implementation of <see cref="IHeld"/> for <see cref="AnsiResponseParser"/>
/// </summary>
internal class StringHeld : IHeld
{
private readonly StringBuilder held = new ();
public void ClearHeld () => held.Clear ();
public string HeldToString () => held.ToString ();
public IEnumerable<object> HeldToObjects () => held.ToString ().Select (c => (object)c);
public void AddToHeld (object o) => held.Append ((char)o);
}