commit: use DEFINE_LIST_SORT
Use DEFINE_LIST_SORT to build a typed sort function for commit_list entries instead of calling llist_mergesort(). This gets rid of the next pointer accessor functions and their calling overhead at the cost of a slightly increased object text size. Before: __TEXT __DATA __OBJC others dec hex 18795 92 0 104654 123541 1e295 commit.o With this patch: __TEXT __DATA __OBJC others dec hex 18963 92 0 106094 125149 1e8dd commit.o Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
47c30f7daa
commit
c0fb5774a6
20
commit.c
20
commit.c
@ -631,10 +631,11 @@ struct commit_list * commit_list_insert_by_date(struct commit *item, struct comm
|
|||||||
return commit_list_insert(item, pp);
|
return commit_list_insert(item, pp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int commit_list_compare_by_date(const void *a, const void *b)
|
static int commit_list_compare_by_date(const struct commit_list *a,
|
||||||
|
const struct commit_list *b)
|
||||||
{
|
{
|
||||||
timestamp_t a_date = ((const struct commit_list *)a)->item->date;
|
timestamp_t a_date = a->item->date;
|
||||||
timestamp_t b_date = ((const struct commit_list *)b)->item->date;
|
timestamp_t b_date = b->item->date;
|
||||||
if (a_date < b_date)
|
if (a_date < b_date)
|
||||||
return 1;
|
return 1;
|
||||||
if (a_date > b_date)
|
if (a_date > b_date)
|
||||||
@ -642,20 +643,11 @@ static int commit_list_compare_by_date(const void *a, const void *b)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void *commit_list_get_next(const void *a)
|
DEFINE_LIST_SORT(static, commit_list_sort, struct commit_list, next);
|
||||||
{
|
|
||||||
return ((const struct commit_list *)a)->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void commit_list_set_next(void *a, void *next)
|
|
||||||
{
|
|
||||||
((struct commit_list *)a)->next = next;
|
|
||||||
}
|
|
||||||
|
|
||||||
void commit_list_sort_by_date(struct commit_list **list)
|
void commit_list_sort_by_date(struct commit_list **list)
|
||||||
{
|
{
|
||||||
*list = llist_mergesort(*list, commit_list_get_next, commit_list_set_next,
|
commit_list_sort(list, commit_list_compare_by_date);
|
||||||
commit_list_compare_by_date);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct commit *pop_most_recent_commit(struct commit_list **list,
|
struct commit *pop_most_recent_commit(struct commit_list **list,
|
||||||
|
Reference in New Issue
Block a user