Convert weak iterators to generator form.

This commit is contained in:
Raymond Hettinger 2004-08-13 07:12:45 +00:00
parent bf9ac4bd89
commit cc0def1868

View File

@ -277,54 +277,26 @@ class WeakKeyDictionary(UserDict.UserDict):
self.update(kwargs) self.update(kwargs)
class BaseIter: def WeakKeyedKeyIterator(weakdict):
def __iter__(self): for wr in weakdict.data.iterkeys():
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() obj = wr()
if obj is not None: if obj is not None:
return obj yield obj
def WeakKeyedItemIterator(weakdict):
class WeakKeyedItemIterator(BaseIter): for wr, value in weakdict.data.iteritems():
def __init__(self, weakdict):
self._next = weakdict.data.iteritems().next
def next(self):
while 1:
wr, value = self._next()
key = wr() key = wr()
if key is not None: if key is not None:
return key, value yield key, value
def WeakValuedValueIterator(weakdict):
class WeakValuedValueIterator(BaseIter): for wr in weakdict.data.itervalues():
def __init__(self, weakdict):
self._next = weakdict.data.itervalues().next
def next(self):
while 1:
wr = self._next()
obj = wr() obj = wr()
if obj is not None: if obj is not None:
return obj yield obj
def WeakValuedItemIterator(weakdict):
class WeakValuedItemIterator(BaseIter): for wr in weakdict.data.itervalues():
def __init__(self, weakdict):
self._next = weakdict.data.itervalues().next
def next(self):
while 1:
wr = self._next()
value = wr() value = wr()
if value is not None: if value is not None:
return wr.key, value yield wr.key, value