operator >> method

Uint256 operator >>(
  1. int n
)

Logical (unsigned) right shift, generalized across limb boundaries.

Implementation

Uint256 operator >>(int n) {
  final shift = n & 255;
  if (shift == 0) return this;
  final limbShift = shift ~/ 64;
  final bitShift = shift % 64;
  final src = [_d0, _d1, _d2, _d3];
  final out = List<Uint64>.filled(4, Uint64.zero);
  for (var i = 0; i < 4; i++) {
    final srcIndex = i + limbShift;
    if (srcIndex > 3) continue;
    var value = src[srcIndex] >> bitShift;
    if (bitShift > 0 && srcIndex + 1 <= 3) {
      value = value | (src[srcIndex + 1] << (64 - bitShift));
    }
    out[i] = value;
  }
  return Uint256._(out[3], out[2], out[1], out[0]);
}