git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 2/3] Convert diffcore-rename's rename_src to the new sorted-array API.

From
Yann Dirson <ydirson@altern.org>
Date
Nov 6, 2010, 21:00 UTC
Message-ID
<1289077235-3208-3-git-send-email-ydirson@altern.org>
In-Reply-To
<1289077235-3208-1-git-send-email-ydirson@altern.org>
Alas, this time we could not keep the same prototype :)
Signed-off-by: Yann Dirson <ydirson@altern.org>
---
 diffcore-rename.c |   53 ++++++++++++++++-------------------------------------
 1 files changed, 16 insertions(+), 37 deletions(-)
diff --git a/diffcore-rename.c b/diffcore-rename.c
index 72a9b94..ec40cf7 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -30,46 +30,25 @@ declare_sorted_array(static, struct diff_rename_dst, rename_dst,
 		     rename_dst_cmp, rename_dst_init)
 
 /* Table of rename/copy src files */
-static struct diff_rename_src {
+
+struct diff_rename_src {
 	struct diff_filespec *one;
 	unsigned short score; /* to remember the break score */
-} *rename_src;
-static int rename_src_nr, rename_src_alloc;
+};
 
-static struct diff_rename_src *register_rename_src(struct diff_filespec *one,
-						   unsigned short score)
+static int rename_src_cmp(void* data, struct diff_rename_src *elem)
 {
-	int first, last;
-
-	first = 0;
-	last = rename_src_nr;
-	while (last > first) {
-		int next = (last + first) >> 1;
-		struct diff_rename_src *src = &(rename_src[next]);
-		int cmp = strcmp(one->path, src->one->path);
-		if (!cmp)
-			return src;
-		if (cmp < 0) {
-			last = next;
-			continue;
-		}
-		first = next+1;
-	}
-
-	/* insert to make it at "first" */
-	if (rename_src_alloc <= rename_src_nr) {
-		rename_src_alloc = alloc_nr(rename_src_alloc);
-		rename_src = xrealloc(rename_src,
-				      rename_src_alloc * sizeof(*rename_src));
-	}
-	rename_src_nr++;
-	if (first < rename_src_nr)
-		memmove(rename_src + first + 1, rename_src + first,
-			(rename_src_nr - first - 1) * sizeof(*rename_src));
-	rename_src[first].one = one;
-	rename_src[first].score = score;
-	return &(rename_src[first]);
+	struct diff_filepair *p = data;
+	return strcmp(p->one->path, elem->one->path);
+}
+static void rename_src_init(struct diff_rename_src *elem, void* data)
+{
+	struct diff_filepair *p = data;
+	elem->one = p->one;
+	elem->score = p->score;
 }
+declare_sorted_array(static, struct diff_rename_src, rename_src,
+		     rename_src_cmp, rename_src_init)
 
 static int basename_same(struct diff_filespec *src, struct diff_filespec *dst)
 {
@@ -426,7 +405,7 @@ void diffcore_rename(struct diff_options *options)
 			 */
 			if (p->broken_pair && !p->score)
 				p->one->rename_used++;
-			register_rename_src(p->one, p->score);
+			locate_rename_src(p, 1);
 		}
 		else if (detect_rename == DIFF_DETECT_COPY) {
 			/*
@@ -434,7 +413,7 @@ void diffcore_rename(struct diff_options *options)
 			 * one, to indicate ourselves as a user.
 			 */
 			p->one->rename_used++;
-			register_rename_src(p->one, p->score);
+			locate_rename_src(p, 1);
 		}
 	}
 	if (rename_dst_nr == 0 || rename_src_nr == 0)
-- 
1.7.2.3
Previous: Yann DirsonNext: Yann Dirson
Message 3 of 4 in “generalizing sorted-array handling”
  1. generalizing sorted-array handlingYann Dirson, Nov 6, 2010
  2. 1/3 Introduce sorted-array binary-search function.Yann Dirson, Nov 6, 2010
  3. 2/3 Convert diffcore-rename's rename_src to the new sorted-array API.Yann Dirson, Nov 6, 2010
  4. 3/3 [RFC] Add a sorted-list API for use-cases that require to get the element index.Yann Dirson, Nov 6, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.