package dtests;
import cute.dcute.Actor;
import cute.dcute.Message;
import cute.dcute.DScheduler;
import cute.Cute;
/**
* .
* User: ksen
* Date: Oct 11, 2005
* Time: 5:49:52 PM
* To change this template use File | Settings | File Templates.
*/
class SpinSMsg extends Message {
public int v;
public SpinSMsg(int v) {
this.v = v;
}
}
class PLeft extends Actor{
private Actor out;
public PLeft(Actor out) {
this.out = out;
}
public void init() {
int counter = 0;
int seed = 15;
while(true){
send(out,1,new SpinSMsg(Cute.input.Integer()));
counter++;
if(counter==SpinSort.N){
return;
}
seed = (seed*3 +14)%100;
}
}
public void receive(Message m) {
}
}
class PMiddle extends Actor {
private Actor out;
private int counter;
public int myval;
private int nextval;
private boolean first = true;
public PMiddle(Actor out,int procnum) {
this.out = out;
counter = SpinSort.N - procnum;
}
public void receive(Message m) {
SpinSMsg msg = (SpinSMsg)m;
if(first){
myval=msg.v;
first = false;
} else if(counter>0){
nextval = msg.v;
if(nextval>=myval)
send(out,1,new SpinSMsg(nextval));
else {
send(out,1,new SpinSMsg(myval));
myval = nextval;
}
counter--;
}
}
}
public class SpinSort {
public static int N = 5;
public static void main(String[] args) {
N = Cute.N;
Actor tmp = null;
PMiddle[] a = new PMiddle[N];
for(int i=0;i<N;i++){
tmp = a[N-i-1]= new PMiddle(tmp,N-i);
}
tmp = new PLeft(tmp);
((PLeft)tmp).init();
DScheduler.sched.start();
for(int j=0;j<N-1;j++){
Cute.Assert(a[j].myval<=a[j+1].myval);
}
}
}