Class: Evoasm::PRNG

Inherits:
FFI::AutoPointer
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(seed = DEFAULT_SEED) ⇒ PRNG

Returns new Evoasm::PRNG instance

Parameters:

  • seed (Array<Integer>) (defaults to: DEFAULT_SEED)

    the seed, must have exactly SEED_SIZE elements



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

.defaultPRNG

Gives the default Evoasm::PRNG, seeded with DEFAULT_SEED

Returns:



18
19
20
# File 'lib/evoasm/prng.rb', line 18

def self.default
  @default_prng ||= new(DEFAULT_SEED)
end

Instance Method Details

#rand16Integer

Returns a random number in the range (0..2**16 - 2)

Returns:

  • (Integer)

    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

#rand32Integer

Returns a random number in the range (0..2**32 - 2)

Returns:

  • (Integer)

    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

#rand64Integer

Returns a random number in the range (0..2**64 - 2)

Returns:

  • (Integer)

    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

#rand8Integer

Returns a random number in the range (0..2**8 - 2)

Returns:

  • (Integer)

    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)

Returns:

  • (Integer)

    random number



60
61
62
# File 'lib/evoasm/prng.rb', line 60

def rand_between(min, max)
  Libevoasm.prng_rand_between self, min, max
end