// 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);
  }
}
