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