initFromSequence method

void initFromSequence(
  1. List<Int64> key
)

Initializes the MersenneTwisterEngine from a sequence.

Implementation

void initFromSequence(List<Int64> key) {
  init(Int64(_sequenceInitialSeed));

  var i = 1;
  var j = 0;
  for (var k = n > key.length ? n : key.length; k != 0; k -= 1) {
    _state[i] =
        (_state[i] ^ ((_state[i - 1] ^ (_state[i - 1] >>> (w - 2))) * f1)) +
            key[j] +
            Int64(j); // Non-linear.
    _state[i] &= _wordMask;
    i += 1;
    j += 1;
    if (i >= n) {
      _state[0] = _state[n - 1];
      i = 1;
    }
    if (j >= key.length) {
      j = 0;
    }
  }
  for (var k = n - 1; k != 0; k -= 1) {
    _state[i] =
        (_state[i] ^ ((_state[i - 1] ^ (_state[i - 1] >>> (w - 2))) * f2)) -
            Int64(i); // Non-linear.
    _state[i] &= _wordMask;
    i += 1;
    if (i >= n) {
      _state[0] = _state[n - 1];
      i = 1;
    }
  }

  // MSB is 1; assuring non-zero initial array.
  _state[0] = Int64.ONE << (w - 1);
}