Ticket Masters

From Lyra

Jump to: navigation, search

This is the simplified ticket masters example in the Introduction. This example uses one rendezvous for all transactions.


template <int age, int wealth>
module customer(oi<int, int> ticket)
{
   reg int money;
   reg int t[wealth];
init { money = wealth; }
fsm { init S0: when (ticket, money > 0) { ticket.write(age); t[wealth - money] = ticket.read(); money = money - 1; goto S1; }
state S1: goto S0; } }
template <int tbase>
module ticket_master(io<int, int> ticket)
{
   reg int money;
   reg int t[10];
init { money = 0; t = {tbase, tbase+1, tbase+2, tbase+3, tbase+4, tbase+5, tbase+6, tbase+7, tbase+8, tbase+9}; }
fsm { init S: when (ticket, ticket.read() > 18, money < 10) { ticket.write(t[money]); money = money + 1; goto S; } } }
module toplevel                                               
{
   rendv ticket;
ticket_master #<0> t1(ticket); ticket_master #<10> t2(ticket);
customer #<20, 8> c1(ticket); customer #<25, 12> c2(ticket); customer #<17, 2> c3(ticket); }
Personal tools