42 lines
		
	
	
		
			753 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			753 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| Object.defineProperty(exports, '__esModule', {
 | |
|   value: true,
 | |
| });
 | |
| exports.memoize3 = memoize3;
 | |
| 
 | |
| /**
 | |
|  * Memoizes the provided three-argument function.
 | |
|  */
 | |
| 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;
 | |
|   };
 | |
| }
 |