• Show log

    Commit

  • Hash : de18f276
    Author : Vicent Marti
    Date : 2011-07-07T01:46:20

    vector: Timsort all of the things
    
    Drop the GLibc implementation of Merge Sort and replace it with Timsort.
    
    The algorithm has been tuned to work on arrays of pointers (void **),
    so there's no longer a need to abstract the byte-width of each element
    in the array.
    
    All the comparison callbacks now take pointers-to-elements, not
    pointers-to-pointers, so there's now one less level of dereferencing.
    
    E.g.
    
    	 int index_cmp(const void *a, const void *b)
    	 {
    	-	const git_index_entry *entry_a = *(const git_index_entry **)(a);
    	+	const git_index_entry *entry_a = (const git_index_entry *)(a);
    
    The result is up to a 40% speed-up when sorting vectors. Memory usage
    remains lineal.
    
    A new `bsearch` implementation has been added, whose callback also
    supplies pointer-to-elements, to uniform the Vector API again.