memo8<A, B, C, D, E, F, G, H, R> function

Func8<A, B, C, D, E, F, G, H, R> memo8<A, B, C, D, E, F, G, H, R>(
  1. Func8<A, B, C, D, E, F, G, H, R> func
)

Checks 8 arguments for equality with == operator and returns the cached result if it was not changed.

Implementation

Func8<A, B, C, D, E, F, G, H, R> memo8<A, B, C, D, E, F, G, H, R>(
    Func8<A, B, C, D, E, F, G, H, R> func) {
  late A prevArgA;
  late B prevArgB;
  late C prevArgC;
  late D prevArgD;
  late E prevArgE;
  late F prevArgF;
  late G prevArgG;
  late H prevArgH;
  late R prevResult;
  bool isInitial = true;

  return ((A argA, B argB, C argC, D argD, E argE, F argF, G argG, H argH) {
    if (!isInitial &&
        argA == prevArgA &&
        argB == prevArgB &&
        argC == prevArgC &&
        argD == prevArgD &&
        argE == prevArgE &&
        argF == prevArgF &&
        argG == prevArgG &&
        argH == prevArgH) {
      return prevResult;
    } else {
      prevArgA = argA;
      prevArgB = argB;
      prevArgC = argC;
      prevArgD = argD;
      prevArgE = argE;
      prevArgF = argF;
      prevArgG = argG;
      prevArgH = argH;
      prevResult = func(argA, argB, argC, argD, argE, argF, argG, argH);
      isInitial = false;

      return prevResult;
    }
  });
}