Ticket Masters
From Lyra
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);
}

