Library zoo_saturn.inf_queue_mpmc_1__code
Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_std.domain.
Require Import zoo_std.inf_array.
Require Import zoo_std.int.
Require Import zoo_std.optional.
Require Import zoo.options.
Notation "'inf_queue_mpmc_1ู data'" := (
in_type "zoo_saturn.inf_queue_mpmc_1.t" 0
)(in custom zoo_field
).
Notation "'inf_queue_mpmc_1ู front'" := (
in_type "zoo_saturn.inf_queue_mpmc_1.t" 1
)(in custom zoo_field
).
Notation "'inf_queue_mpmc_1ู back'" := (
in_type "zoo_saturn.inf_queue_mpmc_1.t" 2
)(in custom zoo_field
).
Definition inf_queue_mpmc_1ู create : val :=
๐ณ๐๐ป โฝ โ
{ inf_arrayู create ยงoptionalู Nothing, 0, 0 }.
Definition inf_queue_mpmc_1ู size : val :=
๐ฟ๐ฒ๐ฐ "size" "t" โ
๐น๐ฒ๐ "front" = "t".{inf_queue_mpmc_1ู front} ๐ถ๐ป
๐น๐ฒ๐ "proph" = ๐ฝ๐ฟ๐ผ๐ฝ๐ต ๐ถ๐ป
๐น๐ฒ๐ "back" = "t".{inf_queue_mpmc_1ู back} ๐ถ๐ป
๐ถ๐ณ
(๐น๐ฒ๐ "@tmp" = "t".{inf_queue_mpmc_1ู front} ๐ถ๐ป
๐ฟ๐ฒ๐๐ผ๐น๐๐ฒ ๐๐ธ๐ถ๐ฝ "proph" "@tmp" โฎ
"@tmp")
==
"front"
๐๐ต๐ฒ๐ป (
intู positive_part ("back" - "front")
) ๐ฒ๐น๐๐ฒ (
"size" "t"
).
Definition inf_queue_mpmc_1ู is_empty : val :=
๐ณ๐๐ป "t" โ
inf_queue_mpmc_1ู size "t" == 0.
Definition inf_queue_mpmc_1ู is_empty_weak : val :=
๐ณ๐๐ป "t" โ
๐น๐ฒ๐ "front" = "t".{inf_queue_mpmc_1ู front} ๐ถ๐ป
๐น๐ฒ๐ "back" = "t".{inf_queue_mpmc_1ู back} ๐ถ๐ป
"back" โค "front".
Definition inf_queue_mpmc_1ู push : val :=
๐ณ๐๐ป "t" "v" โ
๐น๐ฒ๐ "i" = ๐ณ๐ฎ๐ฎ "t".[inf_queue_mpmc_1ู back] 1 ๐ถ๐ป
inf_arrayู set
"t".{inf_queue_mpmc_1ู data}
"i"
โoptionalู Something( "v" ).
Definition inf_queue_mpmc_1ู popโ : val :=
๐ฟ๐ฒ๐ฐ "pop" "t" "i" โ
๐บ๐ฎ๐๐ฐ๐ต
inf_arrayู get "t".{inf_queue_mpmc_1ู data} "i"
๐๐ถ๐๐ต
| optionalู Nothing โ
domainู yield () โฎ
"pop" "t" "i"
| optionalู Anything โ
๐ณ๐ฎ๐ถ๐น
| optionalู Something "v" โ
inf_arrayู set "t".{inf_queue_mpmc_1ู data} "i" ยงoptionalู Anything โฎ
"v"
๐ฒ๐ป๐ฑ.
Definition inf_queue_mpmc_1ู pop : val :=
๐ณ๐๐ป "t" โ
๐น๐ฒ๐ "i" = ๐ณ๐ฎ๐ฎ "t".[inf_queue_mpmc_1ู front] 1 ๐ถ๐ป
inf_queue_mpmc_1ู popโ "t" "i".
Definition inf_queue_mpmc_1ู try_pop : val :=
๐ณ๐๐ป "t" โ
๐ถ๐ณ inf_queue_mpmc_1ู is_empty_weak "t" ๐๐ต๐ฒ๐ป (
ยงNone
) ๐ฒ๐น๐๐ฒ (
โSome( inf_queue_mpmc_1ู pop "t" )
).
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_std.domain.
Require Import zoo_std.inf_array.
Require Import zoo_std.int.
Require Import zoo_std.optional.
Require Import zoo.options.
Notation "'inf_queue_mpmc_1ู data'" := (
in_type "zoo_saturn.inf_queue_mpmc_1.t" 0
)(in custom zoo_field
).
Notation "'inf_queue_mpmc_1ู front'" := (
in_type "zoo_saturn.inf_queue_mpmc_1.t" 1
)(in custom zoo_field
).
Notation "'inf_queue_mpmc_1ู back'" := (
in_type "zoo_saturn.inf_queue_mpmc_1.t" 2
)(in custom zoo_field
).
Definition inf_queue_mpmc_1ู create : val :=
๐ณ๐๐ป โฝ โ
{ inf_arrayู create ยงoptionalู Nothing, 0, 0 }.
Definition inf_queue_mpmc_1ู size : val :=
๐ฟ๐ฒ๐ฐ "size" "t" โ
๐น๐ฒ๐ "front" = "t".{inf_queue_mpmc_1ู front} ๐ถ๐ป
๐น๐ฒ๐ "proph" = ๐ฝ๐ฟ๐ผ๐ฝ๐ต ๐ถ๐ป
๐น๐ฒ๐ "back" = "t".{inf_queue_mpmc_1ู back} ๐ถ๐ป
๐ถ๐ณ
(๐น๐ฒ๐ "@tmp" = "t".{inf_queue_mpmc_1ู front} ๐ถ๐ป
๐ฟ๐ฒ๐๐ผ๐น๐๐ฒ ๐๐ธ๐ถ๐ฝ "proph" "@tmp" โฎ
"@tmp")
==
"front"
๐๐ต๐ฒ๐ป (
intู positive_part ("back" - "front")
) ๐ฒ๐น๐๐ฒ (
"size" "t"
).
Definition inf_queue_mpmc_1ู is_empty : val :=
๐ณ๐๐ป "t" โ
inf_queue_mpmc_1ู size "t" == 0.
Definition inf_queue_mpmc_1ู is_empty_weak : val :=
๐ณ๐๐ป "t" โ
๐น๐ฒ๐ "front" = "t".{inf_queue_mpmc_1ู front} ๐ถ๐ป
๐น๐ฒ๐ "back" = "t".{inf_queue_mpmc_1ู back} ๐ถ๐ป
"back" โค "front".
Definition inf_queue_mpmc_1ู push : val :=
๐ณ๐๐ป "t" "v" โ
๐น๐ฒ๐ "i" = ๐ณ๐ฎ๐ฎ "t".[inf_queue_mpmc_1ู back] 1 ๐ถ๐ป
inf_arrayู set
"t".{inf_queue_mpmc_1ู data}
"i"
โoptionalู Something( "v" ).
Definition inf_queue_mpmc_1ู popโ : val :=
๐ฟ๐ฒ๐ฐ "pop" "t" "i" โ
๐บ๐ฎ๐๐ฐ๐ต
inf_arrayู get "t".{inf_queue_mpmc_1ู data} "i"
๐๐ถ๐๐ต
| optionalู Nothing โ
domainู yield () โฎ
"pop" "t" "i"
| optionalู Anything โ
๐ณ๐ฎ๐ถ๐น
| optionalู Something "v" โ
inf_arrayู set "t".{inf_queue_mpmc_1ู data} "i" ยงoptionalู Anything โฎ
"v"
๐ฒ๐ป๐ฑ.
Definition inf_queue_mpmc_1ู pop : val :=
๐ณ๐๐ป "t" โ
๐น๐ฒ๐ "i" = ๐ณ๐ฎ๐ฎ "t".[inf_queue_mpmc_1ู front] 1 ๐ถ๐ป
inf_queue_mpmc_1ู popโ "t" "i".
Definition inf_queue_mpmc_1ู try_pop : val :=
๐ณ๐๐ป "t" โ
๐ถ๐ณ inf_queue_mpmc_1ู is_empty_weak "t" ๐๐ต๐ฒ๐ป (
ยงNone
) ๐ฒ๐น๐๐ฒ (
โSome( inf_queue_mpmc_1ู pop "t" )
).