#pragma once

#include "Transition.hpp"

/*
   Class: ParallelTransition

     Implements a parallel processing structure for atomic transitions by processing each child transition at the same time.

     *Inherits* from <Transition>.
*/
class ParallelTransition: public Transition {
  public:
    /*
       Constructor: ParallelTransition

         Initializes the object.
    */
    ParallelTransition();

    /*
       Destructor: ~ParallelTransition

         Releases all allocated resources.
    */
    ~ParallelTransition();


    /*
       Function: Update

         Updates all atomic transitions of the queue. If an atomic transition is completed, it is removed. *Inherited* from <Transition>.
    */
    void Update();

    /*
       Function: Complete

         Checks if the transition is completed, i.e. if all child transitions are completed. *Inherited* from <Transition>.

       Returns:

         A boolean value indicating if the transition is completed.
    */
    bool Complete();
};