code: func (vector *BitVector) Delete(index int) {
  	vector.indexAssert(index)
  	vector.length--
  	byteIndex := uint32(index >> 3)
  	byteOffset := uint32(index % 8)
  
  	oldByte := vector.data[byteIndex]
  
  	// Shift all the bytes above the byte we're modifying, return the
  	// leftover bit to include in the byte we're modifying.
  	bit := shiftLower(0, vector.data[byteIndex+1:])
  
  	// Modify oldByte.
  	// At a high level, we want to select the bits above byteOffset,
  	// and shift them down by one, removing the bit at byteOffset.
  
  	// This selects the bottom bits
  	bottomMask := byte((1 << byteOffset) - 1)
  	// This selects the top (8 - byteOffset - 1) bits
  	topMask := byte(^((1 << (byteOffset + 1)) - 1))
  	// newTop is the top bits, shifted down one, combined with the leftover bit from shifting
  	// the other bytes.
  	newTop := (oldByte&topMask)>>1 | (bit << 7)
  	// newByte takes the bottom bits and combines with the new top.
  	newByte := (bottomMask & oldByte) | newTop
  	vector.data[byteIndex] = newByte
  
  	// The desired length is the byte index of the last element plus one,
  	// where the byte index of the last element is the bit index of the last
  	// element divided by 8.
  	byteLength := vector.bytesLength()
  	if byteLength < len(vector.data) {
  		vector.data = vector.data[:byteLength]
  	}
  }
docs: // Delete removes the bit in the supplied index of the bit vector. All
  // bits in positions greater than or equal to index before the call will
  // be shifted down by one.