call method

R call(
  1. List args
)

Implementation

R call(List<dynamic> args) {
  final key = _keyFn(args);

  if (_cache.containsKey(key)) {
    // Move to most recent
    _accessOrder.remove(key);
    _accessOrder.add(key);
    return _cache[key] as R;
  }

  final result = _fn(args);
  _cache[key] = result;
  _accessOrder.add(key);

  // Evict if over capacity
  while (_accessOrder.length > maxCacheSize) {
    final evicted = _accessOrder.removeAt(0);
    _cache.remove(evicted);
  }

  return result;
}