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