| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 part of dart.io; | 5 part of dart.io; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * Utility class that holds a number of byte buffers and can deliver | 8 * Utility class that holds a number of byte buffers and can deliver |
| 9 * the bytes either one by one or in chunks. | 9 * the bytes either one by one or in chunks. |
| 10 */ | 10 */ |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 _buffers.removeFirst(); | 87 _buffers.removeFirst(); |
| 88 _index = 0; | 88 _index = 0; |
| 89 } | 89 } |
| 90 return result; | 90 return result; |
| 91 } else { | 91 } else { |
| 92 result = new Uint8List(count); | 92 result = new Uint8List(count); |
| 93 int remaining = count; | 93 int remaining = count; |
| 94 while (remaining > 0) { | 94 while (remaining > 0) { |
| 95 int bytesInFirst = _buffers.first.length - _index; | 95 int bytesInFirst = _buffers.first.length - _index; |
| 96 if (bytesInFirst <= remaining) { | 96 if (bytesInFirst <= remaining) { |
| 97 result.setRange(count - remaining, | 97 int startIndex = count - remaining; |
| 98 bytesInFirst, | 98 int endIndex = startIndex + bytesInFirst; |
| 99 _buffers.first, | 99 result.setRange(startIndex, endIndex, _buffers.first, _index); |
| 100 _index); | |
| 101 _buffers.removeFirst(); | 100 _buffers.removeFirst(); |
| 102 _index = 0; | 101 _index = 0; |
| 103 _length -= bytesInFirst; | 102 _length -= bytesInFirst; |
| 104 remaining -= bytesInFirst; | 103 remaining -= bytesInFirst; |
| 105 } else { | 104 } else { |
| 106 result.setRange(count - remaining, | 105 result.setRange(count - remaining, count, _buffers.first, _index); |
| 107 remaining, | |
| 108 _buffers.first, | |
| 109 _index); | |
| 110 _index = remaining; | 106 _index = remaining; |
| 111 _length -= remaining; | 107 _length -= remaining; |
| 112 remaining = 0; | 108 remaining = 0; |
| 113 assert(_index < _buffers.first.length); | 109 assert(_index < _buffers.first.length); |
| 114 } | 110 } |
| 115 } | 111 } |
| 116 return result; | 112 return result; |
| 117 } | 113 } |
| 118 } | 114 } |
| 119 } | 115 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 void clear() { | 148 void clear() { |
| 153 _index = 0; | 149 _index = 0; |
| 154 _length = 0; | 150 _length = 0; |
| 155 _buffers = new Queue(); | 151 _buffers = new Queue(); |
| 156 } | 152 } |
| 157 | 153 |
| 158 int _length; // Total number of bytes remaining in the buffers. | 154 int _length; // Total number of bytes remaining in the buffers. |
| 159 Queue<List<int>> _buffers; // List of data buffers. | 155 Queue<List<int>> _buffers; // List of data buffers. |
| 160 int _index; // Index of the next byte in the first buffer. | 156 int _index; // Index of the next byte in the first buffer. |
| 161 } | 157 } |
| OLD | NEW |