addAll method

void addAll (Iterable<E> elements)

Adds all elements of iterable at the end of the queue. The length of the queue is extended by the length of iterable.

Implementation

void addAll(Iterable<E> elements) {
  if (elements is List<E>) {
    List<E> list = elements;
    int addCount = list.length;
    int length = this.length;
    if (length + addCount >= _table.length) {
      _preGrow(length + addCount);
      // After preGrow, all elements are at the start of the list.
      _table.setRange(length, length + addCount, list, 0);
      _tail += addCount;
    } else {
      // Adding addCount elements won't reach _head.
      int endSpace = _table.length - _tail;
      if (addCount < endSpace) {
        _table.setRange(_tail, _tail + addCount, list, 0);
        _tail += addCount;
      } else {
        int preSpace = addCount - endSpace;
        _table.setRange(_tail, _tail + endSpace, list, 0);
        _table.setRange(0, preSpace, list, endSpace);
        _tail = preSpace;
      }
    }
    _modificationCount++;
  } else {
    for (E element in elements) _add(element);
  }
}