mirror of
https://github.com/LCPQ/quantum_package
synced 2024-12-23 04:43:50 +01:00
Queuing_system.ml pops from the back and adds to the front
This commit is contained in:
parent
d7b40e6d1f
commit
85596d9e7a
@ -3,7 +3,8 @@ module TasksMap = Map.Make (Id.Task)
|
|||||||
module ClientsSet = Set.Make (Id.Client)
|
module ClientsSet = Set.Make (Id.Client)
|
||||||
|
|
||||||
type t =
|
type t =
|
||||||
{ queued : Id.Task.t list ;
|
{ queued_front : Id.Task.t list ;
|
||||||
|
queued_back : Id.Task.t list ;
|
||||||
running : Id.Client.t RunningMap.t;
|
running : Id.Client.t RunningMap.t;
|
||||||
tasks : string TasksMap.t;
|
tasks : string TasksMap.t;
|
||||||
clients : ClientsSet.t;
|
clients : ClientsSet.t;
|
||||||
@ -18,7 +19,8 @@ type t =
|
|||||||
|
|
||||||
|
|
||||||
let create () =
|
let create () =
|
||||||
{ queued = [] ;
|
{ queued_front = [] ;
|
||||||
|
queued_back = [] ;
|
||||||
running = RunningMap.empty ;
|
running = RunningMap.empty ;
|
||||||
tasks = TasksMap.empty;
|
tasks = TasksMap.empty;
|
||||||
clients = ClientsSet.empty;
|
clients = ClientsSet.empty;
|
||||||
@ -38,7 +40,7 @@ let add_task ~task q =
|
|||||||
q.next_task_id
|
q.next_task_id
|
||||||
in
|
in
|
||||||
{ q with
|
{ q with
|
||||||
queued = task_id :: q.queued ;
|
queued_front = task_id :: q.queued_front ;
|
||||||
tasks = TasksMap.add task_id task q.tasks;
|
tasks = TasksMap.add task_id task q.tasks;
|
||||||
next_task_id = Id.Task.increment task_id ;
|
next_task_id = Id.Task.increment task_id ;
|
||||||
number_of_queued = q.number_of_queued + 1;
|
number_of_queued = q.number_of_queued + 1;
|
||||||
@ -60,15 +62,21 @@ let add_client q =
|
|||||||
|
|
||||||
|
|
||||||
let pop_task ~client_id q =
|
let pop_task ~client_id q =
|
||||||
let { queued ; running ; _ } =
|
let { queued_front ; queued_back ; running ; _ } =
|
||||||
q
|
q
|
||||||
in
|
in
|
||||||
assert (ClientsSet.mem client_id q.clients);
|
assert (ClientsSet.mem client_id q.clients);
|
||||||
match queued with
|
let queued_front', queued_back' =
|
||||||
|
match queued_front, queued_back with
|
||||||
|
| (l, []) -> ( [], List.rev l)
|
||||||
|
| t -> t
|
||||||
|
in
|
||||||
|
match queued_back' with
|
||||||
| task_id :: new_queue ->
|
| task_id :: new_queue ->
|
||||||
let new_q =
|
let new_q =
|
||||||
{ q with
|
{ q with
|
||||||
queued = new_queue ;
|
queued_front= queued_front' ;
|
||||||
|
queued_back = new_queue ;
|
||||||
running = RunningMap.add task_id client_id running;
|
running = RunningMap.add task_id client_id running;
|
||||||
number_of_queued = q.number_of_queued - 1;
|
number_of_queued = q.number_of_queued - 1;
|
||||||
number_of_running = q.number_of_running + 1;
|
number_of_running = q.number_of_running + 1;
|
||||||
@ -139,9 +147,10 @@ let number_of_clients q =
|
|||||||
|
|
||||||
|
|
||||||
let to_string qs =
|
let to_string qs =
|
||||||
let { queued ; running ; tasks ; _ } = qs in
|
let { queued_back ; queued_front ; running ; tasks ; _ } = qs in
|
||||||
let q =
|
let q =
|
||||||
List.map Id.Task.to_string queued
|
(List.map Id.Task.to_string queued_front) @
|
||||||
|
(List.map Id.Task.to_string @@ List.rev queued_back)
|
||||||
|> String.concat " ; "
|
|> String.concat " ; "
|
||||||
and r =
|
and r =
|
||||||
RunningMap.bindings running
|
RunningMap.bindings running
|
||||||
@ -181,6 +190,7 @@ let test () =
|
|||||||
| _ -> assert false
|
| _ -> assert false
|
||||||
in
|
in
|
||||||
Printf.printf "Task_id : %d \t\t Task : %s\n" task_id task_content;
|
Printf.printf "Task_id : %d \t\t Task : %s\n" task_id task_content;
|
||||||
|
to_string q |> print_endline ;
|
||||||
let q, task_id, task_content =
|
let q, task_id, task_content =
|
||||||
match pop_task ~client_id q with
|
match pop_task ~client_id q with
|
||||||
| q, Some x, Some y -> q, Id.Task.to_int x, y
|
| q, Some x, Some y -> q, Id.Task.to_int x, y
|
||||||
|
@ -3,7 +3,8 @@ module TasksMap : Map.S with type key = Id.Task.t
|
|||||||
module ClientsSet : Set.S with type elt = Id.Client.t
|
module ClientsSet : Set.S with type elt = Id.Client.t
|
||||||
|
|
||||||
type t = {
|
type t = {
|
||||||
queued : Id.Task.t list ;
|
queued_front : Id.Task.t list ;
|
||||||
|
queued_back : Id.Task.t list ;
|
||||||
running : Id.Client.t RunningMap.t ;
|
running : Id.Client.t RunningMap.t ;
|
||||||
tasks : string TasksMap.t ;
|
tasks : string TasksMap.t ;
|
||||||
clients : ClientsSet.t ;
|
clients : ClientsSet.t ;
|
||||||
@ -60,4 +61,3 @@ val to_string : t -> string
|
|||||||
val test : unit -> unit
|
val test : unit -> unit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user