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