diff options
-rw-r--r-- | Lib/weakref.py | 74 |
1 files changed, 23 insertions, 51 deletions
diff --git a/Lib/weakref.py b/Lib/weakref.py index cfe9456..9373f02 100644 --- a/Lib/weakref.py +++ b/Lib/weakref.py @@ -277,54 +277,26 @@ class WeakKeyDictionary(UserDict.UserDict): self.update(kwargs) -class BaseIter: - def __iter__(self): - return self - - -class WeakKeyedKeyIterator(BaseIter): - def __init__(self, weakdict): - self._next = weakdict.data.iterkeys().next - - def next(self): - while 1: - wr = self._next() - obj = wr() - if obj is not None: - return obj - - -class WeakKeyedItemIterator(BaseIter): - def __init__(self, weakdict): - self._next = weakdict.data.iteritems().next - - def next(self): - while 1: - wr, value = self._next() - key = wr() - if key is not None: - return key, value - - -class WeakValuedValueIterator(BaseIter): - def __init__(self, weakdict): - self._next = weakdict.data.itervalues().next - - def next(self): - while 1: - wr = self._next() - obj = wr() - if obj is not None: - return obj - - -class WeakValuedItemIterator(BaseIter): - def __init__(self, weakdict): - self._next = weakdict.data.itervalues().next - - def next(self): - while 1: - wr = self._next() - value = wr() - if value is not None: - return wr.key, value +def WeakKeyedKeyIterator(weakdict): + for wr in weakdict.data.iterkeys(): + obj = wr() + if obj is not None: + yield obj + +def WeakKeyedItemIterator(weakdict): + for wr, value in weakdict.data.iteritems(): + key = wr() + if key is not None: + yield key, value + +def WeakValuedValueIterator(weakdict): + for wr in weakdict.data.itervalues(): + obj = wr() + if obj is not None: + yield obj + +def WeakValuedItemIterator(weakdict): + for wr in weakdict.data.itervalues(): + value = wr() + if value is not None: + yield wr.key, value |