Files
FSI.BT.IR.Tools/Kalk/Kalk.Core/Model/KalkExpressionWithMembers.cs
Maier Stephan SI b684704bf8 Sicherung
2023-01-20 16:09:00 +01:00

56 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Scriban;
using Scriban.Parsing;
using Scriban.Runtime;
using Scriban.Syntax;
namespace Kalk.Core
{
public abstract class KalkExpressionWithMembers : KalkExpression
{
protected abstract (string, Func<KalkExpressionWithMembers, object> getter)[] Members { get; }
public override int Count => Members.Length;
public override IEnumerable<string> GetMembers()
{
foreach (var memberPair in Members) yield return memberPair.Item1;
}
public override bool Contains(string member)
{
foreach (var memberPair in Members)
if (memberPair.Item1 == member)
return true;
return false;
}
public override bool IsReadOnly { get; set; }
public override bool TryGetValue(TemplateContext context, SourceSpan span, string member, out object value)
{
value = null;
foreach (var memberPair in Members)
{
if (memberPair.Item1 == member)
{
value = memberPair.Item2(this);
return true;
}
}
return false;
}
public override bool CanWrite(string member) => false;
public override bool TrySetValue(TemplateContext context, SourceSpan span, string member, object value, bool readOnly) => false;
public override bool Remove(string member) => false;
public override void SetReadOnly(string member, bool readOnly) => throw new NotSupportedException("A member of Unit is readonly by default and cannot be modified");
}
}