X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=p2pool%2Futil%2Fmemoize.py;h=bf0fafc1f8d2d980b019c05b85399b0dc2abcaf9;hb=7bf9752d97c844daa2fa3dd8aab710acf9187e60;hp=4199ccb36fa849e6b80fc9b3d9985be6d664e38e;hpb=b016b6b522286e4675b82b9c4206784937977f3e;p=p2pool.git diff --git a/p2pool/util/memoize.py b/p2pool/util/memoize.py index 4199ccb..bf0fafc 100644 --- a/p2pool/util/memoize.py +++ b/p2pool/util/memoize.py @@ -37,3 +37,31 @@ def memoize_with_backing(backing, has_inverses=set()): def memoize(f): return memoize_with_backing({})(f) + + +class cdict(dict): + def __init__(self, func): + dict.__init__(self) + self._func = func + + def __missing__(self, key): + value = self._func(key) + self[key] = value + return value + +def fast_memoize_single_arg(func): + return cdict(func).__getitem__ + +class cdict2(dict): + def __init__(self, func): + dict.__init__(self) + self._func = func + + def __missing__(self, key): + value = self._func(*key) + self[key] = value + return value + +def fast_memoize_multiple_args(func): + f = cdict2(func).__getitem__ + return lambda *args: f(args)