@Override public ByteListIterator listIterator(final int index) { ensureIndex(index); return new ByteListIterator() { int pos = index, last = -1;
@Override public void add(final int index, final byte k) { ensureIndex(index); grow(size + 1); if (index != size) System.arraycopy(a, index, a, index + 1, size - index); a[index] = k; size++; assert size <= a.length; } @Override
/** * Adds elements to this type-specific list using optimized system calls. * * @param index * the index at which to add elements. * @param a * the array containing the elements. * @param offset * the offset of the first element to add. * @param length * the number of elements to add. */ @Override public void addElements(final int index, final byte a[], final int offset, final int length) { ensureIndex(index); ByteArrays.ensureOffsetLength(a, offset, length); grow(size + length); System.arraycopy(this.a, index, this.a, index + length, size - index); System.arraycopy(a, offset, this.a, index, length); size += length; } @Override
@Override public boolean addAll(final int index, final ByteList l) { ensureIndex(index); final int n = l.size(); if (n == 0) return false; grow(size + n); if (index != size) System.arraycopy(a, index, a, index + n, size - index); l.getElements(0, a, index, n); size += n; assert size <= a.length; return true; } @Override
@Override public boolean addAll(int index, final ByteCollection c) { ensureIndex(index); int n = c.size(); if (n == 0) return false; grow(size + n); if (index != size) System.arraycopy(a, index, a, index + n, size - index); final ByteIterator i = c.iterator(); size += n; while (n-- != 0) a[index++] = i.nextByte(); assert size <= a.length; return true; } @Override