| Index: lib/typed_buffers.dart
|
| diff --git a/lib/typed_buffers.dart b/lib/typed_buffers.dart
|
| index c3c0f38a503c3c856775e5b98211293aa5e7d7ce..2d1ca1329545afce5d17fd61fcd52202287f1d0c 100644
|
| --- a/lib/typed_buffers.dart
|
| +++ b/lib/typed_buffers.dart
|
| @@ -59,7 +59,7 @@ abstract class _TypedDataBuffer<E> extends ListBase<E> {
|
| }
|
|
|
| void _add(E value) {
|
| - if (_length == _buffer.length) _grow();
|
| + if (_length == _buffer.length) _grow(_length);
|
| _buffer[_length++] = value;
|
| }
|
|
|
| @@ -125,25 +125,26 @@ abstract class _TypedDataBuffer<E> extends ListBase<E> {
|
|
|
| // Add elements at end, growing as appropriate, then put them back at
|
| // position [index] using flip-by-double-reverse.
|
| - if (end != null) values = values.take(end);
|
| - int writeIndex = _length;
|
| - int skipCount = start;
|
| + var writeIndex = _length;
|
| + var skipCount = start;
|
| for (var value in values) {
|
| if (skipCount > 0) {
|
| skipCount--;
|
| continue;
|
| }
|
| if (writeIndex == _buffer.length) {
|
| - _grow();
|
| + _grow(writeIndex);
|
| }
|
| _buffer[writeIndex++] = value;
|
| }
|
| +
|
| if (skipCount > 0) {
|
| throw new StateError("Too few elements");
|
| }
|
| if (end != null && writeIndex < end) {
|
| throw new RangeError.range(end, start, writeIndex, "end");
|
| }
|
| +
|
| // Swap [index.._length) and [_length..writeIndex) by double-reversing.
|
| _reverse(_buffer, index, _length);
|
| _reverse(_buffer, _length, writeIndex);
|
| @@ -255,8 +256,11 @@ abstract class _TypedDataBuffer<E> extends ListBase<E> {
|
| return _createBuffer(newLength);
|
| }
|
|
|
| - void _grow() {
|
| - _buffer = _createBiggerBuffer(null)..setRange(0, _length, _buffer);
|
| + /// Grows the buffer.
|
| + ///
|
| + /// This copies the first [length] elements into the new buffer.
|
| + void _grow(int length) {
|
| + _buffer = _createBiggerBuffer(null)..setRange(0, length, _buffer);
|
| }
|
|
|
| void setRange(int start, int end, Iterable<E> source, [int skipCount = 0]) {
|
|
|