Class: Evoasm::PRNG
- Inherits:
-
FFI::AutoPointer
- Object
- FFI::AutoPointer
- Evoasm::PRNG
- Defined in:
- lib/evoasm/prng.rb
Overview
A fast pseudo-random number generator.
Constant Summary
- SEED_SIZE =
Number of seed elements required
16
- DEFAULT_SEED =
Default seed values
(1..SEED_SIZE).to_a
Class Method Summary collapse
-
.default ⇒ PRNG
Gives the default PRNG, seeded with DEFAULT_SEED.
Instance Method Summary collapse
-
#initialize(seed = DEFAULT_SEED) ⇒ PRNG
constructor
New PRNG instance.
-
#rand16 ⇒ Integer
A random number in the range (0..2**16 - 2).
-
#rand32 ⇒ Integer
A random number in the range (0..2**32 - 2).
-
#rand64 ⇒ Integer
A random number in the range (0..2**64 - 2).
-
#rand8 ⇒ Integer
A random number in the range (0..2**8 - 2).
-
#rand_between(min, max) ⇒ Integer
Gives a random number in the range (
min
..max
- 1).
Constructor Details
#initialize(seed = DEFAULT_SEED) ⇒ PRNG
Returns new Evoasm::PRNG instance
24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/evoasm/prng.rb', line 24 def initialize(seed = DEFAULT_SEED) if seed.size != SEED_SIZE raise ArgumentError, "seed must be have exactly #{SEED_SIZE} elements" end ptr = Libevoasm.prng_alloc seed_ptr = FFI::MemoryPointer.new :uint64, SEED_SIZE seed_ptr.write_array_of_uint64 seed Libevoasm.prng_init ptr, seed_ptr super(ptr) end |
Class Method Details
.default ⇒ PRNG
Gives the default Evoasm::PRNG, seeded with DEFAULT_SEED
18 19 20 |
# File 'lib/evoasm/prng.rb', line 18 def self.default @default_prng ||= new(DEFAULT_SEED) end |
Instance Method Details
#rand16 ⇒ Integer
Returns a random number in the range (0..2**16 - 2)
49 50 51 |
# File 'lib/evoasm/prng.rb', line 49 def rand16 Libevoasm.prng_rand16 self end |
#rand32 ⇒ Integer
Returns a random number in the range (0..2**32 - 2)
44 45 46 |
# File 'lib/evoasm/prng.rb', line 44 def rand32 Libevoasm.prng_rand32 self end |
#rand64 ⇒ Integer
Returns a random number in the range (0..2**64 - 2)
39 40 41 |
# File 'lib/evoasm/prng.rb', line 39 def rand64 Libevoasm.prng_rand64 self end |
#rand8 ⇒ Integer
Returns a random number in the range (0..2**8 - 2)
54 55 56 |
# File 'lib/evoasm/prng.rb', line 54 def rand8 Libevoasm.prng_rand8 self end |
#rand_between(min, max) ⇒ Integer
Gives a random number in the range (min
..max
- 1)
60 61 62 |
# File 'lib/evoasm/prng.rb', line 60 def rand_between(min, max) Libevoasm.prng_rand_between self, min, max end |