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:
parent
6fc9fec07b
commit
9b9f5f6217
18
packfile.c
18
packfile.c
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user