Пример #1
0
 /// <summary>
 /// Removes a guard from the list of guards.
 /// </summary>
 /// <param name="guard">The guard to remove.</param>
 internal void remove(NSFBoolGuard <ContextType> guard)
 {
     lock (delegateListMutex)
     {
         guards -= guard;
     }
 }
Пример #2
0
 /// <summary>
 /// Adds a guard to the list of guards.
 /// </summary>
 /// <param name="guard">The guard to add.</param>
 internal void add(NSFBoolGuard <ContextType> guard)
 {
     lock (delegateListMutex)
     {
         guards += guard;
     }
 }
        /// <summary>
        /// Creates a local transition.
        /// </summary>
        /// <param name="name">User assigned name for transition.</param>
        /// <param name="source">Transition source.</param>
        /// <param name="target">Transition target.</param>
        /// <param name="trigger">Transition trigger.</param>
        /// <param name="guard">Transition guard.</param>
        /// <param name="action">Transition action.</param>
        public NSFLocalTransition(NSFString name, NSFCompositeState source, NSFState target, NSFEvent trigger, NSFBoolGuard<NSFStateMachineContext> guard, NSFVoidAction<NSFStateMachineContext> action)
            : base(name, source, target, trigger, guard, action)
        {
            compositeSource = source;

            // Target must be substate of source or the source itself
            if ((!Source.isParent(Target)) && (Source != Target))
            {
                throw new Exception(Name + " invalid local transition, source is neither parent of nor equal to target");
            }

            Source.addOutgoingTransition(this);
        }
        /// <summary>
        /// Creates a transition.
        /// </summary>
        /// <param name="name">User assigned name for transition.</param>
        /// <param name="source">Transition source.</param>
        /// <param name="target">Transition target.</param>
        /// <param name="trigger">Transition trigger.</param>
        /// <param name="guard">Transition guard.</param>
        /// <param name="action">Transition action.</param>
        /// <remarks>Deprecated - Use NSFExternalTransition or NSFLocalTransition</remarks>
        protected NSFTransition(NSFString name, NSFState source, NSFState target, NSFEvent trigger, NSFBoolGuard<NSFStateMachineContext> guard, NSFVoidAction<NSFStateMachineContext> action)
            : base(name)
        {
            this.source = source;
            this.target = target;
            Guards += guard;
            Actions += action;

            addTrigger(trigger);

            // Validity check
            if ((source == target) && (triggers.Count == 0) && Guards.isEmpty())
            {
                throw new Exception(Name + " invalid self-transition with no trigger or guard");
            }

            target.addIncomingTransition(this);
            // Outgoing transitions must be added by concrete classes

            Guards.setExceptionAction(handleGuardException);
            Actions.setExceptionAction(handleActionException);
        }
Пример #5
0
 /// <summary>
 /// Creates an internal transition.
 /// </summary>
 /// <param name="name">User assigned name for transition.</param>
 /// <param name="state">Transition state.</param>
 /// <param name="trigger">Transition trigger.</param>
 /// <param name="guard">Transition guard.</param>
 /// <param name="action">Transition action.</param>
 public NSFInternalTransition(NSFString name, NSFState state, NSFEvent trigger, NSFBoolGuard <NSFStateMachineContext> guard, NSFVoidAction <NSFStateMachineContext> action)
     : base(name, state, state, trigger, guard, action)
 {
     Source.addOutgoingTransition(this);
 }
Пример #6
0
 /// <summary>
 /// Creates an internal transition.
 /// </summary>
 /// <param name="state">Transition state.</param>
 /// <param name="trigger">Transition trigger.</param>
 /// <param name="guard">Transition guard.</param>
 /// <param name="action">Transition action.</param>
 /// <remarks>The default name for the transition is [state.Name]ReactionsTo[trigger.Name]</remarks>
 public NSFInternalTransition(NSFState state, NSFEvent trigger, NSFBoolGuard <NSFStateMachineContext> guard, NSFVoidAction <NSFStateMachineContext> action)
     : this(state.Name + "ReactionsTo" + trigger.Name, state, trigger, guard, action)
 {
 }
 /// <summary>
 /// Creates a local transition.
 /// </summary>
 /// <param name="source">Transition source.</param>
 /// <param name="target">Transition target.</param>
 /// <param name="trigger">Transition trigger.</param>
 /// <param name="guard">Transition guard.</param>
 /// <param name="action">Transition action.</param>
 public NSFLocalTransition(NSFCompositeState source, NSFState target, NSFEvent trigger, NSFBoolGuard<NSFStateMachineContext> guard, NSFVoidAction<NSFStateMachineContext> action)
     : this(source.Name + "To" + target.Name, source, target, trigger, guard, action)
 {
 }
Пример #8
0
        /// <summary>
        /// Creates a transition.
        /// </summary>
        /// <param name="name">User assigned name for transition.</param>
        /// <param name="source">Transition source.</param>
        /// <param name="target">Transition target.</param>
        /// <param name="trigger">Transition trigger.</param>
        /// <param name="guard">Transition guard.</param>
        /// <param name="action">Transition action.</param>
        /// <remarks>Deprecated - Use NSFExternalTransition or NSFLocalTransition</remarks>
        protected NSFTransition(NSFString name, NSFState source, NSFState target, NSFEvent trigger, NSFBoolGuard <NSFStateMachineContext> guard, NSFVoidAction <NSFStateMachineContext> action)
            : base(name)
        {
            this.source = source;
            this.target = target;
            Guards     += guard;
            Actions    += action;

            addTrigger(trigger);

            // Validity check
            if ((source == target) && (triggers.Count == 0) && Guards.isEmpty())
            {
                throw new Exception(Name + " invalid self-transition with no trigger or guard");
            }

            target.addIncomingTransition(this);
            // Outgoing transitions must be added by concrete classes

            Guards.setExceptionAction(handleGuardException);
            Actions.setExceptionAction(handleActionException);
        }
        /// <summary>
        /// Creates a local transition.
        /// </summary>
        /// <param name="name">User assigned name for transition.</param>
        /// <param name="source">Transition source.</param>
        /// <param name="target">Transition target.</param>
        /// <param name="trigger">Transition trigger.</param>
        /// <param name="guard">Transition guard.</param>
        /// <param name="action">Transition action.</param>
        public NSFLocalTransition(NSFString name, NSFCompositeState source, NSFState target, NSFEvent trigger, NSFBoolGuard <NSFStateMachineContext> guard, NSFVoidAction <NSFStateMachineContext> action)
            : base(name, source, target, trigger, guard, action)
        {
            compositeSource = source;

            // Target must be substate of source or the source itself
            if ((!Source.isParent(Target)) && (Source != Target))
            {
                throw new Exception(Name + " invalid local transition, source is neither parent of nor equal to target");
            }

            Source.addOutgoingTransition(this);
        }
 /// <summary>
 /// Creates a local transition.
 /// </summary>
 /// <param name="source">Transition source.</param>
 /// <param name="target">Transition target.</param>
 /// <param name="trigger">Transition trigger.</param>
 /// <param name="guard">Transition guard.</param>
 /// <param name="action">Transition action.</param>
 public NSFLocalTransition(NSFCompositeState source, NSFState target, NSFEvent trigger, NSFBoolGuard <NSFStateMachineContext> guard, NSFVoidAction <NSFStateMachineContext> action)
     : this(source.Name + "To" + target.Name, source, target, trigger, guard, action)
 {
 }
 /// <summary>
 /// Creates an external transition.
 /// </summary>
 /// <param name="name">User assigned name for transition.</param>
 /// <param name="source">Transition source.</param>
 /// <param name="target">Transition target.</param>
 /// <param name="trigger">Transition trigger.</param>
 /// <param name="guard">Transition guard.</param>
 /// <param name="action">Transition action.</param>
 public NSFExternalTransition(NSFString name, NSFState source, NSFState target, NSFEvent trigger, NSFBoolGuard<NSFStateMachineContext> guard, NSFVoidAction<NSFStateMachineContext> action)
     : base(name, source, target, trigger, guard, action)
 {
     Source.addOutgoingTransition(this);
 }
 /// <summary>
 /// Creates an internal transition.
 /// </summary>
 /// <param name="state">Transition state.</param>
 /// <param name="trigger">Transition trigger.</param>
 /// <param name="guard">Transition guard.</param>
 /// <param name="action">Transition action.</param>
 /// <remarks>The default name for the transition is [state.Name]ReactionsTo[trigger.Name]</remarks>
 public NSFInternalTransition(NSFState state, NSFEvent trigger, NSFBoolGuard<NSFStateMachineContext> guard, NSFVoidAction<NSFStateMachineContext> action)
     : this(state.Name + "ReactionsTo" + trigger.Name, state, trigger, guard, action)
 {
 }