flru.mjs 737 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. export default function (max) {
  2. var num, curr, prev;
  3. var limit = max || 1;
  4. function keep(key, value) {
  5. if (++num > limit) {
  6. prev = curr;
  7. reset(1);
  8. ++num;
  9. }
  10. curr[key] = value;
  11. }
  12. function reset(isPartial) {
  13. num = 0;
  14. curr = Object.create(null);
  15. isPartial || (prev=Object.create(null));
  16. }
  17. reset();
  18. return {
  19. clear: reset,
  20. has: function (key) {
  21. return curr[key] !== void 0 || prev[key] !== void 0;
  22. },
  23. get: function (key) {
  24. var val = curr[key];
  25. if (val !== void 0) return val;
  26. if ((val=prev[key]) !== void 0) {
  27. keep(key, val);
  28. return val;
  29. }
  30. },
  31. set: function (key, value) {
  32. if (curr[key] !== void 0) {
  33. curr[key] = value;
  34. } else {
  35. keep(key, value);
  36. }
  37. }
  38. };
  39. }