imemo5<A, B, C, D, E, R> function

Func5<A, B, C, D, E, R> imemo5<A, B, C, D, E, R>(
  1. Func5<A, B, C, D, E, R> func
)

Checks 5 arguments for equality with identical call and returns cached result if they were not changed.

Implementation

Func5<A, B, C, D, E, R> imemo5<A, B, C, D, E, R>(Func5<A, B, C, D, E, R> func) {
  late A prevArgA;
  late B prevArgB;
  late C prevArgC;
  late D prevArgD;
  late E prevArgE;
  late R prevResult;
  bool isInitial = true;

  return ((A argA, B argB, C argC, D argD, E argE) {
    if (!isInitial &&
        identical(argA, prevArgA) &&
        identical(argB, prevArgB) &&
        identical(argC, prevArgC) &&
        identical(argD, prevArgD) &&
        identical(argE, prevArgE)) {
      return prevResult;
    } else {
      prevArgA = argA;
      prevArgB = argB;
      prevArgC = argC;
      prevArgD = argD;
      prevArgE = argE;
      prevResult = func(argA, argB, argC, argD, argE);
      isInitial = false;

      return prevResult;
    }
  });
}