Rev 135: Implement iterkeys() and __iter__ in http://bazaar.launchpad.net/~jameinel/meliae/mem-object-collection
John Arbash Meinel
john at arbash-meinel.com
Mon Dec 28 05:09:49 GMT 2009
At http://bazaar.launchpad.net/~jameinel/meliae/mem-object-collection
------------------------------------------------------------
revno: 135
revision-id: john at arbash-meinel.com-20091228050933-w7srqpdorh9tglby
parent: john at arbash-meinel.com-20091228050617-h1znhvissa2tkzyp
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: mem-object-collection
timestamp: Sun 2009-12-27 23:09:33 -0600
message:
Implement iterkeys() and __iter__
The implementation is, of course, a bit ugly, but it works.
-------------- next part --------------
=== modified file 'meliae/_loader.pyx'
--- a/meliae/_loader.pyx 2009-12-28 05:06:17 +0000
+++ b/meliae/_loader.pyx 2009-12-28 05:09:33 +0000
@@ -559,6 +559,24 @@
PyMem_Free(self._table)
self._table = NULL
+ def __iter__(self):
+ return self.iterkeys()
+
+ def iterkeys(self):
+ cdef long i
+ cdef _MemObject *cur
+ cdef _MemObjectProxy proxy
+
+ values = []
+ for i from 0 <= i < self._table_mask:
+ cur = self._table[i]
+ if cur == NULL or cur == _dummy:
+ continue
+ else:
+ address = <object>cur.address
+ values.append(address)
+ return iter(values)
+
def iteritems(self):
"""Iterate over (key, value) tuples."""
cdef long i
=== modified file 'meliae/tests/test__loader.py'
--- a/meliae/tests/test__loader.py 2009-12-28 05:06:17 +0000
+++ b/meliae/tests/test__loader.py 2009-12-28 05:09:33 +0000
@@ -241,6 +241,14 @@
self.assertEqual([(1024, 1024), (512, 512)],
[(k, v.address) for k,v in moc.iteritems()])
+ def test__iter__(self):
+ moc = _loader.MemObjectCollection()
+ moc.add(0, 'bar', 100)
+ moc.add(1024, 'baz', 102)
+ moc.add(512, 'bing', 103)
+ self.assertEqual([0, 1024, 512], list(moc))
+ self.assertEqual([0, 1024, 512], list(moc.iterkeys()))
+
class Test_MemObjectProxy(tests.TestCase):
More information about the bazaar-commits
mailing list