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