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