/** * @param add * @return */ public static EInteger box(BigInteger res) { if (res.compareTo(INT_MIN_AS_BIG) < 0) return new EBig(res); if (res.compareTo(INT_MAX_AS_BIG) > 0) return new EBig(res); return ESmall.make(res.intValue()); }
public static EFun resolve_fun(EObject mod, EObject fun, int arity) { EAtom f = fun.testAtom(); if (f == null) { throw ERT.badarg(mod, fun, ESmall.make(arity)); } JavaObject jo; if ((jo = mod.testJavaObject()) != null) { return jo.resolve_fun(f, arity); } EAtom m = mod.testAtom(); if (m == null) { final ETuple tup; EAtom pmod; if ((tup = mod.testTuple()) != null && tup.arity() > 0 && (pmod = tup.elm(1).testAtom()) != null) { final EFun pfun = EModuleManager.resolve(new FunID(pmod, f, arity + 1)); return EFunCG.get_fun_with_handler( pmod.getName(), f.getName(), arity, new EFunHandler() { @Override public EObject invoke(EProc proc, EObject[] args) throws Pausable { EObject[] real_args = new EObject[args.length + 1]; System.arraycopy(args, 0, real_args, 0, args.length); real_args[args.length] = tup; return pfun.invoke(proc, real_args); } }, ERT.class.getClassLoader()); } throw ERT.badarg(mod, fun, ESmall.make(arity)); } EFun efun = EModuleManager.resolve(new FunID(m, f, arity)); return efun; }
public static EInteger box(long longVal) { int intVal = (int) longVal; if (intVal == longVal) { return ESmall.make(intVal); } else { return new EBig(longVal); } }
/** * Boxes a <code>long</code> value to an EInteger (EBig or ESmall) * * @param longValue * @return */ public static EInteger box2(long longVal) { // very simple: see if the longValue can be converted // to an int and back again without loosing it's value int intVal = (int) longVal; if (longVal == (long) intVal) { return ESmall.make(intVal); } else { return new EBig(longVal); } }
public static ESmall box(int v) { return ESmall.make(v); }