memoize.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. export function memoize1(fn) {
  2. const memoize1cache = new WeakMap();
  3. return function memoized(a1) {
  4. const cachedValue = memoize1cache.get(a1);
  5. if (cachedValue === undefined) {
  6. const newValue = fn(a1);
  7. memoize1cache.set(a1, newValue);
  8. return newValue;
  9. }
  10. return cachedValue;
  11. };
  12. }
  13. export function memoize2(fn) {
  14. const memoize2cache = new WeakMap();
  15. return function memoized(a1, a2) {
  16. let cache2 = memoize2cache.get(a1);
  17. if (!cache2) {
  18. cache2 = new WeakMap();
  19. memoize2cache.set(a1, cache2);
  20. const newValue = fn(a1, a2);
  21. cache2.set(a2, newValue);
  22. return newValue;
  23. }
  24. const cachedValue = cache2.get(a2);
  25. if (cachedValue === undefined) {
  26. const newValue = fn(a1, a2);
  27. cache2.set(a2, newValue);
  28. return newValue;
  29. }
  30. return cachedValue;
  31. };
  32. }
  33. export function memoize3(fn) {
  34. const memoize3Cache = new WeakMap();
  35. return function memoized(a1, a2, a3) {
  36. let cache2 = memoize3Cache.get(a1);
  37. if (!cache2) {
  38. cache2 = new WeakMap();
  39. memoize3Cache.set(a1, cache2);
  40. const cache3 = new WeakMap();
  41. cache2.set(a2, cache3);
  42. const newValue = fn(a1, a2, a3);
  43. cache3.set(a3, newValue);
  44. return newValue;
  45. }
  46. let cache3 = cache2.get(a2);
  47. if (!cache3) {
  48. cache3 = new WeakMap();
  49. cache2.set(a2, cache3);
  50. const newValue = fn(a1, a2, a3);
  51. cache3.set(a3, newValue);
  52. return newValue;
  53. }
  54. const cachedValue = cache3.get(a3);
  55. if (cachedValue === undefined) {
  56. const newValue = fn(a1, a2, a3);
  57. cache3.set(a3, newValue);
  58. return newValue;
  59. }
  60. return cachedValue;
  61. };
  62. }
  63. export function memoize4(fn) {
  64. const memoize4Cache = new WeakMap();
  65. return function memoized(a1, a2, a3, a4) {
  66. let cache2 = memoize4Cache.get(a1);
  67. if (!cache2) {
  68. cache2 = new WeakMap();
  69. memoize4Cache.set(a1, cache2);
  70. const cache3 = new WeakMap();
  71. cache2.set(a2, cache3);
  72. const cache4 = new WeakMap();
  73. cache3.set(a3, cache4);
  74. const newValue = fn(a1, a2, a3, a4);
  75. cache4.set(a4, newValue);
  76. return newValue;
  77. }
  78. let cache3 = cache2.get(a2);
  79. if (!cache3) {
  80. cache3 = new WeakMap();
  81. cache2.set(a2, cache3);
  82. const cache4 = new WeakMap();
  83. cache3.set(a3, cache4);
  84. const newValue = fn(a1, a2, a3, a4);
  85. cache4.set(a4, newValue);
  86. return newValue;
  87. }
  88. const cache4 = cache3.get(a3);
  89. if (!cache4) {
  90. const cache4 = new WeakMap();
  91. cache3.set(a3, cache4);
  92. const newValue = fn(a1, a2, a3, a4);
  93. cache4.set(a4, newValue);
  94. return newValue;
  95. }
  96. const cachedValue = cache4.get(a4);
  97. if (cachedValue === undefined) {
  98. const newValue = fn(a1, a2, a3, a4);
  99. cache4.set(a4, newValue);
  100. return newValue;
  101. }
  102. return cachedValue;
  103. };
  104. }
  105. export function memoize5(fn) {
  106. const memoize5Cache = new WeakMap();
  107. return function memoized(a1, a2, a3, a4, a5) {
  108. let cache2 = memoize5Cache.get(a1);
  109. if (!cache2) {
  110. cache2 = new WeakMap();
  111. memoize5Cache.set(a1, cache2);
  112. const cache3 = new WeakMap();
  113. cache2.set(a2, cache3);
  114. const cache4 = new WeakMap();
  115. cache3.set(a3, cache4);
  116. const cache5 = new WeakMap();
  117. cache4.set(a4, cache5);
  118. const newValue = fn(a1, a2, a3, a4, a5);
  119. cache5.set(a5, newValue);
  120. return newValue;
  121. }
  122. let cache3 = cache2.get(a2);
  123. if (!cache3) {
  124. cache3 = new WeakMap();
  125. cache2.set(a2, cache3);
  126. const cache4 = new WeakMap();
  127. cache3.set(a3, cache4);
  128. const cache5 = new WeakMap();
  129. cache4.set(a4, cache5);
  130. const newValue = fn(a1, a2, a3, a4, a5);
  131. cache5.set(a5, newValue);
  132. return newValue;
  133. }
  134. let cache4 = cache3.get(a3);
  135. if (!cache4) {
  136. cache4 = new WeakMap();
  137. cache3.set(a3, cache4);
  138. const cache5 = new WeakMap();
  139. cache4.set(a4, cache5);
  140. const newValue = fn(a1, a2, a3, a4, a5);
  141. cache5.set(a5, newValue);
  142. return newValue;
  143. }
  144. let cache5 = cache4.get(a4);
  145. if (!cache5) {
  146. cache5 = new WeakMap();
  147. cache4.set(a4, cache5);
  148. const newValue = fn(a1, a2, a3, a4, a5);
  149. cache5.set(a5, newValue);
  150. return newValue;
  151. }
  152. const cachedValue = cache5.get(a5);
  153. if (cachedValue === undefined) {
  154. const newValue = fn(a1, a2, a3, a4, a5);
  155. cache5.set(a5, newValue);
  156. return newValue;
  157. }
  158. return cachedValue;
  159. };
  160. }
  161. const memoize2of4cache = new WeakMap();
  162. export function memoize2of4(fn) {
  163. return function memoized(a1, a2, a3, a4) {
  164. let cache2 = memoize2of4cache.get(a1);
  165. if (!cache2) {
  166. cache2 = new WeakMap();
  167. memoize2of4cache.set(a1, cache2);
  168. const newValue = fn(a1, a2, a3, a4);
  169. cache2.set(a2, newValue);
  170. return newValue;
  171. }
  172. const cachedValue = cache2.get(a2);
  173. if (cachedValue === undefined) {
  174. const newValue = fn(a1, a2, a3, a4);
  175. cache2.set(a2, newValue);
  176. return newValue;
  177. }
  178. return cachedValue;
  179. };
  180. }