public SymbolicEntity GetMatched(SymbolicEntity entity) { // TODO: add a guard for infinity loop! while (entity.MergingReference.TryGetMatched(version, out var matched)) { entity = matched; } return(entity); }
public bool TryGetMatched(ulong version, out SymbolicEntity dest) { if (revision != version) { dest = null; return(false); } dest = entity; return(true); }
public bool TryGetMatched(SymbolicEntity source, out SymbolicEntity dest) { if (!source.ApplyingReference.TryGetMatched(version, out dest)) { return(false); } Debug.Assert(!dest.ApplyingReference.IsMatchedOrVisitedEver()); if (mergingContext != null) { dest = mergingContext.GetMatched(dest); } Debug.Assert(!dest.ApplyingReference.IsMatchedOrVisitedEver()); return(true); }
public bool IsVisited(SymbolicEntity item) => item.ApplyingReference.IsMatched(version);
public void Visit(SymbolicEntity item) => item.ApplyingReference.Match(version, null);
public bool IsMatched(SymbolicEntity entity) => entity.MergingReference.IsMatched(version);
public void Match(SymbolicEntity source, SymbolicEntity dest) => source.MergingReference.Match(version, dest);
public void Match(ulong version, SymbolicEntity dest) { revision = version; entity = dest; }