packfile: use DEFINE_LIST_SORT

Build a typed sort function for packed_git lists using DEFINE_LIST_SORT
instead of calling llist_mergesort().  This gets rid of the next pointer
accessor functions and their calling overhead at the cost of slightly
increased object text size.

Before:
__TEXT	__DATA	__OBJC	others	dec	hex
20218	320	0	110936	131474	20192	packfile.o

With this patch:
__TEXT	__DATA	__OBJC	others	dec	hex
20430	320	0	112619	133369	208f9	packfile.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:
René Scharfe 2022-07-16 19:01:18 +02:00 committed by Junio C Hamano
parent 6fc9fec07b
commit 9b9f5f6217

View File

@ -926,20 +926,10 @@ unsigned long repo_approximate_object_count(struct repository *r)
return r->objects->approximate_object_count; return r->objects->approximate_object_count;
} }
static void *get_next_packed_git(const void *p) DEFINE_LIST_SORT(static, sort_packs, struct packed_git, next);
{
return ((const struct packed_git *)p)->next;
}
static void set_next_packed_git(void *p, void *next) static int sort_pack(const struct packed_git *a, const struct packed_git *b)
{ {
((struct packed_git *)p)->next = next;
}
static int sort_pack(const void *a_, const void *b_)
{
const struct packed_git *a = a_;
const struct packed_git *b = b_;
int st; int st;
/* /*
@ -966,9 +956,7 @@ static int sort_pack(const void *a_, const void *b_)
static void rearrange_packed_git(struct repository *r) static void rearrange_packed_git(struct repository *r)
{ {
r->objects->packed_git = llist_mergesort( sort_packs(&r->objects->packed_git, sort_pack);
r->objects->packed_git, get_next_packed_git,
set_next_packed_git, sort_pack);
} }
static void prepare_packed_git_mru(struct repository *r) static void prepare_packed_git_mru(struct repository *r)