operator << method

BitList operator <<(
  1. int amount
)

Returns a BitList of the same length, but with the bits of the receiver shifted to the left by amount. Throws an ArgumentError if amount is negative.

Implementation

BitList operator <<(int amount) {
  RangeError.checkNotNegative(
      amount, 'amount', 'Unable to left-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 = shift; i < buffer.length; i++) {
      result.buffer[i] = buffer[i - shift];
    }
  } else {
    final otherOffset = 1 + bitOffset - offset;
    for (var i = shift + 1; i < buffer.length; i++) {
      result.buffer[i] = ((buffer[i - shift] << offset) & bitMask) |
          ((buffer[i - shift - 1] >> otherOffset) & bitMask);
    }
    if (shift < buffer.length) {
      result.buffer[shift] = (buffer[0] << offset) & bitMask;
    }
  }
  return result;
}