]> git.ipfire.org Git - thirdparty/git.git/commit - prio-queue.c
prio-queue: priority queue of pointers to structs
authorJunio C Hamano <gitster@pobox.com>
Fri, 7 Jun 2013 02:13:50 +0000 (19:13 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 11 Jun 2013 22:15:21 +0000 (15:15 -0700)
commitb4b594a3154078430b04fad4f6ffbed9c7274be5
tree71bb8164f9e98ca159fbb952b6a289fd899337ad
parent08f704f294e4a3525b405c2cb1f4ee85e73fd92c
prio-queue: priority queue of pointers to structs

Traditionally we used a singly linked list of commits to hold a set
of in-flight commits while traversing history.  The most typical use
of the list is to add commits that are newly discovered to it, keep
the list sorted by commit timestamp, pick up the newest one from the
list, and keep digging.  The cost of keeping the singly linked list
sorted is nontrivial, and this typical use pattern better matches a
priority queue.

Introduce a prio-queue structure, that can be used either as a LIFO
stack, or a priority queue.  This will be used in the next patch to
hold in-flight commits during sort-in-topological-order.

Tests and the idea to make it usable for any "void *" pointers to
"things" are by Jeff King.  Bugs are mine.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
.gitignore
Makefile
prio-queue.c [new file with mode: 0644]
prio-queue.h [new file with mode: 0644]
t/t0009-prio-queue.sh [new file with mode: 0755]
test-prio-queue.c [new file with mode: 0644]