From: Forrest Voight Date: Thu, 29 Nov 2012 19:02:57 +0000 (-0500) Subject: memoize IntType constructor X-Git-Tag: 9.3~6 X-Git-Url: https://git.novaco.in/?p=p2pool.git;a=commitdiff_plain;h=7bf9752d97c844daa2fa3dd8aab710acf9187e60 memoize IntType constructor --- 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) diff --git a/p2pool/util/pack.py b/p2pool/util/pack.py index 9037580..ad6eaf7 100644 --- a/p2pool/util/pack.py +++ b/p2pool/util/pack.py @@ -2,6 +2,7 @@ import binascii import struct import p2pool +from p2pool.util import memoize class EarlyEnd(Exception): pass @@ -186,6 +187,7 @@ class StructType(Type): def write(self, file, item): return file, struct.pack(self.desc, item) +@memoize.fast_memoize_multiple_args class IntType(Type): __slots__ = 'bytes step format_str max'.split(' ')