Rev 138: Implement MemoryObjectCollection.keys(), and MemObject.__len__ in http://bazaar.launchpad.net/~jameinel/meliae/mem-object-collection
John Arbash Meinel
john at arbash-meinel.com
Mon Dec 28 05:19:24 GMT 2009
At http://bazaar.launchpad.net/~jameinel/meliae/mem-object-collection
------------------------------------------------------------
revno: 138
revision-id: john at arbash-meinel.com-20091228051909-8ddq8xvm6r2eemx4
parent: john at arbash-meinel.com-20091228051505-rrc9gc603b7ijhpy
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: mem-object-collection
timestamp: Sun 2009-12-27 23:19:09 -0600
message:
Implement MemoryObjectCollection.keys(), and MemObject.__len__
-------------- next part --------------
=== modified file 'meliae/_loader.pyx'
--- a/meliae/_loader.pyx 2009-12-28 05:15:05 +0000
+++ b/meliae/_loader.pyx 2009-12-28 05:19:09 +0000
@@ -577,6 +577,9 @@
return self.iterkeys()
def iterkeys(self):
+ return iter(self.keys())
+
+ def keys(self):
cdef long i
cdef _MemObject *cur
cdef _MemObjectProxy proxy
@@ -589,7 +592,7 @@
else:
address = <object>cur.address
values.append(address)
- return iter(values)
+ return values
def items(self):
return self.iteritems()
@@ -705,6 +708,11 @@
return 0
return self._ref_list.size
+ def __len__(self):
+ if self._ref_list == NULL:
+ return 0
+ return self._ref_list.size
+
property referrers:
"""The list of objects that reference this object.
=== modified file 'meliae/loader.py'
--- a/meliae/loader.py 2009-12-28 05:06:17 +0000
+++ b/meliae/loader.py 2009-12-28 05:19:09 +0000
@@ -342,7 +342,7 @@
def get_all(self, type_str):
"""Return all objects that match a given type."""
all = [o for o in self.objs.itervalues() if o.type_str == type_str]
- all.sort(key=lambda x:(x.size, x.num_refs, x.num_referrers),
+ all.sort(key=lambda x:(x.size, len(x), x.num_referrers),
reverse=True)
return all
@@ -377,11 +377,11 @@
if self.show_progress and item_idx & 0x5ff:
sys.stderr.write('checked %8d / %8d collapsed %8d \r'
% (item_idx, total, collapsed))
- if obj.type_str == 'module' and obj.num_refs == 1:
+ if obj.type_str == 'module' and len(obj) == 1:
(dict_ref,) = obj.ref_list
extra_refs = []
else:
- if obj.num_refs != 2:
+ if len(obj) != 2:
continue
(dict_ref, type_ref) = obj.ref_list
type_obj = self.objs[type_ref]
=== modified file 'meliae/tests/test__loader.py'
--- a/meliae/tests/test__loader.py 2009-12-28 05:15:05 +0000
+++ b/meliae/tests/test__loader.py 2009-12-28 05:19:09 +0000
@@ -254,6 +254,17 @@
self.assertEqual([(1024, 1024), (512, 512)],
[(k, v.address) for k,v in moc.iteritems()])
+ def test_keys(self):
+ moc = _loader.MemObjectCollection()
+ moc.add(0, 'bar', 100)
+ moc.add(1024, 'baz', 102)
+ moc.add(512, 'bing', 103)
+ keys = moc.keys()
+ self.assertTrue(isinstance(keys, list))
+ self.assertEqual([0, 1024, 512], keys)
+ del moc[0]
+ self.assertEqual([1024, 512], moc.keys())
+
def test__iter__(self):
moc = _loader.MemObjectCollection()
moc.add(0, 'bar', 100)
@@ -261,6 +272,9 @@
moc.add(512, 'bing', 103)
self.assertEqual([0, 1024, 512], list(moc))
self.assertEqual([0, 1024, 512], list(moc.iterkeys()))
+ del moc[0]
+ self.assertEqual([1024, 512], list(moc))
+ self.assertEqual([1024, 512], list(moc.iterkeys()))
class Test_MemObjectProxy(tests.TestCase):
More information about the bazaar-commits
mailing list