Library zoo_parabs.ws_deques_public__code
Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_saturn.ws_deque_2.
Require Import zoo_std.array.
Require Import zoo_std.random_round.
Require Import zoo.options.
Definition ws_deques_publicู create : val :=
๐ณ๐๐ป "sz" โ
arrayู unsafe_init "sz" ws_deque_2ู create.
Definition ws_deques_publicู size : val :=
arrayู size.
Definition ws_deques_publicู block : val :=
๐ณ๐๐ป "_t" "_i" โ
().
Definition ws_deques_publicู unblock : val :=
๐ณ๐๐ป "_t" "_i" โ
().
Definition ws_deques_publicู push : val :=
๐ณ๐๐ป "t" "i" "v" โ
๐น๐ฒ๐ "queue" = arrayู unsafe_get "t" "i" ๐ถ๐ป
ws_deque_2ู push "queue" "v".
Definition ws_deques_publicู pop : val :=
๐ณ๐๐ป "t" "i" โ
๐น๐ฒ๐ "queue" = arrayู unsafe_get "t" "i" ๐ถ๐ป
ws_deque_2ู pop "queue".
Definition ws_deques_publicู steal_to : val :=
๐ณ๐๐ป "t" "_i" "j" โ
๐น๐ฒ๐ "queue" = arrayู unsafe_get "t" "j" ๐ถ๐ป
ws_deque_2ู steal "queue".
Definition ws_deques_publicู steal_asโ : val :=
๐ฟ๐ฒ๐ฐ "steal_as" "t" "sz" "i" "round" "n" โ
๐ถ๐ณ "n" โค 0 ๐๐ต๐ฒ๐ป (
ยงNone
) ๐ฒ๐น๐๐ฒ (
๐น๐ฒ๐ "j" =
("i" + 1 + random_roundู next "round") ๐ฟ๐ฒ๐บ "sz"
๐ถ๐ป
๐บ๐ฎ๐๐ฐ๐ต
ws_deques_publicู steal_to "t" "i" "j"
๐๐ถ๐๐ต
| None โ
"steal_as" "t" "sz" "i" "round" ("n" - 1)
| โฝ ๐ฎ๐ "res" โ
"res"
๐ฒ๐ป๐ฑ
).
Definition ws_deques_publicู steal_as : val :=
๐ณ๐๐ป "t" "i" "round" โ
๐น๐ฒ๐ "sz" = ws_deques_publicู size "t" ๐ถ๐ป
ws_deques_publicู steal_asโ "t" "sz" "i" "round" ("sz" - 1).
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_saturn.ws_deque_2.
Require Import zoo_std.array.
Require Import zoo_std.random_round.
Require Import zoo.options.
Definition ws_deques_publicู create : val :=
๐ณ๐๐ป "sz" โ
arrayู unsafe_init "sz" ws_deque_2ู create.
Definition ws_deques_publicู size : val :=
arrayู size.
Definition ws_deques_publicู block : val :=
๐ณ๐๐ป "_t" "_i" โ
().
Definition ws_deques_publicู unblock : val :=
๐ณ๐๐ป "_t" "_i" โ
().
Definition ws_deques_publicู push : val :=
๐ณ๐๐ป "t" "i" "v" โ
๐น๐ฒ๐ "queue" = arrayู unsafe_get "t" "i" ๐ถ๐ป
ws_deque_2ู push "queue" "v".
Definition ws_deques_publicู pop : val :=
๐ณ๐๐ป "t" "i" โ
๐น๐ฒ๐ "queue" = arrayู unsafe_get "t" "i" ๐ถ๐ป
ws_deque_2ู pop "queue".
Definition ws_deques_publicู steal_to : val :=
๐ณ๐๐ป "t" "_i" "j" โ
๐น๐ฒ๐ "queue" = arrayู unsafe_get "t" "j" ๐ถ๐ป
ws_deque_2ู steal "queue".
Definition ws_deques_publicู steal_asโ : val :=
๐ฟ๐ฒ๐ฐ "steal_as" "t" "sz" "i" "round" "n" โ
๐ถ๐ณ "n" โค 0 ๐๐ต๐ฒ๐ป (
ยงNone
) ๐ฒ๐น๐๐ฒ (
๐น๐ฒ๐ "j" =
("i" + 1 + random_roundู next "round") ๐ฟ๐ฒ๐บ "sz"
๐ถ๐ป
๐บ๐ฎ๐๐ฐ๐ต
ws_deques_publicู steal_to "t" "i" "j"
๐๐ถ๐๐ต
| None โ
"steal_as" "t" "sz" "i" "round" ("n" - 1)
| โฝ ๐ฎ๐ "res" โ
"res"
๐ฒ๐ป๐ฑ
).
Definition ws_deques_publicู steal_as : val :=
๐ณ๐๐ป "t" "i" "round" โ
๐น๐ฒ๐ "sz" = ws_deques_publicู size "t" ๐ถ๐ป
ws_deques_publicู steal_asโ "t" "sz" "i" "round" ("sz" - 1).