Class ParallelBehaviour

  • All Implemented Interfaces:
    Serializable, Serializable

    public class ParallelBehaviour
    extends CompositeBehaviour
    Composite behaviour with concurrent children scheduling. It is a CompositeBehaviour that executes its children behaviours concurrently, and it terminates when a particular condition on its sub-behaviours is met i.e. when all children are done, N children are done or any child is done.
    Version:
    $Date$ $Revision$
    Author:
    Giovanni Rimassa - Universita` di Parma, Giovanni Caire - Telecom Italia Lab
    See Also:
    Serialized Form
    • Field Detail

      • WHEN_ALL

        public static final int WHEN_ALL
        Predefined constant to be used in the constructor to create a ParallelBehaviour that terminates when all its children are done.
        See Also:
        Constant Field Values
      • WHEN_ANY

        public static final int WHEN_ANY
        Predefined constant to be used in the constructor to create a ParallelBehaviour that terminates when any of its child is done.
        See Also:
        Constant Field Values
    • Constructor Detail

      • ParallelBehaviour

        public ParallelBehaviour()
        Construct a ParallelBehaviour without setting the owner agent, and using the default termination condition (i.e. the parallel behaviour terminates as soon as all its children behaviours terminate.
      • ParallelBehaviour

        public ParallelBehaviour​(int endCondition)
        Construct a ParallelBehaviour without setting the owner agent.
        Parameters:
        endCondition - this value defines the termination condition for this ParallelBehaviour. Use
        1. WHEN_ALL to terminate this ParallelBehaviour when all its children are done.
        2. WHEN_ANY to terminate this ParallelBehaviour when any of its child is done.
        3. a positive int value n to terminate this ParallelBehaviour when n of its children are done.
      • ParallelBehaviour

        public ParallelBehaviour​(Agent a,
                                 int endCondition)
        Construct a ParallelBehaviour setting the owner agent.
        Parameters:
        a - the agent this ParallelBehaviour belongs to.
        endCondition - this value defines the termination condition for this ParallelBehaviour. Use
        1. WHEN_ALL to terminate this ParallelBehaviour when all its children are done.
        2. WHEN_ANY to terminate this ParallelBehaviour when any of its child is done.
        3. a positive int value n to terminate this ParallelBehaviour when n of its children are done.
    • Method Detail

      • scheduleNext

        protected void scheduleNext​(boolean currentDone,
                                    int currentResult)
        This method schedules children behaviours one at a time, in a round robin fashion.
        Specified by:
        scheduleNext in class CompositeBehaviour
        Parameters:
        currentDone - a flag indicating whether the just executed child has completed or not.
        currentResult - the termination value (as returned by onEnd()) of the just executed child in the case this child has completed (otherwise this parameter is meaningless)
        See Also:
        CompositeBehaviour.scheduleNext(boolean, int)
      • checkTermination

        protected boolean checkTermination​(boolean currentDone,
                                           int currentResult)
        Check whether this ParallelBehaviour must terminate.
        Specified by:
        checkTermination in class CompositeBehaviour
        Parameters:
        currentDone - a flag indicating whether the just executed child has completed or not.
        currentResult - the termination value (as returned by onEnd()) of the just executed child in the case this child has completed (otherwise this parameter is meaningless)
        Returns:
        true if the CompositeBehaviour should terminate. false otherwise.
        See Also:
        CompositeBehaviour.checkTermination(boolean, int)
      • getTerminatedChildren

        public Collection getTerminatedChildren()
        Return a Collection view of the children of this ParallelBehaviour that have already completed.
      • addSubBehaviour

        public void addSubBehaviour​(Behaviour b)
        Add a sub behaviour to this ParallelBehaviour
      • removeSubBehaviour

        public void removeSubBehaviour​(Behaviour b)
        Remove a sub behaviour from this ParallelBehaviour
      • reset

        public void reset()
        Resets this behaviour. This methods puts a ParallelBehaviour back in initial state, besides calling reset() on each child behaviour recursively.
        Overrides:
        reset in class CompositeBehaviour
      • handle

        protected void handle​(Behaviour.RunnableChangedEvent rce)
        Handle block/restart notifications. A ParallelBehaviour object is blocked only when all its children behaviours are blocked and becomes ready to run as soon as any of its children is runnable. This method takes care of the various possibilities.
        Overrides:
        handle in class Behaviour
        Parameters:
        rce - The event to handle.