imemo4<A, B, C, D, R> function
Checks 4 arguments for equality with identical call and returns the cached result if they were not changed.
Implementation
Func4<A, B, C, D, R> imemo4<A, B, C, D, R>(Func4<A, B, C, D, R> func) {
late A prevArgA;
late B prevArgB;
late C prevArgC;
late D prevArgD;
late R prevResult;
bool isInitial = true;
return ((A argA, B argB, C argC, D argD) {
if (!isInitial &&
identical(argA, prevArgA) &&
identical(argB, prevArgB) &&
identical(argC, prevArgC) &&
identical(argD, prevArgD)) {
return prevResult;
} else {
prevArgA = argA;
prevArgB = argB;
prevArgC = argC;
prevArgD = argD;
prevResult = func(argA, argB, argC, argD);
isInitial = false;
return prevResult;
}
});
}