Esempio n. 1
0
            private bool TryFindLocalHandler(TTrigger trigger, object[] args, out TriggerBehaviourResult handlerResult)
            {
                // Get list of candidate trigger handlers
                if (!TriggerBehaviours.TryGetValue(trigger, out ICollection <TriggerBehaviour> possible))
                {
                    handlerResult = null;
                    return(false);
                }

                // Guard functions are executed here
                var actual = possible
                             .Select(h => new TriggerBehaviourResult(h, h.UnmetGuardConditions(args)))
                             .ToArray();

                // Find a handler for the trigger
                handlerResult = TryFindLocalHandlerResult(trigger, actual)
                                ?? TryFindLocalHandlerResultWithUnmetGuardConditions(actual);

                if (handlerResult == null)
                {
                    return(false);
                }

                return(!handlerResult.UnmetGuardConditions.Any());
            }
Esempio n. 2
0
            bool TryFindLocalHandler(TTrigger trigger, object[] args, out TriggerBehaviourResult handlerResult)
            {
                // Get list of candidate trigger handlers
                if (!_triggerBehaviours.TryGetValue(trigger, out ICollection <TriggerBehaviour> possible))
                {
                    handlerResult = null;
                    return(false);
                }

                // Remove those that have unmet guard conditions
                // Guard functions are executed here
                var actual = possible
                             .Select(h => new TriggerBehaviourResult(h, h.UnmetGuardConditions(args)))
                             .Where(g => g.UnmetGuardConditions.Count == 0)
                             .ToArray();

                // Find a handler for the trigger
                handlerResult = TryFindLocalHandlerResult(trigger, actual, r => !r.UnmetGuardConditions.Any())
                                ?? TryFindLocalHandlerResult(trigger, actual, r => r.UnmetGuardConditions.Any());

                if (handlerResult == null)
                {
                    return(false);
                }

                return(!handlerResult.UnmetGuardConditions.Any());
            }
Esempio n. 3
0
            public bool TryFindHandler(TTrigger trigger, object[] args, out TriggerBehaviourResult handler)
            {
                TriggerBehaviourResult superStateHandler = null;

                bool handlerFound = (TryFindLocalHandler(trigger, args, out TriggerBehaviourResult localHandler) ||
                                     (Superstate != null && Superstate.TryFindHandler(trigger, args, out superStateHandler)));

                // If no handler for super state, replace by local handler (see issue #398)
                handler = superStateHandler ?? localHandler;

                return(handlerFound);
            }
Esempio n. 4
0
            bool TryFindLocalHandler(TTrigger trigger, out TriggerBehaviourResult handlerResult)
            {
                if (!_triggerBehaviours.TryGetValue(trigger, out ICollection <TriggerBehaviour> possible))
                {
                    handlerResult = null;
                    return(false);
                }

                // Guard functions executed
                var actual = possible
                             .Select(h => new TriggerBehaviourResult(h, h.UnmetGuardConditions));

                handlerResult = TryFindLocalHandlerResult(trigger, actual, r => !r.UnmetGuardConditions.Any())
                                ?? TryFindLocalHandlerResult(trigger, actual, r => r.UnmetGuardConditions.Any());

                return(!handlerResult.UnmetGuardConditions.Any());
            }
Esempio n. 5
0
 public bool TryFindHandler(TTrigger trigger, object[] args, out TriggerBehaviourResult handler)
 {
     return(TryFindLocalHandler(trigger, args, out handler) ||
            (Superstate != null && Superstate.TryFindHandler(trigger, args, out handler)));
 }