diff options
author | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2013-07-11 10:34:41 +0200 |
---|---|---|
committer | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2013-07-11 10:34:41 +0200 |
commit | f5e475d44ffe9db1647c3f7d086faab1bbc83402 (patch) | |
tree | 93815d676fb8d266ce48f5dc51f8cf4a690bb65e /source/FastRandom.h | |
parent | Server sends PlayerMaxSpeed after a respawn. (diff) | |
download | cuberite-f5e475d44ffe9db1647c3f7d086faab1bbc83402.tar cuberite-f5e475d44ffe9db1647c3f7d086faab1bbc83402.tar.gz cuberite-f5e475d44ffe9db1647c3f7d086faab1bbc83402.tar.bz2 cuberite-f5e475d44ffe9db1647c3f7d086faab1bbc83402.tar.lz cuberite-f5e475d44ffe9db1647c3f7d086faab1bbc83402.tar.xz cuberite-f5e475d44ffe9db1647c3f7d086faab1bbc83402.tar.zst cuberite-f5e475d44ffe9db1647c3f7d086faab1bbc83402.zip |
Diffstat (limited to 'source/FastRandom.h')
-rw-r--r-- | source/FastRandom.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/source/FastRandom.h b/source/FastRandom.h new file mode 100644 index 000000000..011c0c8da --- /dev/null +++ b/source/FastRandom.h @@ -0,0 +1,57 @@ +
+// FastRandom.h
+
+// Declares the cFastRandom class representing a fast random number generator
+
+/*
+The cFastRandom aims to provide a very fast, although not very cryptographically secure, random generator.
+It is fast to instantiate, fast to query next, and partially multi-thread-safe.
+It is multi-thread-safe in the sense that it can be accessed from multiple threads without crashing, but it may
+yield duplicate numbers in that case.
+
+Internally, this works similar to cNoise's integral noise generation, with some predefined inputs: the seed is
+taken from a global counter and the random is calculated using a counter that is incremented on each use (hence
+the multi-thread duplication). Two alternatives exists for each function, one that takes a range parameter,
+and another that takes an additional "salt" parameter; this salt is used as an additional input to the random,
+in order to avoid multi-thread duplication. If two threads both use the class at the same time with different
+salts, the values they get will be different.
+*/
+
+
+
+
+
+#pragma once
+
+
+
+
+
+class cFastRandom
+{
+public:
+ cFastRandom(void);
+
+ /// Returns a random int in the range [0 .. a_Range - 1]; a_Range must be less than 1M
+ int NextInt(int a_Range);
+
+ /// Returns a random int in the range [0 .. a_Range - 1]; a_Range must be less than 1M; a_Salt is additional source of randomness
+ int NextInt(int a_Range, int a_Salt);
+
+ /// Returns a random float in the range [0 .. a_Range]; a_Range must be less than 1M
+ float NextFloat(float a_Range);
+
+ /// Returns a random float in the range [0 .. a_Range]; a_Range must be less than 1M; a_Salt is additional source of randomness
+ float NextFloat(float a_Range, int a_Salt);
+
+protected:
+ int m_Seed;
+ int m_Counter;
+
+ /// Counter that is used to initialize the seed, incremented for each object created
+ static int m_SeedCounter;
+} ;
+
+
+
+
|