Rev 2248: change _find_nodes_for_pos to return the node it just evaluated. in http://bzr.arbash-meinel.com/branches/bzr/0.15-dev/list_patch

John Arbash Meinel john at arbash-meinel.com
Tue Jan 30 01:33:38 GMT 2007


At http://bzr.arbash-meinel.com/branches/bzr/0.15-dev/list_patch

------------------------------------------------------------
revno: 2248
revision-id: john at arbash-meinel.com-20070130013333-kav0btyhjumdj0z1
parent: john at arbash-meinel.com-20070130011856-ifomln3u7jxv6yf8
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: list_patch
timestamp: Mon 2007-01-29 19:33:33 -0600
message:
  change _find_nodes_for_pos to return the node it just evaluated.
modified:
  bzrlib/hybrid_linked_list.py   hybrid_linked_list.p-20070130001028-zlexwz74tzo56o2t-1
  bzrlib/tests/test_hybrid_linked_list.py test_hybrid_linked_l-20070130001028-zlexwz74tzo56o2t-2
-------------- next part --------------
=== modified file 'bzrlib/hybrid_linked_list.py'
--- a/bzrlib/hybrid_linked_list.py	2007-01-30 01:18:56 +0000
+++ b/bzrlib/hybrid_linked_list.py	2007-01-30 01:33:33 +0000
@@ -82,8 +82,8 @@
         return length
 
     def __getitem__(self, pos):
-        prev_range_id, cur_range_id, offset = self._find_nodes_for_pos(pos)
-        content_id, start, end = self._range_map[cur_range_id]
+        (prev_range_id, cur_range_id, offset,
+         content_id, start, end) = self._find_nodes_for_pos(pos)
         return self._content_map[content_id][start+offset]
 
     def flatten(self):
@@ -104,12 +104,10 @@
             cur_range_id is the node where the position would be found
             offset_in_cur_node is the offset into the current node (from start)
         """
-        # TODO: Pretty much everyone who calls _find_nodes_for_pos then needs
-        # to turn around and look up the cur_range_id in the _range_map. So
-        # extend the signature to return the extracted values.
         prev_range_id = None
         cur_range_id = self._head
         cur_pos = 0
+        content_id = start = end = None
 
         while cur_range_id is not None:
             content_id, start, end = self._range_map[cur_range_id]
@@ -119,7 +117,9 @@
             prev_range_id = cur_range_id
             cur_range_id = self._links[cur_range_id]
             cur_pos = next_pos
-        return prev_range_id, cur_range_id, pos - cur_pos
+            content_id = start = end = None
+        return (prev_range_id, cur_range_id, pos - cur_pos,
+                content_id, start, end)
 
     def _new_range_id(self, content_id, start, end):
         """Get a new range id."""
@@ -133,7 +133,8 @@
 
         new_range_id = self._new_range_id(new_content_id, 0, len(entries))
 
-        prev_range_id, cur_range_id, offset = self._find_nodes_for_pos(start)
+        (prev_range_id, cur_range_id, offset,
+         content_id, start, end) = self._find_nodes_for_pos(start)
 
         if offset == 0:
             # We are inserting before an existing node, or at the exact end of
@@ -159,7 +160,6 @@
             else:
                 # We need to break up the current node, and insert the
                 # requested one
-                content_id, start, end = self._range_map[cur_range_id]
                 break_point = start + offset
                 split_range_id = self._new_range_id(content_id, break_point,
                                                     end)

=== modified file 'bzrlib/tests/test_hybrid_linked_list.py'
--- a/bzrlib/tests/test_hybrid_linked_list.py	2007-01-30 01:18:56 +0000
+++ b/bzrlib/tests/test_hybrid_linked_list.py	2007-01-30 01:33:33 +0000
@@ -43,14 +43,16 @@
         hll._links = {0:1, 1:2, 2:None}
         hll._content_map = {0:[0, 1, 2, 3, 4, 5, 6, 7, 8]}
         self.assertEqual([0, 1, 3, 4, 5, 6], list(hll))
-        self.assertEqual((None, 0, 0), hll._find_nodes_for_pos(0))
-        self.assertEqual((None, 0, 1), hll._find_nodes_for_pos(1))
-        self.assertEqual((0, 1, 0), hll._find_nodes_for_pos(2))
-        self.assertEqual((0, 1, 1), hll._find_nodes_for_pos(3))
-        self.assertEqual((0, 1, 2), hll._find_nodes_for_pos(4))
-        self.assertEqual((1, 2, 0), hll._find_nodes_for_pos(5))
-        self.assertEqual((2, None, 0), hll._find_nodes_for_pos(6))
-        self.assertEqual((2, None, 1), hll._find_nodes_for_pos(7))
+        self.assertEqual((None, 0, 0, 0, 0, 2), hll._find_nodes_for_pos(0))
+        self.assertEqual((None, 0, 1, 0, 0, 2), hll._find_nodes_for_pos(1))
+        self.assertEqual((0, 1, 0, 0, 3, 6), hll._find_nodes_for_pos(2))
+        self.assertEqual((0, 1, 1, 0, 3, 6), hll._find_nodes_for_pos(3))
+        self.assertEqual((0, 1, 2, 0, 3, 6), hll._find_nodes_for_pos(4))
+        self.assertEqual((1, 2, 0, 0, 6, 7), hll._find_nodes_for_pos(5))
+        self.assertEqual((2, None, 0, None, None, None),
+                         hll._find_nodes_for_pos(6))
+        self.assertEqual((2, None, 1, None, None, None),
+                         hll._find_nodes_for_pos(7))
 
     def test__getitem__(self):
         hll = hybrid_linked_list.HybridLinkedList([])



More information about the bazaar-commits mailing list