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()); }
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()); }
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); }
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()); }
public bool TryFindHandler(TTrigger trigger, object[] args, out TriggerBehaviourResult handler) { return(TryFindLocalHandler(trigger, args, out handler) || (Superstate != null && Superstate.TryFindHandler(trigger, args, out handler))); }