class interface SIMPLE_BACKGROUND_JOB
-- Describe job to be executed in the background, when there nothing
-- more important to do. Such job is ready to run at any time.
creation
set_work (t: FUNCTION[ANY,TUPLE,BOOLEAN]; tr: PROCEDURE[ANY,TUPLE]; prio: INTEGER)
-- t has to return True while continue
require
t /= Void;
prio /= Minimum_integer
ensure
priority = prio
feature(s) from JOB
priority: INTEGER
-- Never change priority after job inserted in loop_item.
-- Priority should only be set at creation time.
feature(s) from JOB
prepare (ready: READY_DESCRIPTION)
-- use ready to descibe condition that make this job ready
-- to continue.
require
ready /= Void;
not ready.queryable
is_ready (ready: READY_DESCRIPTION): BOOLEAN
-- check if this job is ready to continue his work
require
ready /= Void;
ready.queryable
continue
-- Continue to do the job
-- The work to do has to be small work and non blocking, it
-- will continue on next call
done: BOOLEAN
-- done returns True when the job is finished. Then the
-- job may be restart(ed) if it need to run again.
restart
-- Configure the job like the initial state.
-- Example: when some window dialog appears second time, all
-- jobs from this window are restarted.
require
done
ensure
not done
infix "<" (other: JOB): BOOLEAN
feature(s) from SIMPLE_BACKGROUND_JOB
set_work (t: FUNCTION[ANY,TUPLE,BOOLEAN]; tr: PROCEDURE[ANY,TUPLE]; prio: INTEGER)
-- t has to return True while continue
require
t /= Void;
prio /= Minimum_integer
ensure
priority = prio
invariant
priority /= Minimum_integer;
end of SIMPLE_BACKGROUND_JOB