| OLD | NEW | 
|---|
| 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 /// Growable typed-data lists. | 5 /// Growable typed-data lists. | 
| 6 /// | 6 /// | 
| 7 /// These lists works just as a typed-data list, except that they are growable. | 7 /// These lists works just as a typed-data list, except that they are growable. | 
| 8 /// They use an underlying buffer, and when that buffer becomes too small, it | 8 /// They use an underlying buffer, and when that buffer becomes too small, it | 
| 9 /// is replaced by a new buffer. | 9 /// is replaced by a new buffer. | 
| 10 /// | 10 /// | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 52       } else { | 52       } else { | 
| 53         newBuffer = _createBiggerBuffer(newLength); | 53         newBuffer = _createBiggerBuffer(newLength); | 
| 54       } | 54       } | 
| 55       newBuffer.setRange(0, _length, _buffer); | 55       newBuffer.setRange(0, _length, _buffer); | 
| 56       _buffer = newBuffer; | 56       _buffer = newBuffer; | 
| 57     } | 57     } | 
| 58     _length = newLength; | 58     _length = newLength; | 
| 59   } | 59   } | 
| 60 | 60 | 
| 61   void _add(E value) { | 61   void _add(E value) { | 
| 62     if (_length == _buffer.length) _grow(); | 62     if (_length == _buffer.length) _grow(_length); | 
| 63     _buffer[_length++] = value; | 63     _buffer[_length++] = value; | 
| 64   } | 64   } | 
| 65 | 65 | 
| 66   // We override the default implementation of `add` because it grows the list | 66   // We override the default implementation of `add` because it grows the list | 
| 67   // by setting the length in increments of one. We want to grow by doubling | 67   // by setting the length in increments of one. We want to grow by doubling | 
| 68   // capacity in most cases. | 68   // capacity in most cases. | 
| 69   void add(E value) { _add(value); } | 69   void add(E value) { _add(value); } | 
| 70 | 70 | 
| 71   /// Appends all objects of [values] to the end of this buffer. | 71   /// Appends all objects of [values] to the end of this buffer. | 
| 72   /// | 72   /// | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 118     if (end == null && values is List) { | 118     if (end == null && values is List) { | 
| 119       end = values.length; | 119       end = values.length; | 
| 120     } | 120     } | 
| 121     if (end != null) { | 121     if (end != null) { | 
| 122       _insertKnownLength(index, values, start, end); | 122       _insertKnownLength(index, values, start, end); | 
| 123       return; | 123       return; | 
| 124     } | 124     } | 
| 125 | 125 | 
| 126     // Add elements at end, growing as appropriate, then put them back at | 126     // Add elements at end, growing as appropriate, then put them back at | 
| 127     // position [index] using flip-by-double-reverse. | 127     // position [index] using flip-by-double-reverse. | 
| 128     if (end != null) values = values.take(end); | 128     var writeIndex = _length; | 
| 129     int writeIndex = _length; | 129     var skipCount = start; | 
| 130     int skipCount = start; |  | 
| 131     for (var value in values) { | 130     for (var value in values) { | 
| 132       if (skipCount > 0) { | 131       if (skipCount > 0) { | 
| 133         skipCount--; | 132         skipCount--; | 
| 134         continue; | 133         continue; | 
| 135       } | 134       } | 
| 136       if (writeIndex == _buffer.length) { | 135       if (writeIndex == _buffer.length) { | 
| 137         _grow(); | 136         _grow(writeIndex); | 
| 138       } | 137       } | 
| 139       _buffer[writeIndex++] = value; | 138       _buffer[writeIndex++] = value; | 
| 140     } | 139     } | 
|  | 140 | 
| 141     if (skipCount > 0) { | 141     if (skipCount > 0) { | 
| 142       throw new StateError("Too few elements"); | 142       throw new StateError("Too few elements"); | 
| 143     } | 143     } | 
| 144     if (end != null && writeIndex < end) { | 144     if (end != null && writeIndex < end) { | 
| 145       throw new RangeError.range(end, start, writeIndex, "end"); | 145       throw new RangeError.range(end, start, writeIndex, "end"); | 
| 146     } | 146     } | 
|  | 147 | 
| 147     // Swap [index.._length) and [_length..writeIndex) by double-reversing. | 148     // Swap [index.._length) and [_length..writeIndex) by double-reversing. | 
| 148     _reverse(_buffer, index, _length); | 149     _reverse(_buffer, index, _length); | 
| 149     _reverse(_buffer, _length, writeIndex); | 150     _reverse(_buffer, _length, writeIndex); | 
| 150     _reverse(_buffer, index, writeIndex); | 151     _reverse(_buffer, index, writeIndex); | 
| 151     _length = writeIndex; | 152     _length = writeIndex; | 
| 152     return; | 153     return; | 
| 153   } | 154   } | 
| 154 | 155 | 
| 155   // Reverses the range [start..end) of buffer. | 156   // Reverses the range [start..end) of buffer. | 
| 156   static void _reverse(List<int> buffer, int start, int end) { | 157   static void _reverse(List<int> buffer, int start, int end) { | 
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 248   List<E> _createBiggerBuffer(int requiredCapacity) { | 249   List<E> _createBiggerBuffer(int requiredCapacity) { | 
| 249     int newLength = _buffer.length * 2; | 250     int newLength = _buffer.length * 2; | 
| 250     if (requiredCapacity != null && newLength < requiredCapacity) { | 251     if (requiredCapacity != null && newLength < requiredCapacity) { | 
| 251       newLength = requiredCapacity; | 252       newLength = requiredCapacity; | 
| 252     } else if (newLength < INITIAL_LENGTH) { | 253     } else if (newLength < INITIAL_LENGTH) { | 
| 253       newLength = INITIAL_LENGTH; | 254       newLength = INITIAL_LENGTH; | 
| 254     } | 255     } | 
| 255     return _createBuffer(newLength); | 256     return _createBuffer(newLength); | 
| 256   } | 257   } | 
| 257 | 258 | 
| 258   void _grow() { | 259   /// Grows the buffer. | 
| 259     _buffer = _createBiggerBuffer(null)..setRange(0, _length, _buffer); | 260   /// | 
|  | 261   /// This copies the first [length] elements into the new buffer. | 
|  | 262   void _grow(int length) { | 
|  | 263     _buffer = _createBiggerBuffer(null)..setRange(0, length, _buffer); | 
| 260   } | 264   } | 
| 261 | 265 | 
| 262   void setRange(int start, int end, Iterable<E> source, [int skipCount = 0]) { | 266   void setRange(int start, int end, Iterable<E> source, [int skipCount = 0]) { | 
| 263     if (end > _length) throw new RangeError.range(end, 0, _length); | 267     if (end > _length) throw new RangeError.range(end, 0, _length); | 
| 264     _setRange(start, end, source, skipCount); | 268     _setRange(start, end, source, skipCount); | 
| 265   } | 269   } | 
| 266 | 270 | 
| 267   /// Like [setRange], but with no bounds checking. | 271   /// Like [setRange], but with no bounds checking. | 
| 268   void _setRange(int start, int end, Iterable<E> source, int skipCount) { | 272   void _setRange(int start, int end, Iterable<E> source, int skipCount) { | 
| 269     if (source is _TypedDataBuffer<E>) { | 273     if (source is _TypedDataBuffer<E>) { | 
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 374   Int32x4 get _defaultValue => _zero; | 378   Int32x4 get _defaultValue => _zero; | 
| 375   Int32x4List _createBuffer(int size) => new Int32x4List(size); | 379   Int32x4List _createBuffer(int size) => new Int32x4List(size); | 
| 376 } | 380 } | 
| 377 | 381 | 
| 378 class Float32x4Buffer extends _TypedDataBuffer<Float32x4> { | 382 class Float32x4Buffer extends _TypedDataBuffer<Float32x4> { | 
| 379   Float32x4Buffer([int initialLength = 0]) | 383   Float32x4Buffer([int initialLength = 0]) | 
| 380       : super(new Float32x4List(initialLength)); | 384       : super(new Float32x4List(initialLength)); | 
| 381   Float32x4 get _defaultValue => new Float32x4.zero(); | 385   Float32x4 get _defaultValue => new Float32x4.zero(); | 
| 382   Float32x4List _createBuffer(int size) => new Float32x4List(size); | 386   Float32x4List _createBuffer(int size) => new Float32x4List(size); | 
| 383 } | 387 } | 
| OLD | NEW | 
|---|