Library examples.vertex_simple__code

Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_parabs.pool.
Require Import zoo_parabs.vertex.
Require Import zoo_std.ivar_4.
Require Import zoo.options.

Definition vertex_simple٠main : val :=
  𝗳𝘂𝗻 "num_worker" "a" "b" "c" "d"
    𝗹𝗲𝘁 "ivar" = ivar_4٠create () 𝗶𝗻
    𝗹𝗲𝘁 "vtx_a" =
      vertex٠create' (𝗳𝘂𝗻 "_ctx" "a" ())
    𝗶𝗻
    𝗹𝗲𝘁 "vtx_b" =
      vertex٠create' (𝗳𝘂𝗻 "_ctx" "b" ())
    𝗶𝗻
    𝗹𝗲𝘁 "vtx_c" =
      vertex٠create' (𝗳𝘂𝗻 "_ctx" "c" ())
    𝗶𝗻
    𝗹𝗲𝘁 "vtx_d" =
      vertex٠create'
        (𝗳𝘂𝗻 "ctx" "d" ()
                               ivar_4٠notify "ivar" "ctx" ())
    𝗶𝗻
    vertex٠precede "vtx_a" "vtx_b"
    vertex٠precede "vtx_a" "vtx_c"
    vertex٠precede "vtx_b" "vtx_d"
    vertex٠precede "vtx_c" "vtx_d"
    pool٠run
      "num_worker"
      (𝗳𝘂𝗻 "ctx"
         vertex٠release "ctx" "vtx_d"
         vertex٠release "ctx" "vtx_c"
         vertex٠release "ctx" "vtx_b"
         vertex٠release "ctx" "vtx_a"
         pool٠wait_ivar "ctx" "ivar").