src/Pure/Concurrent/task_queue.ML
changeset 29003 23cbaa9f9834
parent 28551 91eec4012bc5
child 29117 5a79ec2fedfb
     1.1 --- a/src/Pure/Concurrent/task_queue.ML	Sat Dec 06 00:01:57 2008 +0100
     1.2 +++ b/src/Pure/Concurrent/task_queue.ML	Sat Dec 06 00:02:11 2008 +0100
     1.3 @@ -8,6 +8,7 @@
     1.4  signature TASK_QUEUE =
     1.5  sig
     1.6    eqtype task
     1.7 +  val new_task: unit -> task
     1.8    val str_of_task: task -> string
     1.9    eqtype group
    1.10    val new_group: unit -> group
    1.11 @@ -34,8 +35,11 @@
    1.12  (* identifiers *)
    1.13  
    1.14  datatype task = Task of serial;
    1.15 +fun new_task () = Task (serial ());
    1.16 +
    1.17  fun str_of_task (Task i) = string_of_int i;
    1.18  
    1.19 +
    1.20  datatype group = Group of serial * bool ref;
    1.21  
    1.22  fun new_group () = Group (serial (), ref true);
    1.23 @@ -81,8 +85,7 @@
    1.24  
    1.25  fun enqueue (group as Group (gid, _)) deps pri job (Queue {groups, jobs, focus}) =
    1.26    let
    1.27 -    val id = serial ();
    1.28 -    val task = Task id;
    1.29 +    val task as Task id = new_task ();
    1.30      val groups' = Inttab.cons_list (gid, task) groups;
    1.31      val jobs' = jobs
    1.32        |> IntGraph.new_node (id, (group, Job (pri, job))) |> fold (add_job task) deps;