use of org.abs_models.backend.java.lib.runtime.COG in project abstools by abstools.
the class Cog method setupAPI.
private static void setupAPI() {
thisClass.setName("Cog");
thisClass.addMethod(/*List<Process>*/
"getQueue", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
// TODO
return ABSUnit.UNIT;
}
});
thisClass.addMethod(/*ABSUnit*/
"info", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
COG cog = (COG) t.getFieldValue_Internal("cog");
System.out.println("Cog scheduler " + cog.getScheduler().toString());
if (cog.getScheduler() instanceof SimpleTaskScheduler) {
SimpleTaskScheduler sch = (SimpleTaskScheduler) cog.getScheduler();
TaskSchedulingStrategy strat = sch.getSchedulingStrategy();
System.out.println("Strategy " + strat);
}
return ABSUnit.UNIT;
}
});
thisClass.addMethod(/*ABSUnit*/
"setScheduler", new ABSClosure() {
@Override
public ABSValue exec(ABSDynamicObject t, ABSValue... params) {
COG cog = (COG) t.getFieldValue_Internal("cog");
if (!(cog.getScheduler() instanceof SimpleTaskScheduler)) {
throw new DynamicException("For user-defined scheduling to work, the Scheduler must be an instance of " + SimpleTaskScheduler.class.getName() + " (use \"-taskscheduler=simple\")");
}
// The user-defined scheduler
final ABSDynamicObject userScheduler = (ABSDynamicObject) params[0];
// Create a new scheduling strategy that invokes the user-defined scheduler's "schedule" method
// - convert TaskSchedulingStrategy's List<TaskInfo> to ProcessScheduler's List<Process>
// - convert returned Process to TaskInfo.
// custom TaskSchedulingStrategy
TaskSchedulingStrategy strategy = new TaskSchedulingStrategy() {
@Override
public synchronized SimpleTaskScheduler.TaskInfo schedule(final TaskScheduler scheduler, final List<SimpleTaskScheduler.TaskInfo> schedulableTasks) {
System.out.println("Scheduling (" + schedulableTasks.size() + " processes in queue)...");
// Remember TaskInfos based on their Pids to speed things up a little
HashMap<Long, SimpleTaskScheduler.TaskInfo> taskMap = new HashMap<>();
// Convert List<TaskInfo> to ArrayList<ABSProcess>
ArrayList<ABSProcess> processes = new ArrayList<>();
for (SimpleTaskScheduler.TaskInfo task : schedulableTasks) {
taskMap.put(task.id, task);
// TODO set: pid, method, arrival, cost, deadline, start, finish, critical, value
ABSProcess proc = new ABSProcess(task.task.getID(), task.task.getCall().methodName(), 0, 0, 0, 0, 0, false, 0);
processes.add(proc);
System.out.println("\t" + proc.toString());
}
// FIXME
return schedulableTasks.get(0);
}
};
// Connect the strategy to the cog's scheduler
System.out.println(cog.toString() + ": Setting TaskSchedulingStrategy to: " + userScheduler.getClassName());
// move the userScheduler object to the Cog
// this WILL cause problems if the user associates the scheduler with multiple cogs!!
// userScheduler.setCOG(cog);
SimpleTaskScheduler scheduler = (SimpleTaskScheduler) cog.getScheduler();
scheduler.setSchedulingStrategy(strategy);
return ABSUnit.UNIT;
}
});
}
use of org.abs_models.backend.java.lib.runtime.COG in project abstools by abstools.
the class SwingWrapperProxy method showOptions.
@Override
public synchronized void showOptions(ScheduleOptions options) {
// System.out.println("SchedulerGUI: showing options...");
int i = 0;
for (BtnLine l : btnLines.values()) {
l.btn.updateAction(null);
}
for (ScheduleAction a : options.allOptions()) {
i++;
COG c = a.getCOG();
BtnLine line = btnLines.get(c);
if (line == null) {
line = new BtnLine(a);
btnLines.put(c, line);
} else {
line.btn.updateAction(a);
}
}
// / System.out.println("SchedulerGUI: "+i+" options showed");
}
use of org.abs_models.backend.java.lib.runtime.COG in project abstools by abstools.
the class ObjectMirror method setupAPI.
public static void setupAPI() {
thisClass.setName("ObjectMirror");
/*
* getClassName: get name of object's class
*/
thisClass.addMethod(/*ABSString*/
"getClassName", new ABSClosure() {
@Override
public ABSString exec(ABSDynamicObject t, ABSValue... params) {
ABSString name;
name = ABSString.fromString(((ABSDynamicObject) t.dispatch("getObject")).getClassName());
return name;
}
});
/*
* getClass: get class of object
*/
thisClass.addMethod(/*ABSDynamicObject<Clazz>*/
"getClass", new ABSClosure() {
@Override
public ABSDynamicObject exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicClass cls = ((ABSDynamicObject) t.dispatch("getObject")).getClazz();
ABSDynamicObject o = new ABSDynamicObject(Clazz.singleton());
o.setFieldValue("class", cls);
return o;
}
});
/*
* setClass: set new class for object
*/
thisClass.addMethod(/*Unit*/
"setClass", new ABSClosure() {
@Override
public ABSUnit exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicClass cls = (ABSDynamicClass) ((ABSDynamicObject) params[0]).getFieldValue_Internal("class");
((ABSDynamicObject) t.dispatch("getObject")).setClazz(cls);
return ABSUnit.UNIT;
}
});
/*
* respondsTo: find out whether object responds to given method
*/
thisClass.addMethod(/*ABSBool*/
"respondsTo", new ABSClosure() {
@Override
public ABSBool exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicClass cls = (ABSDynamicClass) ((ABSDynamicObject) t.dispatch("getObject")).getClazz();
return ABSBool.fromBoolean(cls.hasMethod(((ABSString) params[0]).getString()));
}
});
// TODO: getFieldValue(), setFieldValue()
thisClass.addMethod(/*ABSDynamicObject<COG>*/
"getCog", new ABSClosure() {
@Override
public ABSDynamicObject exec(ABSDynamicObject t, ABSValue... params) {
COG cog = ((ABSDynamicObject) t.dispatch("getObject")).getCOG();
ABSDynamicObject o = new ABSDynamicObject(Cog.singleton());
o.setFieldValue("cog", cog);
return o;
}
});
thisClass.addMethod(/*Unit*/
"setCog", new ABSClosure() {
@Override
public ABSUnit exec(ABSDynamicObject t, ABSValue... params) {
((ABSDynamicObject) t.dispatch("getObject")).setCOG((COG) params[0]);
return ABSUnit.UNIT;
}
});
/*
* getObject: obtain the mirrored object
*/
thisClass.addMethod(/*ABSDynamicObject*/
"getObject", new ABSClosure() {
@Override
public ABSDynamicObject exec(ABSDynamicObject t, ABSValue... params) {
ABSDynamicObject object;
object = (ABSDynamicObject) t.getFieldValue_Internal("object");
return object;
}
});
}
Aggregations