| /** |
| * Memoizes the provided three-argument function. |
| */ |
| export function memoize3(fn) { |
| let cache0; |
| return function memoized(a1, a2, a3) { |
| if (cache0 === undefined) { |
| cache0 = new WeakMap(); |
| } |
|
|
| let cache1 = cache0.get(a1); |
|
|
| if (cache1 === undefined) { |
| cache1 = new WeakMap(); |
| cache0.set(a1, cache1); |
| } |
|
|
| let cache2 = cache1.get(a2); |
|
|
| if (cache2 === undefined) { |
| cache2 = new WeakMap(); |
| cache1.set(a2, cache2); |
| } |
|
|
| let fnResult = cache2.get(a3); |
|
|
| if (fnResult === undefined) { |
| fnResult = fn(a1, a2, a3); |
| cache2.set(a3, fnResult); |
| } |
|
|
| return fnResult; |
| }; |
| } |