
class TicketQueue {
Queue waiting = new Queue();
void enter(int ticket, key k) {
Request rq = new Request(ticket);
waiting.put(rq);
rq.bed.sleep(k);
}
void select(key k) {
Request rq = waiting.best();
rq.bed.wakeup(k);
}
void ok(int ticket) {
waiting.delete(ticket);
}
boolean iAmTheBest(int ticket) {
Request rq = waiting.best();
if (rq == null) return true;
return rq.ticket == ticket;
}
}