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);
        }
Esempio n. 2
0
 public new void LeaveUpdate(StormToken token, bool hasChanged) => base.LeaveUpdate(token, hasChanged);
Esempio n. 3
0
 public new void EnterUpdate(StormToken token) => base.EnterUpdate(token);
Esempio n. 4
0
 public new void LeaveLoopSearch(StormToken token) => base.LeaveLoopSearch(token);
Esempio n. 5
0
 public new void EnterLoopSearch(StormToken token) => base.EnterLoopSearch(token);
Esempio n. 6
0
 public StormTokenSource(bool isDisposed)
 {
     Token       = new StormToken(this);
     _isDisposed = isDisposed;
 }
Esempio n. 7
0
 private void TargetOnVisit(StormToken token, EStormVisitType visitType)
 {
     SourceOnVisit(_hasTargetChanged ? 2 : 1, token, visitType);
 }
Esempio n. 8
0
 public void Connect(StormToken token, IStorm <T> target)
 {
     if (token.Equals(default))
Esempio n. 9
0
 public void DefaultUnRegisterOnLeaveThrow()
 {
     Token = default;
     Assert.Throws <ObjectDisposedException>(() => Token.Leave -= null);
 }
Esempio n. 10
0
 private void FirstOnVisit(StormToken token, EStormVisitType visitType) => SourceOnVisit(0, token, visitType);
Esempio n. 11
0
 public void DefaultGetHashCodeReturns()
 {
     Token = default;
     Token.GetHashCode();
 }
Esempio n. 12
0
 public void DefaultEqualsSelfAsObject()
 {
     Token = default;
     Assert.That(Token.Equals((object)Token), Is.True);
 }
Esempio n. 13
0
 public void DefaultEqualsSelf()
 {
     Token = default;
     Assert.That(Token.Equals(Token), Is.True);
 }
Esempio n. 14
0
 public new StormVisitState GetVisitState(out StormToken token) => base.GetVisitState(out token);
Esempio n. 15
0
 public void SetError(StormToken token, StormError error)
 {
     if (token.Equals(default)) throw new ArgumentException("Default token not allowed", nameof(token));
Esempio n. 16
0
 public StormVisitState GetVisitState(out StormToken token)
 {
     token = default;
     return(StormVisitState.Idle);
 }
Esempio n. 17
0
 protected void SourceOnVisit(int index, StormToken token, EStormVisitType visitType)
 {
     if (token.Equals(default))
Esempio n. 18
0
 public new void SourceOnVisit(int index, StormToken token, EStormVisitType visitType) => base.SourceOnVisit(index, token, visitType);
Esempio n. 19
0
 private void SelectorOnVisit(StormToken token, EStormVisitType visitType)
 {
     SourceOnVisit(0, token, visitType);
 }