protected override void HandleReadyComputation(Computation computation) { var syncComputation = (SynchronizationComputation <TRight, TLeft>)computation; var left = syncComputation.Opposite.Input; var right = syncComputation.Input; switch (syncComputation.SynchronizationContext.ChangePropagation) { case ChangePropagationMode.None: if (guard.Evaluate(left, right)) { parent.CreateRightToLeftSynchronization(syncComputation); } break; case ChangePropagationMode.OneWay: case ChangePropagationMode.TwoWay: var tracker = guard.Observe(left, right); tracker.Successors.SetDummy(); syncComputation.Dependencies.Add(new GuardedSynchronization <TRight, TLeft>(syncComputation, parent.CreateRightToLeftSynchronization, tracker)); break; default: break; } }
protected override void HandleReadyComputation(Computation computation) { parent.CreateRightToLeftSynchronization(false, (SynchronizationComputation <TRight, TLeft>)computation); }