git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "René Scharfe" <l.s.r@web.de>
To: Git List <git@vger.kernel.org>
Cc: Junio C Hamano <gitster@pobox.com>
Subject: [PATCH 07/10] commit: use DEFINE_LIST_SORT
Date: Sat, 16 Jul 2022 18:59:05 +0200	[thread overview]
Message-ID: <396b927e-5bbd-1b7d-669e-8e22740b5295@web.de> (raw)
In-Reply-To: <4d7cd286-398e-215c-f2bd-aa7e8207be4f@web.de>

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>
---
 commit.c | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/commit.c b/commit.c
index 1fb1b2ea90..0db461f973 100644
--- a/commit.c
+++ b/commit.c
@@ -642,10 +642,11 @@ struct commit_list * commit_list_insert_by_date(struct commit *item, struct comm
 	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 b_date = ((const struct commit_list *)b)->item->date;
+	timestamp_t a_date = a->item->date;
+	timestamp_t b_date = b->item->date;
 	if (a_date < b_date)
 		return 1;
 	if (a_date > b_date)
@@ -653,20 +654,11 @@ static int commit_list_compare_by_date(const void *a, const void *b)
 	return 0;
 }

-static void *commit_list_get_next(const void *a)
-{
-	return ((const struct commit_list *)a)->next;
-}
-
-static void commit_list_set_next(void *a, void *next)
-{
-	((struct commit_list *)a)->next = next;
-}
+DEFINE_LIST_SORT(static, commit_list_sort, struct commit_list, next);

 void commit_list_sort_by_date(struct commit_list **list)
 {
-	*list = llist_mergesort(*list, commit_list_get_next, commit_list_set_next,
-				commit_list_compare_by_date);
+	commit_list_sort(list, commit_list_compare_by_date);
 }

 struct commit *pop_most_recent_commit(struct commit_list **list,
--
2.37.1

  parent reply	other threads:[~2022-07-16 16:59 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-16 16:50 [PATCH 00/10] typed sort of linked lists René Scharfe
2022-07-16 16:52 ` [PATCH 01/10] mergesort: unify ranks loops René Scharfe
2022-07-16 16:53 ` [PATCH 02/10] mergesort: tighten merge loop René Scharfe
2022-07-16 16:54 ` [PATCH 03/10] mergesort: add macros for typed sort of linked lists René Scharfe
2022-07-16 16:56 ` [PATCH 04/10] test-mergesort: use DEFINE_LIST_SORT_DEBUG René Scharfe
2022-07-16 16:57 ` [PATCH 05/10] test-mergesort: use DEFINE_LIST_SORT René Scharfe
2022-07-16 16:58 ` [PATCH 06/10] blame: " René Scharfe
2022-07-16 16:59 ` René Scharfe [this message]
2022-07-16 16:59 ` [PATCH 08/10] fetch-pack: " René Scharfe
2022-07-16 17:01 ` [PATCH 09/10] packfile: " René Scharfe
2022-07-16 17:02 ` [PATCH 10/10] mergesort: remove llist_mergesort() René Scharfe
2022-07-17 22:31 ` [PATCH 00/10] typed sort of linked lists Junio C Hamano
2022-07-25 18:52   ` Junio C Hamano
2022-07-25 20:35     ` Derrick Stolee
2022-07-25 20:49       ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=396b927e-5bbd-1b7d-669e-8e22740b5295@web.de \
    --to=l.s.r@web.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).