summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/math/random/prng4.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/math/random/prng4.js')
-rw-r--r--js/dojo/dojox/math/random/prng4.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/js/dojo/dojox/math/random/prng4.js b/js/dojo/dojox/math/random/prng4.js
new file mode 100644
index 0000000..1d08b4d
--- /dev/null
+++ b/js/dojo/dojox/math/random/prng4.js
@@ -0,0 +1,60 @@
+//>>built
+// AMD-ID "dojox/math/random/prng4"
+define("dojox/math/random/prng4", ["dojo", "dojox"], function(dojo, dojox) {
+
+ dojo.getObject("math.random.prng4", true, dojox);
+
+// Copyright (c) 2005 Tom Wu
+// All Rights Reserved.
+// See "LICENSE-BigInteger" for details.
+
+ // prng4.js - uses Arcfour as a PRNG
+
+ function Arcfour() {
+ this.i = 0;
+ this.j = 0;
+ this.S = new Array(256);
+ }
+
+ dojo.extend(Arcfour, {
+ init: function(key){
+ // summary:
+ // Initialize arcfour context
+ // key: Array:
+ // an array of ints, each from [0..255]
+ var i, j, t, S = this.S, len = key.length;
+ for(i = 0; i < 256; ++i){
+ S[i] = i;
+ }
+ j = 0;
+ for(i = 0; i < 256; ++i){
+ j = (j + S[i] + key[i % len]) & 255;
+ t = S[i];
+ S[i] = S[j];
+ S[j] = t;
+ }
+ this.i = 0;
+ this.j = 0;
+ },
+
+ next: function(){
+ var t, i, j, S = this.S;
+ this.i = i = (this.i + 1) & 255;
+ this.j = j = (this.j + S[i]) & 255;
+ t = S[i];
+ S[i] = S[j];
+ S[j] = t;
+ return S[(t + S[i]) & 255];
+ }
+ });
+
+ dojox.math.random.prng4 = function(){
+ return new Arcfour();
+ };
+
+ // Pool size must be a multiple of 4 and greater than 32.
+ // An array of bytes the size of the pool will be passed to init()
+ dojox.math.random.prng4.size = 256;
+
+ return dojox.math.random.prng4;
+});