Library zoo_saturn.bag_1__code
Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_std.array.
Require Import zoo_std.domain.
Require Import zoo_std.goption.
Require Import zoo.options.
Notation "'bag_1ู data'" := (
in_type "zoo_saturn.bag_1.t" 0
)(in custom zoo_field
).
Notation "'bag_1ู front'" := (
in_type "zoo_saturn.bag_1.t" 1
)(in custom zoo_field
).
Notation "'bag_1ู back'" := (
in_type "zoo_saturn.bag_1.t" 2
)(in custom zoo_field
).
Definition bag_1ู create : val :=
๐ณ๐๐ป "sz" โ
{ arrayู unsafe_init
"sz"
(๐ณ๐๐ป โฝ โ ๐ฟ๐ฒ๐ณ ยงgoptionู None),
0,
0
}.
Definition bag_1ู pushโ : val :=
๐ฟ๐ฒ๐ฐ "push" "slot" "o" โ
๐ถ๐ณ
ยฌ ๐ฐ๐ฎ๐ "slot".[contents] ยงgoptionู None "o"
๐๐ต๐ฒ๐ป (
domainู yield () โฎ
"push" "slot" "o"
).
Definition bag_1ู push : val :=
๐ณ๐๐ป "t" "v" โ
๐น๐ฒ๐ "data" = "t".{bag_1ู data} ๐ถ๐ป
๐น๐ฒ๐ "i" =
๐ณ๐ฎ๐ฎ "t".[bag_1ู back] 1 ๐ฟ๐ฒ๐บ arrayู size "data"
๐ถ๐ป
bag_1ู pushโ (arrayู unsafe_get "data" "i") โgoptionู Some[ "v" ].
Definition bag_1ู popโ : val :=
๐ฟ๐ฒ๐ฐ "pop" "slot" โ
๐บ๐ฎ๐๐ฐ๐ต !"slot" ๐๐ถ๐๐ต
| goptionู None โ
"pop" "slot"
| goptionู Some "v" ๐ฎ๐ "o" โ
๐ถ๐ณ
๐ฐ๐ฎ๐ "slot".[contents] "o" ยงgoptionู None
๐๐ต๐ฒ๐ป (
"v"
) ๐ฒ๐น๐๐ฒ (
domainู yield () โฎ
"pop" "slot"
)
๐ฒ๐ป๐ฑ.
Definition bag_1ู pop : val :=
๐ณ๐๐ป "t" โ
๐น๐ฒ๐ "data" = "t".{bag_1ู data} ๐ถ๐ป
๐น๐ฒ๐ "i" =
๐ณ๐ฎ๐ฎ "t".[bag_1ู front] 1 ๐ฟ๐ฒ๐บ arrayู size "data"
๐ถ๐ป
bag_1ู popโ (arrayู unsafe_get "data" "i").
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_std.array.
Require Import zoo_std.domain.
Require Import zoo_std.goption.
Require Import zoo.options.
Notation "'bag_1ู data'" := (
in_type "zoo_saturn.bag_1.t" 0
)(in custom zoo_field
).
Notation "'bag_1ู front'" := (
in_type "zoo_saturn.bag_1.t" 1
)(in custom zoo_field
).
Notation "'bag_1ู back'" := (
in_type "zoo_saturn.bag_1.t" 2
)(in custom zoo_field
).
Definition bag_1ู create : val :=
๐ณ๐๐ป "sz" โ
{ arrayู unsafe_init
"sz"
(๐ณ๐๐ป โฝ โ ๐ฟ๐ฒ๐ณ ยงgoptionู None),
0,
0
}.
Definition bag_1ู pushโ : val :=
๐ฟ๐ฒ๐ฐ "push" "slot" "o" โ
๐ถ๐ณ
ยฌ ๐ฐ๐ฎ๐ "slot".[contents] ยงgoptionู None "o"
๐๐ต๐ฒ๐ป (
domainู yield () โฎ
"push" "slot" "o"
).
Definition bag_1ู push : val :=
๐ณ๐๐ป "t" "v" โ
๐น๐ฒ๐ "data" = "t".{bag_1ู data} ๐ถ๐ป
๐น๐ฒ๐ "i" =
๐ณ๐ฎ๐ฎ "t".[bag_1ู back] 1 ๐ฟ๐ฒ๐บ arrayู size "data"
๐ถ๐ป
bag_1ู pushโ (arrayู unsafe_get "data" "i") โgoptionู Some[ "v" ].
Definition bag_1ู popโ : val :=
๐ฟ๐ฒ๐ฐ "pop" "slot" โ
๐บ๐ฎ๐๐ฐ๐ต !"slot" ๐๐ถ๐๐ต
| goptionู None โ
"pop" "slot"
| goptionู Some "v" ๐ฎ๐ "o" โ
๐ถ๐ณ
๐ฐ๐ฎ๐ "slot".[contents] "o" ยงgoptionู None
๐๐ต๐ฒ๐ป (
"v"
) ๐ฒ๐น๐๐ฒ (
domainู yield () โฎ
"pop" "slot"
)
๐ฒ๐ป๐ฑ.
Definition bag_1ู pop : val :=
๐ณ๐๐ป "t" โ
๐น๐ฒ๐ "data" = "t".{bag_1ู data} ๐ถ๐ป
๐น๐ฒ๐ "i" =
๐ณ๐ฎ๐ฎ "t".[bag_1ู front] 1 ๐ฟ๐ฒ๐บ arrayู size "data"
๐ถ๐ป
bag_1ู popโ (arrayู unsafe_get "data" "i").