import 'iterable.dart'; typedef ValueCallback = T Function(); class FixedList { final int maxLength; final List _list; FixedList(this.maxLength, {List? list}) : _list = (list ?? [])..truncate(maxLength); void add(T item) { _list.add(item); _list.truncate(maxLength); } void clear() { _list.clear(); } List get list => List.unmodifiable(_list); int get length => _list.length; T operator [](int index) => _list[index]; FixedList copyWith() { return FixedList(maxLength, list: List.of(_list)); } } class FixedMap { int maxLength; late Map _map; FixedMap(this.maxLength, {Map? map}) { _map = map ?? {}; } V updateCacheValue(K key, ValueCallback callback) { final realValue = _map.updateCacheValue(key, callback); _adjustMap(); return realValue; } void clear() { _map.clear(); } void updateMaxLength(int size) { maxLength = size; _adjustMap(); } void updateMap(Map map) { _map = map; _adjustMap(); } void _adjustMap() { if (_map.length > maxLength) { _map = Map.fromEntries(map.entries.toList()..truncate(maxLength)); } } V? get(K key) => _map[key]; bool containsKey(K key) => _map.containsKey(key); int get length => _map.length; Map get map => Map.unmodifiable(_map); }