Changeset 2193


Ignore:
Timestamp:
Dec 18, 2006, 5:32:40 PM (14 years ago)
Author:
orlov
Message:
  • Random, Randomize, Sleep, Delay implemented in Java.
Location:
to-imperative/trunk/java/org/refal/plus
Files:
2 edited

Legend:

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

    r2024 r2193  
    2020        return i.compareTo(BigInteger.ZERO) >= 0 && i.compareTo(maxInt) <= 0;
    2121    }
     22
     23
     24    public static final BigInteger maxLong  = BigInteger.valueOf(Long.MAX_VALUE);
     25    public static final BigInteger minLong  = BigInteger.valueOf(Long.MIN_VALUE);
     26   
     27    public static boolean fitsLong (BigInteger i)
     28    {
     29        return i.compareTo(maxLong) <= 0 && i.compareTo(minLong) >= 0;
     30    }
     31   
     32    public static boolean fitsNonnegativeLong (BigInteger i)
     33    {
     34        return i.compareTo(BigInteger.ZERO) >= 0 && i.compareTo(maxLong) <= 0;
     35    }
    2236}
  • to-imperative/trunk/java/org/refal/plus/library/Dos.java

    r2060 r2193  
    88import java.math.BigInteger;
    99import java.util.Calendar;
     10import java.util.Random;
    1011import java.lang.System;
    1112
     
    8384        }
    8485    }
     86
     87
     88    static private Random random = new Random();
     89
     90    static public void Randomize ()
     91    {
     92        random = new Random();
     93    }
     94
     95    static public void Random (Expr max, Result rand) throws RefalException
     96    {
     97        assert max.getLen() == 1;
     98        try {
     99            BigInteger bigMax = (BigInteger) max.at(0);
     100            if (!Util.fitsNonnegativeInteger(bigMax))
     101                throw new RefalException("Dos", "Random", "Invalid argument");
     102            rand.assign(BigInteger.valueOf(random.nextInt(bigMax.intValue())));
     103        } catch (ClassCastException _) {
     104            throw new RefalException("Dos", "Random", "Invalid argument");
     105        }
     106    }
     107
     108
     109    static public void Delay (Expr msec) throws RefalException
     110    {
     111        assert msec.getLen() == 1;
     112        try {
     113            BigInteger bigMsec = (BigInteger) msec.at(0);
     114            if (!Util.fitsNonnegativeLong(bigMsec))
     115                throw new RefalException("Dos", "Delay", "Invalid argument");
     116            Thread.sleep(bigMsec.longValue());
     117        } catch (ClassCastException _) {
     118            throw new RefalException("Dos", "Delay", "Invalid argument");
     119        } catch (IllegalArgumentException _) {
     120            throw new RefalException("Dos", "Delay", "Invalid argument");
     121        } catch (InterruptedException _) {
     122            throw new RefalException("Dos", "Delay", "Interrupted");
     123        }
     124    }
     125
     126    static private BigInteger big1000 = BigInteger.valueOf(1000);
     127
     128    static public void Sleep (Expr sec) throws RefalException
     129    {
     130        assert sec.getLen() == 1;
     131        try {
     132            BigInteger bigMsec = ((BigInteger) sec.at(0)).multiply(big1000);
     133            if (!Util.fitsNonnegativeLong(bigMsec))
     134                throw new RefalException("Dos", "Sleep", "Invalid argument");
     135            Thread.sleep(bigMsec.longValue());
     136        } catch (ClassCastException _) {
     137            throw new RefalException("Dos", "Sleep", "Invalid argument");
     138        } catch (IllegalArgumentException _) {
     139            throw new RefalException("Dos", "Sleep", "Invalid argument");
     140        } catch (InterruptedException _) {
     141            throw new RefalException("Dos", "Sleep", "Interrupted");
     142        }
     143    }
    85144}
Note: See TracChangeset for help on using the changeset viewer.