Rev 140: Implement .num_refs and .num_referrers in http://bazaar.launchpad.net/~jameinel/meliae/mem-object-collection

John Arbash Meinel john at arbash-meinel.com
Mon Dec 28 05:27:58 GMT 2009


At http://bazaar.launchpad.net/~jameinel/meliae/mem-object-collection

------------------------------------------------------------
revno: 140
revision-id: john at arbash-meinel.com-20091228052742-5a4pyc9lmwpukvy5
parent: john at arbash-meinel.com-20091228052331-rlb3yi3hdgr3kchu
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: mem-object-collection
timestamp: Sun 2009-12-27 23:27:42 -0600
message:
  Implement .num_refs and .num_referrers
-------------- next part --------------
=== modified file 'meliae/_loader.pyx'
--- a/meliae/_loader.pyx	2009-12-28 05:23:31 +0000
+++ b/meliae/_loader.pyx	2009-12-28 05:27:42 +0000
@@ -241,6 +241,10 @@
             return 0
         return self._obj.ref_list.size
 
+    property num_refs:
+        def __get__(self):
+            return self.__len__()
+
     def _intern_from_cache(self, cache):
         self._ensure_obj()
         address = _set_default(cache, <object>self._obj.address)
@@ -279,6 +283,15 @@
             _free_ref_list(self._obj.referrer_list)
             self._obj.referrer_list = _list_to_ref_list(value)
 
+    property num_referrers:
+        """The length of the referrers list."""
+        def __get__(self):
+            self._ensure_obj()
+            if self._obj.referrer_list == NULL:
+                return 0
+            return self._obj.referrer_list.size
+
+
     def __getitem__(self, offset):
         cdef long off
         self._ensure_obj()

=== modified file 'meliae/tests/test__loader.py'
--- a/meliae/tests/test__loader.py	2009-12-28 05:23:31 +0000
+++ b/meliae/tests/test__loader.py	2009-12-28 05:27:42 +0000
@@ -346,10 +346,12 @@
     def test_ref_list(self):
         mop = self.moc.add(1234567, 'type', 256, ref_list=[1, 2, 3])
         self.assertEqual(3, len(mop))
+        self.assertEqual(3, mop.num_refs)
         self.assertEqual([1, 2, 3], mop.ref_list)
         mop.ref_list = [87654321, 23456]
         self.assertEqual([87654321, 23456], mop.ref_list)
         self.assertEqual(2, len(mop))
+        self.assertEqual(2, mop.num_refs)
 
     def test__getitem__(self):
         mop = self.moc.add(1234567, 'type', 256, ref_list=[0, 255])
@@ -375,9 +377,13 @@
         mop = self.moc.add(1234567, 'type', 256, ref_list=[0, 255])
         mop0 = self.moc[0]
         self.assertEqual((), mop0.referrers)
+        self.assertEqual(0, mop0.num_referrers)
         mop255 = self.moc[255]
         self.assertEqual((), mop255.referrers)
+        self.assertEqual(0, mop255.num_referrers)
         mop0.referrers = [1234567]
+        self.assertEqual(1, mop0.num_referrers)
         self.assertEqual([1234567], mop0.referrers)
         mop255.referrers = [1234567]
+        self.assertEqual(1, mop255.num_referrers)
         self.assertEqual([1234567], mop255.referrers)



More information about the bazaar-commits mailing list