ANY NONE
class interface LOOP_STACK
   -- Manage LOOP_ITEM. When new loop is pushed, all jobs in current
   -- running loop suspend until the new loop end (all jobs end or break).
   --

creation
   make
      ensure
         current_loop /= Void

feature(s) from LOOP_STACK
   stop: BOOLEAN

   new_loop
      -- create new empty loop (ie without job) and push it on the stack

   push_loop (l: LOOP_ITEM)
      -- l is restarted and pushed on the stack
      require
         l /= Void
      ensure
         current_loop = l

   run
      -- run current_loop (ie execute it's jobs)
      require
         current_loop /= Void
      ensure
         loop_stack.is_empty or stop

   add_job (j: JOB)
      -- Add some job to the current loop
      require
         j /= Void

   break
      -- Exit current loop
      require
         current_loop /= Void
      ensure
         current_loop /= old current_loop

   exit_all
      --TODO: Really needed feature ?
      require
         stop = False
      ensure
         stop = True

   current_loop: LOOP_ITEM
      --TODO: change this function into an attribute to be more efficient



end of LOOP_STACK