tuned enqueue: plain add_edge, acyclic not required here;
authorwenzelm
Tue, 16 Dec 2008 00:19:47 +0100
changeset 29117 5a79ec2fedfb
parent 29116 d9e423b9e707
child 29118 8f2481aa363d
child 29125 d41182a8135c
tuned enqueue: plain add_edge, acyclic not required here;
src/Pure/Concurrent/task_queue.ML
--- a/src/Pure/Concurrent/task_queue.ML	Mon Dec 15 22:07:30 2008 +0100
+++ b/src/Pure/Concurrent/task_queue.ML	Tue Dec 16 00:19:47 2008 +0100
@@ -62,6 +62,9 @@
 fun map_job (Task id) f (jobs: jobs) = IntGraph.map_node id (apsnd f) jobs;
 
 fun add_job (Task id) (Task dep) (jobs: jobs) =
+  IntGraph.add_edge (dep, id) jobs handle IntGraph.UNDEF _ => jobs;
+
+fun add_job_acyclic (Task id) (Task dep) (jobs: jobs) =
   IntGraph.add_edge_acyclic (dep, id) jobs handle IntGraph.UNDEF _ => jobs;
 
 fun check_job (jobs: jobs) (task as Task id) =
@@ -92,7 +95,7 @@
   in (task, make_queue groups' jobs' focus) end;
 
 fun depend deps task (Queue {groups, jobs, focus}) =
-  make_queue groups (fold (add_job task) deps jobs) focus;
+  make_queue groups (fold (add_job_acyclic task) deps jobs) focus;
 
 fun focus tasks (Queue {groups, jobs, ...}) =
   make_queue groups jobs (map_filter (check_job jobs) tasks);