Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(244)

Unified Diff: lib/typed_buffers.dart

Issue 1404443005: Add _TypedDataBuffer.addRange. (Closed) Base URL: git@github.com:dart-lang/typed_data@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « CHANGELOG.md ('k') | pubspec.yaml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/typed_buffers.dart
diff --git a/lib/typed_buffers.dart b/lib/typed_buffers.dart
index 50ed2414c4cbd58d196a720e9706ecf31338a18e..4bb6be73589bf0ccef50a847651821aae664b492 100644
--- a/lib/typed_buffers.dart
+++ b/lib/typed_buffers.dart
@@ -71,7 +71,32 @@ abstract class _TypedDataBuffer<E> extends ListBase<E> {
void add(E value) { _add(value); }
void addAll(Iterable<E> values) {
Lasse Reichstein Nielsen 2015/10/14 07:09:59 Maybe addAll is a special case of insertAll, and w
Lasse Reichstein Nielsen 2015/10/14 07:10:00 I'd rather have specialized list code and general
nweiz 2015/10/14 20:20:20 Really? This is contrary to what ListBase does in
nweiz 2015/10/14 20:20:20 Done. ListBase.insertAll bottoms out on setRange a
- for (E value in values) _add(value);
+ var list = values is List ? values : values.toList();
+ var newLength = _length + list.length;
+ _createBiggerBuffer(newLength);
Lasse Reichstein Nielsen 2015/10/14 07:10:00 Only grow the backing store if necessary. The _cre
nweiz 2015/10/14 20:20:20 Done.
+ _setRange(_length, newLength, list);
+ _length = newLength;
+ }
+
+ /// Adds a range of values in [source] to the end of the buffer.
Lasse Reichstein Nielsen 2015/10/14 07:09:59 Comment format is inconsistent with the rest of th
nweiz 2015/10/14 20:20:20 The existing style is already inconsistent—see [_b
+ ///
+ /// This adds values from [sourceStart] (inclusive) to [sourceEnd]
+ /// (exclusive). If [sourceEnd] is omitted, adds all values after
+ /// [sourceStart].
+ void addRange(Iterable<E> source, int sourceStart, [int sourceEnd]) {
Lasse Reichstein Nielsen 2015/10/14 07:09:59 Validate sourceStart and sourceEnd: 0 <= sourceS
Lasse Reichstein Nielsen 2015/10/14 07:09:59 Just add the parameters to addAll; void addAll(I
Lasse Reichstein Nielsen 2015/10/14 07:10:00 Naming-wise, functions named "somethingRange" usua
nweiz 2015/10/14 20:20:20 Acknowledged.
nweiz 2015/10/14 20:20:20 Done. Do you really prefer "start" and "end" to "
nweiz 2015/10/14 20:20:20 Done.
+ var list;
+ if (source is List) {
+ list = source;
+ } else {
+ if (sourceEnd != null) source = source.take(sourceEnd);
+ list = source.skip(sourceStart).toList();
Lasse Reichstein Nielsen 2015/10/14 07:10:00 This looks wrong - you create a list of only the e
nweiz 2015/10/14 20:20:20 Done.
+ }
+
+ sourceEnd ??= list.length;
+ var newLength = _length + sourceEnd - sourceStart;
+ _createBiggerBuffer(newLength);
+ _setRange(_length, newLength, list, sourceStart);
+ _length = newLength;
}
void insert(int index, E element) {
@@ -116,6 +141,11 @@ abstract class _TypedDataBuffer<E> extends ListBase<E> {
void setRange(int start, int end, Iterable<E> source, [int skipCount = 0]) {
if (end > _length) throw new RangeError.range(end, 0, _length);
+ _setRange(start, end, source._buffer, skipCount);
+ }
+
+ /// Like [setRange], but with no bounds checking.
+ void _setRange(int start, int end, Iterable<E> source, [int skipCount = 0]) {
Lasse Reichstein Nielsen 2015/10/14 07:10:00 Make skipCount not optional here. I generally don
nweiz 2015/10/14 20:20:20 Done.
if (source is _TypedDataBuffer<E>) {
_buffer.setRange(start, end, source._buffer, skipCount);
} else {
« no previous file with comments | « CHANGELOG.md ('k') | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698