e97f1bdbf0
This should allow doing partial migration, specifically protocol files, which are imported by other libraries, but are a small library cycle that does not import much outside of it. Change-Id: I904c05d6d5b444ee9a9dbd1f7ada12aabdcc5165 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/193583 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
39 lines
925 B
Dart
39 lines
925 B
Dart
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
// @dart = 2.9
|
|
|
|
/// Returns the given [list] if it is not empty, or `null` otherwise.
|
|
List<E> nullIfEmpty<E>(List<E> list) {
|
|
if (list == null) {
|
|
return null;
|
|
}
|
|
if (list.isEmpty) {
|
|
return null;
|
|
}
|
|
return list;
|
|
}
|
|
|
|
/// A container that remembers the last `n` items added to it.
|
|
///
|
|
/// It will never grow larger than [capacity]. It's a LIFO queue - the last item
|
|
/// added will be the first one returned from [items].
|
|
class RecentBuffer<T> {
|
|
final int capacity;
|
|
|
|
final List<T> _buffer = [];
|
|
|
|
RecentBuffer(this.capacity);
|
|
|
|
Iterable<T> get items => _buffer.reversed;
|
|
|
|
void add(T item) {
|
|
_buffer.add(item);
|
|
|
|
if (_buffer.length > capacity) {
|
|
_buffer.removeAt(0);
|
|
}
|
|
}
|
|
}
|