cache3states<Result, State1, State2, State3> function

F3_0<Result, State1, State2, State3> cache3states<Result, State1, State2, State3>(
  1. 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;
      }
    };
  };
}