operator >> method
Returns a BitList of the same length, but with the bits of the receiver
shifted to the right by amount
. Throws an ArgumentError if amount
is
negative.
Implementation
BitList operator >>(int amount) {
RangeError.checkNotNegative(
amount, 'amount', 'Unable to right-shift by $amount');
if (amount == 0 || length == 0) {
return BitList.of(this);
}
final shift = amount >> bitShift;
final offset = amount & bitOffset;
final result = BitList(length);
if (offset == 0) {
for (var i = 0; i < buffer.length - shift; i++) {
result.buffer[i] = buffer[i + shift];
}
} else {
final last = buffer.length - shift - 1;
final otherOffset = 1 + bitOffset - offset;
for (var i = 0; i < last; i++) {
result.buffer[i] = ((buffer[i + shift] >> offset) & bitMask) |
((buffer[i + shift + 1] << otherOffset) & bitMask);
}
if (0 <= last) {
result.buffer[last] = (buffer[buffer.length - 1] >> offset) & bitMask;
}
}
return result;
}