private static int MathRandom(LuaState L) { /* the `%' avoids the (rare) case of r==1, and is needed also because on * some systems (SunOS!) `rand()' may return a value larger than RAND_MAX */ //LuaNumberType r = (LuaNumberType)(rng.Next()%RAND_MAX) / (LuaNumberType)RAND_MAX; LuaNumberType r = (LuaNumberType)rng.NextDouble(); switch (LuaGetTop(L)) /* check number of arguments */ { case 0: { /* no arguments */ LuaPushNumber(L, r); /* Number between 0 and 1 */ break; } case 1: { /* only upper limit */ int u = LuaLCheckInt(L, 1); LuaLArgCheck(L, 1 <= u, 1, "interval is empty"); LuaPushNumber(L, Math.Floor(r * u) + 1); /* int between 1 and `u' */ break; } case 2: { /* lower and upper limits */ int l = LuaLCheckInt(L, 1); int u = LuaLCheckInt(L, 2); LuaLArgCheck(L, l <= u, 2, "interval is empty"); LuaPushNumber(L, Math.Floor(r * (u - l + 1)) + l); /* int between `l' and `u' */ break; } default: return(LuaLError(L, "wrong number of arguments")); } return(1); }
public static LuaNumberType LuaLCheckNumber(LuaState L, int narg) { LuaNumberType d = LuaToNumber(L, narg); if ((d == 0) && (LuaIsNumber(L, narg) == 0)) /* avoid extra test when d is not 0 */ { TagError(L, narg, LUA_TNUMBER); } return(d); }
private static int MathRandomSeed(LuaState L) { // math.randomseed() can take a double number but Random expects an integer seed. // we use modulus to bring back the double to the allowed integer interval. LuaNumberType seed = Math.Abs(LuaLCheckNumber(L, 1)); LuaNumberType max = (LuaNumberType)int.MaxValue; while (seed > max) { seed = fmod(seed, max); } rng = new Random((int)seed); return(0); }
private static int MathMax(LuaState L) { int n = LuaGetTop(L); /* number of arguments */ LuaNumberType dmax = LuaLCheckNumber(L, 1); int i; for (i = 2; i <= n; i++) { LuaNumberType d = LuaLCheckNumber(L, i); if (d > dmax) { dmax = d; } } LuaPushNumber(L, dmax); return(1); }
internal static void SetNValue(Lua.LuaTypeValue obj, LuaNumberType x) { obj.value.n = x; obj.tt = LUA_TNUMBER; }
public static bool LuaIsNoneOrNil(LuaState L, LuaNumberType n) { return(LuaType(L, (int)n) <= 0); }
public static LuaNumberType LuaLOptNumber(LuaState L, int narg, LuaNumberType def) { return(LuaLOpt(L, LuaLCheckNumber, narg, def)); }
public static LuaIntegerType LuaLOptInteger(LuaState L, LuaLOptDelegateInteger f, int n, LuaNumberType d) { return((LuaIntegerType)(LuaIsNoneOrNil(L, n) ? d : f(L, (n)))); }
public static LuaIntegerType LuaLOptInteger(LuaState L, LuaLOptDelegateInteger f, int n, LuaNumberType d) { return (LuaIntegerType)(LuaIsNoneOrNil(L, n) ? d : f(L, (n))); }
public static LuaNumberType LuaLOpt(LuaState L, LuaLOptDelegate f, int n, LuaNumberType d) { return LuaIsNoneOrNil(L, (n != 0) ? d : f(L, n)) ? 1 : 0;}
public static LuaNumberType LuaLOptNumber (LuaState L, int narg, LuaNumberType def) { return LuaLOpt(L, LuaLCheckNumber, narg, def); }
private static void DumpNumber(LuaNumberType x, DumpState D) { DumpVar(x, D); }
private static void DumpNumber(LuaNumberType x, DumpState D) { DumpVar(x,D); }
public static bool LuaIsNoneOrNil(LuaState L, LuaNumberType n) { return LuaType(L, (int)n) <= 0; }
public static int LuaOStr2d (CharPtr s, out LuaNumberType result) { CharPtr endptr; result = lua_str2number(s, out endptr); if (endptr == s) return 0; /* conversion failed */ if (endptr[0] == 'x' || endptr[0] == 'X') /* maybe an hexadecimal constant? */ result = CastNum(strtoul(s, out endptr, 16)); if (endptr[0] == '\0') return 1; /* most common case */ while (isspace(endptr[0])) endptr = endptr.next(); if (endptr[0] != '\0') return 0; /* invalid trailing characters? */ return 1; }
public static int LuaKNumberK (FuncState fs, LuaNumberType r) { TValue o = new LuaTypeValue(); SetNValue(o, r); return AddK(fs, o, o); }
public static LuaNumberType LuaLOpt(LuaState L, LuaLOptDelegate f, int n, LuaNumberType d) { return(LuaIsNoneOrNil(L, n) ? d : f(L, (n))); }