internal static bool IsDescendant <T>(StormToken token, IStorm <T> root, Action <StormToken, EStormVisitType>?rootOnVisit, IStormNode otherNode) { if (otherNode == root) { return(true); } if (otherNode is IStormSocket <T> socket && socket.Target == root) { return(true); } if (rootOnVisit == null) { return(false); } var hasEntered = false; void TargetOnVisit(StormToken enteredToken, EStormVisitType visitType) { hasEntered |= Equals(enteredToken, token) && visitType == EStormVisitType.EnterLoopSearch; } otherNode.OnVisit += TargetOnVisit; rootOnVisit.Invoke(token, EStormVisitType.EnterLoopSearch); rootOnVisit.Invoke(token, EStormVisitType.LeaveLoopSearch); otherNode.OnVisit -= TargetOnVisit; return(hasEntered); }
public new void LeaveUpdate(StormToken token, bool hasChanged) => base.LeaveUpdate(token, hasChanged);
public new void EnterUpdate(StormToken token) => base.EnterUpdate(token);
public new void LeaveLoopSearch(StormToken token) => base.LeaveLoopSearch(token);
public new void EnterLoopSearch(StormToken token) => base.EnterLoopSearch(token);
public StormTokenSource(bool isDisposed) { Token = new StormToken(this); _isDisposed = isDisposed; }
private void TargetOnVisit(StormToken token, EStormVisitType visitType) { SourceOnVisit(_hasTargetChanged ? 2 : 1, token, visitType); }
public void Connect(StormToken token, IStorm <T> target) { if (token.Equals(default))
public void DefaultUnRegisterOnLeaveThrow() { Token = default; Assert.Throws <ObjectDisposedException>(() => Token.Leave -= null); }
private void FirstOnVisit(StormToken token, EStormVisitType visitType) => SourceOnVisit(0, token, visitType);
public void DefaultGetHashCodeReturns() { Token = default; Token.GetHashCode(); }
public void DefaultEqualsSelfAsObject() { Token = default; Assert.That(Token.Equals((object)Token), Is.True); }
public void DefaultEqualsSelf() { Token = default; Assert.That(Token.Equals(Token), Is.True); }
public new StormVisitState GetVisitState(out StormToken token) => base.GetVisitState(out token);
public void SetError(StormToken token, StormError error) { if (token.Equals(default)) throw new ArgumentException("Default token not allowed", nameof(token));
public StormVisitState GetVisitState(out StormToken token) { token = default; return(StormVisitState.Idle); }
protected void SourceOnVisit(int index, StormToken token, EStormVisitType visitType) { if (token.Equals(default))
public new void SourceOnVisit(int index, StormToken token, EStormVisitType visitType) => base.SourceOnVisit(index, token, visitType);
private void SelectorOnVisit(StormToken token, EStormVisitType visitType) { SourceOnVisit(0, token, visitType); }