| // 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. | |
| import 'dart:collection'; | |
| /// Returns the given [list] if it is not empty, or `null` otherwise. | |
| List<E>? nullIfEmpty<E>(List<E>? list) { | |
| if (list == null || 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 Queue<T> _buffer; | |
| new(this.capacity) : _buffer = Queue(); | |
| Iterable<T> get items => _buffer; | |
| void add(T item) { | |
| while (_buffer.length >= capacity) { | |
| _buffer.removeLast(); | |
| } | |
| _buffer.addFirst(item); | |
| } | |
| } |