package parallel_map;
import java.util.Vector;
import xsched.Task;
public class ParallelMapOperation {
Vector<String> out = new Vector<String>();
public void xschedTask_process(Task<String> now, Object data) {
System.out.println("processing " + data);
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
now.setResult(data.toString());
if(data.equals(15)) {
System.out.println("error about to happen");
}
}
public void xschedTask_write(Task<Void> now, Task<String> processTask) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
System.out.println("Writing data " + processTask.result());
out.add(processTask.result());
}
public void xschedMainTask_writeToOut(Task<Void> now, Vector<Object> input) {
Task<?> lastProcess = now;
Task<?> lastWrite = now;
for(Object data : input) {
Task<String> process;
this.xschedTask_process(process = new Task<String>(), data);
//xsched.Runtime.scheduleNormalTask(this, "xschedTask_process", new Object[] {process = new Task<String>(), data});
Task<Void> write;
this.xschedTask_write(write = new Task<Void>(), process);
//xsched.Runtime.scheduleNormalTask(this, "xschedTask_write", new Object[] { write = new Task<Void>(), process});
lastProcess.hb(process);
process.hb(write);
lastWrite.hb(write);
lastProcess = process;
lastWrite = write;
}
}
public static void main(String[] args) {
System.out.println("Starting ParallelMapOperation");
Vector<Object> v = new Vector<Object>();
for(int i = 0; i < 100; i++) {
v.add(new Integer(i));
}
v.add(new Boolean(false));
v.add(new String("Hello world!"));
ParallelMapOperation map = new ParallelMapOperation();
map.xschedMainTask_writeToOut(new Task<Void>(), v);
//xsched.Runtime.scheduleMainTask(map, "xschedMainTask_writeToOut", new Object[] {new Task<Void>(), v});
System.out.println(map.out);
}
}