mod method

Implementation

QrPolynomial mod(QrPolynomial e) {
  final int eLength = e.length;
  final int valLength = length;
  if (valLength - eLength < 0) {
    return this;
  }

  final Uint8List values = Uint8List.fromList(_values);
  final int iterLimit = valLength - eLength + 1;

  final Uint8List eValues = e._values;
  final int e0Log = glog(eValues[0]);

  for (int i = 0; i < iterLimit; i++) {
    final int v = values[i];
    if (v == 0) continue;

    final int ratio = glog(v) - e0Log;

    for (int j = 0; j < eLength; j++) {
      final int eVal = eValues[j];
      if (eVal == 0) continue;
      values[i + j] ^= gexp(glog(eVal) + ratio);
    }
  }

  return QrPolynomial(values.sublist(valLength - eLength + 1), 0);
}