initial framework added
[fp1415-soccerfun.git] / src / StdLibExt / RandomExt.icl
diff --git a/src/StdLibExt/RandomExt.icl b/src/StdLibExt/RandomExt.icl
new file mode 100644 (file)
index 0000000..1ed4f58
--- /dev/null
@@ -0,0 +1,30 @@
+implementation module RandomExt\r
+\r
+import StdEnvExt\r
+import StdClass, StdInt, StdString\r
+import StdTime\r
+\r
+\r
+::     RandomSeed      = RS !Int\r
+\r
+\r
+nullRandomSeed :: RandomSeed\r
+nullRandomSeed\r
+= RS 0\r
+\r
+getNewRandomSeed :: !*env -> (!RandomSeed, !*env) | TimeEnv env\r
+getNewRandomSeed env\r
+# ({hours,minutes,seconds}, env)       = getCurrentTime env\r
+= (RS (1+(hours+minutes+seconds) bitand 65535), env)\r
+\r
+random :: !RandomSeed -> (!Int,!RandomSeed)\r
+random (RS seed)\r
+= (newSeed,RS newSeed)\r
+where\r
+       newSeed         = if (nextSeed>=0) nextSeed (nextSeed+65537)\r
+       nextSeed        = (seed75 bitand 65535)-(seed75>>16)\r
+       seed75          = seed*75\r
+\r
+instance toString   RandomSeed where toString (RS r)    = toString r\r
+instance fromString RandomSeed where fromString str     = RS (fromString str)\r
+instance ==         RandomSeed where == (RS r1) (RS r2) = r1 == r2\r