jtr/DevDisciples.Parsing/VisitorContainer.cs
2024-09-15 17:23:27 +02:00

42 lines
1.3 KiB
C#

namespace DevDisciples.Parsing;
public class VisitorContainer
{
private Dictionary<Type, Visitor.Visit> Visitors { get; } = new();
private Visitor.Visit Default { get; set; } = default!;
public void Register<TVisitee>(Visitor.Visit visitor)
{
Visitors[typeof(TVisitee)] = visitor;
}
public Visitor.Visit this[Type type] => Visitors.GetValueOrDefault(type, Default);
}
public class VisitorContainer<T>
{
protected Dictionary<Type, Visitor.Visit<T>> Visitors { get; } = new();
public Visitor.Visit<T> Default { get; set; } = default!;
public VisitorContainer<T> Register<TVisitee>(Visitor.Visit<T> visitor)
{
Visitors[typeof(TVisitee)] = visitor;
return this;
}
public Visitor.Visit<T> this[Type type] => Visitors.ContainsKey(type) ? Visitors[type] : Default;
}
public class VisitorContainer<TIn, TOut>
{
protected Dictionary<Type, Visitor.Visit<TIn, TOut>> Visitors { get; } = new();
public Visitor.Visit<TIn, TOut> Default { get; set; } = default!;
public void Register<TVisitee>(Visitor.Visit<TIn, TOut> visitor)
{
Visitors[typeof(TVisitee)] = visitor;
}
public Visitor.Visit<TIn, TOut> this[Type type] => Visitors.ContainsKey(type) ? Visitors[type] : Default;
}