operator >> method

BitList operator >>(
  1. int amount
)

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;
}