initial framework added
[fp1415-soccerfun.git] / src / StdLibExt / RandomExt.icl
1 implementation module RandomExt
2
3 import StdEnvExt
4 import StdClass, StdInt, StdString
5 import StdTime
6
7
8 :: RandomSeed = RS !Int
9
10
11 nullRandomSeed :: RandomSeed
12 nullRandomSeed
13 = RS 0
14
15 getNewRandomSeed :: !*env -> (!RandomSeed, !*env) | TimeEnv env
16 getNewRandomSeed env
17 # ({hours,minutes,seconds}, env) = getCurrentTime env
18 = (RS (1+(hours+minutes+seconds) bitand 65535), env)
19
20 random :: !RandomSeed -> (!Int,!RandomSeed)
21 random (RS seed)
22 = (newSeed,RS newSeed)
23 where
24 newSeed = if (nextSeed>=0) nextSeed (nextSeed+65537)
25 nextSeed = (seed75 bitand 65535)-(seed75>>16)
26 seed75 = seed*75
27
28 instance toString RandomSeed where toString (RS r) = toString r
29 instance fromString RandomSeed where fromString str = RS (fromString str)
30 instance == RandomSeed where == (RS r1) (RS r2) = r1 == r2