operator >> method
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]);
}