From 6281419f19f1296570e201882c6f46b22bbb5b86 Mon Sep 17 00:00:00 2001 From: Forrest Voight Date: Sun, 31 Jul 2011 13:26:52 -0400 Subject: [PATCH] FrozenList to reduce memory usage --- p2pool/bitcoin/data.py | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletions(-) diff --git a/p2pool/bitcoin/data.py b/p2pool/bitcoin/data.py index fce4ae2..a71f961 100644 --- a/p2pool/bitcoin/data.py +++ b/p2pool/bitcoin/data.py @@ -1,6 +1,7 @@ from __future__ import division import hashlib +import itertools import struct from . import base58, skiplists @@ -181,6 +182,17 @@ class ShortHashType(Type): raise ValueError('invalid hash value - %r' % (item,)) return file, ('%040x' % (item,)).decode('hex')[::-1] +class FrozenList(tuple): + def __eq__(self, other): + if isinstance(other, FrozenList): + return tuple.__eq__(self, other) + elif isinstance(other, list): + return len(self) == len(other) and all(a == b for a, b in itertools.izip(self, other)) + else: + raise TypeError() + def __ne__(self, other): + return not (self == other) + class ListType(Type): _inner_size = VarIntType() @@ -193,7 +205,7 @@ class ListType(Type): for i in xrange(length): item, file = self.type.read(file) res.append(item) - return res, file + return FrozenList(res), file def write(self, file, item): file = self._inner_size.write(file, len(item)) -- 1.7.1