Rev 3662: Flatten the outermost str.join() into memcpy's in http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/btree

John Arbash Meinel john at arbash-meinel.com
Thu Aug 21 22:33:52 BST 2008


At http://bzr.arbash-meinel.com/branches/bzr/1.7-dev/btree

------------------------------------------------------------
revno: 3662
revision-id: john at arbash-meinel.com-20080821213350-z3mh2p34aiiz7nno
parent: john at arbash-meinel.com-20080821212617-gng6c2akl8985wcm
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: btree
timestamp: Thu 2008-08-21 16:33:50 -0500
message:
  Flatten the outermost str.join() into memcpy's
modified:
  bzrlib/_parse_btree_c.pyx      _parse_btree_c.pyx-20080703034413-3q25bklkenti3p8p-2
-------------- next part --------------
=== modified file 'bzrlib/_parse_btree_c.pyx'
--- a/bzrlib/_parse_btree_c.pyx	2008-08-21 21:26:17 +0000
+++ b/bzrlib/_parse_btree_c.pyx	2008-08-21 21:33:50 +0000
@@ -262,6 +262,9 @@
     cdef char * out
     cdef Py_ssize_t ref_len
     cdef Py_ssize_t next_len
+    cdef int first_ref_list
+    cdef int first_ref
+    cdef int first_key
 
     # I don't expect that we can do faster than string.join()
     string_key = '\x00'.join(node[1])
@@ -301,13 +304,6 @@
                             ref_len = ref_len + (next_len - 1)
                             for ref in reference:
                                 ref_len = ref_len + len(ref)
-        flattened_references = []
-        for ref_list in node[3]:
-            ref_keys = []
-            for reference in ref_list:
-                ref_keys.append('\x00'.join(reference))
-            flattened_references.append('\r'.join(ref_keys))
-        refs = '\t'.join(flattened_references)
 
     # So we have the (key NULL refs NULL value LF)
     key_len = PyString_Size(string_key)
@@ -322,8 +318,19 @@
     out[0] = c'\0'
     out = out + 1
     if ref_len > 0:
-        memcpy(out, PyString_AsString(refs), ref_len)
-        out = out + ref_len
+        first_ref_list = 1
+        for ref_list in node[3]:
+            if first_ref_list == 0:
+                out[0] = c'\t'
+                out = out + 1
+            first_ref_list = 0
+            ref_keys = []
+            for reference in ref_list:
+                ref_keys.append('\x00'.join(reference))
+            flat_ref_list = '\r'.join(ref_keys)
+            next_len = PyString_Size(flat_ref_list)
+            memcpy(out, PyString_AsString(flat_ref_list), next_len)
+            out = out + next_len
     out[0] = c'\0'
     out = out + 1
     memcpy(out, value, value_len)



More information about the bazaar-commits mailing list