private IEnumerable<DynamicPropertyResult> EventAgePropertyCalculator(IQueryContext context, Name id)
{
if(!context.Perspective.Match(Name.SELF_SYMBOL))
yield break;
if (id.IsVariable)
{
foreach (var record in m_registry.Values)
{
var idSub = new Substitution(id, Name.BuildName(record.Id));
foreach (var c in context.Constraints)
{
if (c.Conflicts(idSub))
continue;
var newSet = new SubstitutionSet(c);
newSet.AddSubstitution(idSub);
var value = Tick - record.Timestamp;
yield return new DynamicPropertyResult(Name.BuildName(value), newSet);
}
}
yield break;
}
foreach (var pair in context.AskPossibleProperties(id))
{
uint idValue;
if(!pair.Item1.TryConvertToValue(out idValue))
continue;
var record = m_registry[idValue];
var value = (Tick - record.Timestamp);
foreach (var c in pair.Item2)
yield return new DynamicPropertyResult(Name.BuildName(value), c);
}
}