Changeset 4089


Ignore:
Timestamp:
Nov 9, 2009, 7:51:44 PM (11 years ago)
Author:
yura
Message:
Location:
to-imperative/trunk/java/java
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/java/java/refal/plus/Parallel.java

    r4083 r4089  
    1818    }
    1919
     20    static org.refal.plus.objects.SOBox getSOBox (Expr sobox) throws ClassCastException {
     21        return (org.refal.plus.objects.SOBox) Symbol.getObject(sobox);
     22    }
     23
    2024    @RefalFormat("$func ParApply s.func e.arg = ;")
    2125    public static void ParApply (Expr func, Expr arg) throws RefalException {
     
    2327            final Func f = (Func) Symbol.getObject(func);
    2428            final Expr a = arg;
    25             new Thread () {
     29            new Thread() {
    2630                public void run () {
    2731                    try {
     
    3438        } catch (ClassCastException e) {
    3539            throw new RefalException("refal.plus.Parallel.ParApply", "Invalid argument");
     40        }
     41    }
     42
     43    @RefalFormat("$func FutureApply s.func e.arg = s.sobox;")
     44    public static void FutureApply (Expr func, Expr arg, Result sobox) throws RefalException {
     45        try {
     46            final Func f = (Func) Symbol.getObject(func);
     47            final Expr a = arg;
     48            final org.refal.plus.objects.SOBox s = new org.refal.plus.objects.SOBox();
     49            Symbol.setObject(s, sobox);
     50            new Thread() {
     51                public void run () {
     52                    try {
     53                        Result res = new Result();
     54                        f.eval(a, res);
     55                        s.set(res.getExpr());
     56                    } catch (RefalException e) {
     57                        // TODO Auto-generated catch block
     58                    }
     59                }
     60            }.start();
     61        } catch (ClassCastException e) {
     62            throw new RefalException("refal.plus.Parallel.FutureApply", "Invalid argument");
     63        }
     64    }
     65
     66    @RefalFormat("$func SOBox = s.sobox;")
     67    public static void SOBox (Result sobox) {
     68        Symbol.setObject(new org.refal.plus.objects.SOBox(), sobox);
     69    }
     70
     71    @RefalFormat("$func Get s.box = e.expr;")
     72    public static void Get (Expr sobox, Result expr) throws RefalException {
     73        try {
     74            expr.assign(getSOBox(sobox).get());
     75        } catch (ClassCastException _) {
     76            throw new RefalException("refal.plus.Parallel.Get", "Invalid argument");
     77        } catch (InterruptedException e) {
     78            throw new RefalException("refal.plus.Parallel.Get", "Interrupted");
     79        }
     80    }
     81
     82    @RefalFormat("$func Store s.box e.expr = ;")
     83    public static void Store (Expr sobox, Expr expr) throws RefalException {
     84        try {
     85            if (!getSOBox(sobox).set(expr))
     86                throw new RefalException("refal.plus.Parallel.Store", "Invalid argument");
     87        } catch (ClassCastException _) {
     88            throw new RefalException("refal.plus.Parallel.Store", "Invalid argument");
    3689        }
    3790    }
Note: See TracChangeset for help on using the changeset viewer.