All pastes #2092543 Raw Edit

Anonymous

public text v1 · immutable
#2092543 ·published 2011-10-22 14:22 UTC
rendered paste body
class Baldo extends Process {
	public static final int NCS = 0;
	public static final int CS = 1;
	
	class REQUEST extends Message {
		public final int id;
		public REQUEST(int id) {this.id = id;}
		public String toString() {return "REQUEST, "+id;}
	}
		
	public int stato;
	public final List<Integer> pending = new ArrayList<Integer>(p.length);
	public boolean waiting;
	public int vicino;
		
	public void init() {
		System.out.println(this + " init");
		stato = NCS;
		pending.clear();
		waiting = false;
		vicino = (id + 1) % p.length;
	}
		
	public void requestCS() {
		waiting = true;
		send(vicino, new REQUEST(id));
	}

	public void exitCS() {
		waiting = false;
		stato = NCS;
		for(int id : pending) {
			pending.remove((Object)id);
			send(vicino, new REQUEST(id));
		}
	}
		
	public void recv(int src, Message m) {
		if(m instanceof REQUEST)
			recv(src, (REQUEST)m);
	}
	
	public void recv(int src, REQUEST m) {
		if(m.id == id) {
			stato = CS;
			System.out.println(this + " in CS!!!");
			exitCS();
		} else {
			if(waiting == false) {
				send(vicino, new REQUEST(m.id));
			} else {
				if(stato == NCS && m.id < id) {
					send(vicino, new REQUEST(m.id));
				} else {
					pending.add(m.id);
				}
			}
		}
	}
}