cache3states<Result, State1, State2, State3> function
F3_0<Result, State1, State2, State3>
cache3states<Result, State1, State2, State3>(
- F3_0<
Result, State1, State2, State3> f
Cache for 3 immutable states, and no parameters.
Implementation
F3_0<Result, State1, State2, State3> cache3states<Result, State1, State2, State3>(
F3_0<Result, State1, State2, State3> f) {
StateContainer? _s1, _s2, _s3;
late WeakMap<State1, WeakMap<State2, WeakMap<State3, Result>>> weakMap1;
return (State1 s1, State2 s2, State3 s3) {
return () {
if (_s1 == null ||
_s2 == null ||
_s3 == null || //
!_s1!.contains(s1) ||
!_s2!.contains(s2) ||
!_s3!.contains(s3)) {
var result = f(s1, s2, s3)();
_s1 = StateContainer(s1);
_s2 = StateContainer(s2);
_s3 = StateContainer(s3);
weakMap1 = WeakMap();
WeakMap<State2, WeakMap<State3, Result>> weakMap2 = WeakMap();
WeakMap<State3, Result> weakMap3 = WeakMap();
weakMap3[s3] = result;
weakMap2[s2] = weakMap3;
weakMap1[s1] = weakMap2;
return result;
}
//
else {
return weakMap1[s1]![s2]![s3] as Result;
}
};
};
}