Search in sources :

Example 1 with COG

use of abs.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 TaskInfo schedule(final TaskScheduler scheduler, final List<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, TaskInfo> taskMap = new HashMap<>();
                    // Convert List<TaskInfo> to ArrayList<ABSProcess>
                    ArrayList<ABSProcess> processes = new ArrayList<>();
                    for (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;
        }
    });
}
Also used : ABSDynamicObject(abs.backend.java.lib.runtime.ABSDynamicObject) ABSClosure(abs.backend.java.lib.runtime.ABSClosure) HashMap(java.util.HashMap) SimpleTaskScheduler(abs.backend.java.scheduling.SimpleTaskScheduler) ArrayList(java.util.ArrayList) ABSValue(abs.backend.java.lib.types.ABSValue) SimpleTaskScheduler(abs.backend.java.scheduling.SimpleTaskScheduler) TaskScheduler(abs.backend.java.scheduling.TaskScheduler) ABSProcess(abs.backend.java.lib.types.ABSProcess) DynamicException(abs.backend.java.codegeneration.dynamic.DynamicException) TaskInfo(abs.backend.java.scheduling.SimpleTaskScheduler.TaskInfo) TaskSchedulingStrategy(abs.backend.java.scheduling.TaskSchedulingStrategy) COG(abs.backend.java.lib.runtime.COG)

Example 2 with COG

use of abs.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;
        }
    });
}
Also used : ABSDynamicObject(abs.backend.java.lib.runtime.ABSDynamicObject) ABSClosure(abs.backend.java.lib.runtime.ABSClosure) COG(abs.backend.java.lib.runtime.COG) ABSDynamicClass(abs.backend.java.lib.runtime.ABSDynamicClass)

Example 3 with COG

use of abs.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");
}
Also used : COG(abs.backend.java.lib.runtime.COG)

Aggregations

COG (abs.backend.java.lib.runtime.COG)3 ABSClosure (abs.backend.java.lib.runtime.ABSClosure)2 ABSDynamicObject (abs.backend.java.lib.runtime.ABSDynamicObject)2 DynamicException (abs.backend.java.codegeneration.dynamic.DynamicException)1 ABSDynamicClass (abs.backend.java.lib.runtime.ABSDynamicClass)1 ABSProcess (abs.backend.java.lib.types.ABSProcess)1 ABSValue (abs.backend.java.lib.types.ABSValue)1 SimpleTaskScheduler (abs.backend.java.scheduling.SimpleTaskScheduler)1 TaskInfo (abs.backend.java.scheduling.SimpleTaskScheduler.TaskInfo)1 TaskScheduler (abs.backend.java.scheduling.TaskScheduler)1 TaskSchedulingStrategy (abs.backend.java.scheduling.TaskSchedulingStrategy)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1