memoize3.mjs 649 B

12345678910111213141516171819202122232425262728293031323334
  1. /**
  2. * Memoizes the provided three-argument function.
  3. */
  4. export function memoize3(fn) {
  5. let cache0;
  6. return function memoized(a1, a2, a3) {
  7. if (cache0 === undefined) {
  8. cache0 = new WeakMap();
  9. }
  10. let cache1 = cache0.get(a1);
  11. if (cache1 === undefined) {
  12. cache1 = new WeakMap();
  13. cache0.set(a1, cache1);
  14. }
  15. let cache2 = cache1.get(a2);
  16. if (cache2 === undefined) {
  17. cache2 = new WeakMap();
  18. cache1.set(a2, cache2);
  19. }
  20. let fnResult = cache2.get(a3);
  21. if (fnResult === undefined) {
  22. fnResult = fn(a1, a2, a3);
  23. cache2.set(a3, fnResult);
  24. }
  25. return fnResult;
  26. };
  27. }