[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/4] git-merge-changelog: ssize_t → ptrdiff_t
|
From: |
Paul Eggert |
|
Subject: |
[PATCH 2/4] git-merge-changelog: ssize_t → ptrdiff_t |
|
Date: |
Sun, 21 May 2023 14:09:33 -0700 |
Prefer ptrdiff_t to ssize_t, as per
<https://lists.gnu.org/archive/html/emacs-devel/2014-10/msg00019.html>.
* lib/git-merge-changelog.c (struct entries_mapping)
(entries_mapping_get, entries_mapping_reverse_get)
(compute_mapping, struct edit, struct differences, OFFSET)
(OFFSET_MAX, EXTRA_CONTEXT_FIELDS, compute_differences, main):
Use ptrdiff_t, not ssize_t.
* modules/git-merge-changelog (Depends-on): Add stdint for PTRDIFF_MAX.
---
ChangeLog | 10 ++++
lib/git-merge-changelog.c | 109 ++++++++++++++++++------------------
modules/git-merge-changelog | 1 +
3 files changed, 66 insertions(+), 54 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index bed79ab76b..611a8e5014 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2023-05-21 Paul Eggert <eggert@cs.ucla.edu>
+ git-merge-changelog: ssize_t → ptrdiff_t
+ Prefer ptrdiff_t to ssize_t, as per
+ <https://lists.gnu.org/archive/html/emacs-devel/2014-10/msg00019.html>.
+ * lib/git-merge-changelog.c (struct entries_mapping)
+ (entries_mapping_get, entries_mapping_reverse_get)
+ (compute_mapping, struct edit, struct differences, OFFSET)
+ (OFFSET_MAX, EXTRA_CONTEXT_FIELDS, compute_differences, main):
+ Use ptrdiff_t, not ssize_t.
+ * modules/git-merge-changelog (Depends-on): Add stdint for PTRDIFF_MAX.
+
git-merge-changelog: port to ssize_t padding
* lib/git-merge-changelog.c (OFFSET_MAX): New macro, as a nicety.
diff --git a/lib/git-merge-changelog.c b/lib/git-merge-changelog.c
index 16d874bd04..3e749ed59d 100644
--- a/lib/git-merge-changelog.c
+++ b/lib/git-merge-changelog.c
@@ -157,6 +157,7 @@
#include <getopt.h>
#include <limits.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -372,18 +373,18 @@ struct entries_mapping
/* Mapping from indices in FILE1 to indices in FILE2.
A value -1 means that the entry from FILE1 is not found in FILE2.
A value -2 means that it has not yet been computed. */
- ssize_t *index_mapping;
+ ptrdiff_t *index_mapping;
/* Mapping from indices in FILE2 to indices in FILE1.
A value -1 means that the entry from FILE2 is not found in FILE1.
A value -2 means that it has not yet been computed. */
- ssize_t *index_mapping_reverse;
+ ptrdiff_t *index_mapping_reverse;
};
/* Look up (or lazily compute) the mapping of an entry in FILE1.
i is the index in FILE1.
Return the index in FILE2, or -1 when the entry is not found in FILE2. */
-static ssize_t
-entries_mapping_get (struct entries_mapping *mapping, ssize_t i)
+static ptrdiff_t
+entries_mapping_get (struct entries_mapping *mapping, ptrdiff_t i)
{
if (mapping->index_mapping[i] < -1)
{
@@ -392,10 +393,10 @@ entries_mapping_get (struct entries_mapping *mapping,
ssize_t i)
size_t n1 = file1->num_entries;
size_t n2 = file2->num_entries;
struct entry *entry_i = file1->entries[i];
- ssize_t j;
+ ptrdiff_t j;
/* Search whether it approximately occurs in file2. */
- ssize_t best_j = -1;
+ ptrdiff_t best_j = -1;
double best_j_similarity = 0.0;
for (j = n2 - 1; j >= 0; j--)
if (mapping->index_mapping_reverse[j] < 0)
@@ -413,9 +414,9 @@ entries_mapping_get (struct entries_mapping *mapping,
ssize_t i)
/* Found a similar entry in file2. */
struct entry *entry_j = file2->entries[best_j];
/* Search whether it approximately occurs in file1 at index i. */
- ssize_t best_i = -1;
+ ptrdiff_t best_i = -1;
double best_i_similarity = 0.0;
- ssize_t ii;
+ ptrdiff_t ii;
for (ii = n1 - 1; ii >= 0; ii--)
if (mapping->index_mapping[ii] < 0)
{
@@ -445,8 +446,8 @@ entries_mapping_get (struct entries_mapping *mapping,
ssize_t i)
/* Look up (or lazily compute) the mapping of an entry in FILE2.
j is the index in FILE2.
Return the index in FILE1, or -1 when the entry is not found in FILE1. */
-static ssize_t
-entries_mapping_reverse_get (struct entries_mapping *mapping, ssize_t j)
+static ptrdiff_t
+entries_mapping_reverse_get (struct entries_mapping *mapping, ptrdiff_t j)
{
if (mapping->index_mapping_reverse[j] < -1)
{
@@ -455,10 +456,10 @@ entries_mapping_reverse_get (struct entries_mapping
*mapping, ssize_t j)
size_t n1 = file1->num_entries;
size_t n2 = file2->num_entries;
struct entry *entry_j = file2->entries[j];
- ssize_t i;
+ ptrdiff_t i;
/* Search whether it approximately occurs in file1. */
- ssize_t best_i = -1;
+ ptrdiff_t best_i = -1;
double best_i_similarity = 0.0;
for (i = n1 - 1; i >= 0; i--)
if (mapping->index_mapping[i] < 0)
@@ -476,9 +477,9 @@ entries_mapping_reverse_get (struct entries_mapping
*mapping, ssize_t j)
/* Found a similar entry in file1. */
struct entry *entry_i = file1->entries[best_i];
/* Search whether it approximately occurs in file2 at index j. */
- ssize_t best_j = -1;
+ ptrdiff_t best_j = -1;
double best_j_similarity = 0.0;
- ssize_t jj;
+ ptrdiff_t jj;
for (jj = n2 - 1; jj >= 0; jj--)
if (mapping->index_mapping_reverse[jj] < 0)
{
@@ -519,18 +520,18 @@ compute_mapping (struct changelog_file *file1, struct
changelog_file *file2,
struct entries_mapping *result)
{
/* Mapping from indices in file1 to indices in file2. */
- ssize_t *index_mapping;
+ ptrdiff_t *index_mapping;
/* Mapping from indices in file2 to indices in file1. */
- ssize_t *index_mapping_reverse;
+ ptrdiff_t *index_mapping_reverse;
size_t n1 = file1->num_entries;
size_t n2 = file2->num_entries;
- ssize_t i, j;
+ ptrdiff_t i, j;
- index_mapping = XNMALLOC (n1, ssize_t);
+ index_mapping = XNMALLOC (n1, ptrdiff_t);
for (i = 0; i < n1; i++)
index_mapping[i] = -2;
- index_mapping_reverse = XNMALLOC (n2, ssize_t);
+ index_mapping_reverse = XNMALLOC (n2, ptrdiff_t);
for (j = 0; j < n2; j++)
index_mapping_reverse[j] = -2;
@@ -556,13 +557,13 @@ compute_mapping (struct changelog_file *file1, struct
changelog_file *file2,
as long as they pair up. Unpaired occurrences of the same
entry are left without mapping. */
{
- ssize_t curr_i = i;
- ssize_t curr_j = j;
+ ptrdiff_t curr_i = i;
+ ptrdiff_t curr_j = j;
for (;;)
{
- ssize_t next_i;
- ssize_t next_j;
+ ptrdiff_t next_i;
+ ptrdiff_t next_j;
next_i =
gl_list_indexof_from (file1->entries_reversed,
@@ -615,9 +616,9 @@ struct edit
{
enum edit_type type;
/* Range of indices into the entries of FILE1. */
- ssize_t i1, i2; /* first, last index; only used for CHANGE, REMOVAL */
+ ptrdiff_t i1, i2; /* first, last index; only used for CHANGE, REMOVAL
*/
/* Range of indices into the entries of FILE2. */
- ssize_t j1, j2; /* first, last index; only used for ADDITION, CHANGE */
+ ptrdiff_t j1, j2; /* first, last index; only used for ADDITION, CHANGE
*/
};
/* This structure represents the differences from one file, FILE1, to another
@@ -626,10 +627,10 @@ struct differences
{
/* An array mapping FILE1 indices to FILE2 indices (or -1 when the entry
from FILE1 is not found in FILE2). */
- ssize_t *index_mapping;
+ ptrdiff_t *index_mapping;
/* An array mapping FILE2 indices to FILE1 indices (or -1 when the entry
from FILE2 is not found in FILE1). */
- ssize_t *index_mapping_reverse;
+ ptrdiff_t *index_mapping_reverse;
/* The edits that transform FILE1 into FILE2. */
size_t num_edits;
struct edit **edits;
@@ -638,11 +639,11 @@ struct differences
/* Import the difference detection algorithm from GNU diff. */
#define ELEMENT struct entry *
#define EQUAL entry_equals
-#define OFFSET ssize_t
-#define OFFSET_MAX SSIZE_MAX
+#define OFFSET ptrdiff_t
+#define OFFSET_MAX PTRDIFF_MAX
#define EXTRA_CONTEXT_FIELDS \
- ssize_t *index_mapping; \
- ssize_t *index_mapping_reverse;
+ ptrdiff_t *index_mapping; \
+ ptrdiff_t *index_mapping_reverse;
#define NOTE_DELETE(ctxt, xoff) \
ctxt->index_mapping[xoff] = -1
#define NOTE_INSERT(ctxt, yoff) \
@@ -663,19 +664,19 @@ compute_differences (struct changelog_file *file1, struct
changelog_file *file2,
struct context ctxt;
size_t n1 = file1->num_entries;
size_t n2 = file2->num_entries;
- ssize_t i;
- ssize_t j;
+ ptrdiff_t i;
+ ptrdiff_t j;
gl_list_t /* <struct edit *> */ edits;
ctxt.xvec = file1->entries;
ctxt.yvec = file2->entries;
- ctxt.index_mapping = XNMALLOC (n1, ssize_t);
+ ctxt.index_mapping = XNMALLOC (n1, ptrdiff_t);
for (i = 0; i < n1; i++)
ctxt.index_mapping[i] = 0;
- ctxt.index_mapping_reverse = XNMALLOC (n2, ssize_t);
+ ctxt.index_mapping_reverse = XNMALLOC (n2, ptrdiff_t);
for (j = 0; j < n2; j++)
ctxt.index_mapping_reverse[j] = 0;
- ctxt.fdiag = XNMALLOC (2 * (n1 + n2 + 3), ssize_t) + n2 + 1;
+ ctxt.fdiag = XNMALLOC (2 * (n1 + n2 + 3), ptrdiff_t) + n2 + 1;
ctxt.bdiag = ctxt.fdiag + n1 + n2 + 3;
ctxt.too_expensive = n1 + n2;
@@ -1222,7 +1223,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\
{
/* An addition to the top of modified_file.
Apply it to the top of mainstream_file. */
- ssize_t j;
+ ptrdiff_t j;
for (j = edit->j2; j >= edit->j1; j--)
{
struct entry *added_entry = modified_file.entries[j];
@@ -1231,10 +1232,10 @@ There is NO WARRANTY, to the extent permitted by law.\n\
}
else
{
- ssize_t i_before;
- ssize_t i_after;
- ssize_t k_before;
- ssize_t k_after;
+ ptrdiff_t i_before;
+ ptrdiff_t i_after;
+ ptrdiff_t k_before;
+ ptrdiff_t k_after;
i_before = diffs.index_mapping_reverse[edit->j1 - 1];
ASSERT (i_before >= 0);
i_after = (edit->j2 + 1 == modified_file.num_entries
@@ -1299,7 +1300,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\
for (i = edit->i1; i <= edit->i2; i++)
{
struct entry *removed_entry = ancestor_file.entries[i];
- ssize_t k = entries_mapping_get (&mapping, i);
+ ptrdiff_t k = entries_mapping_get (&mapping, i);
if (k >= 0
&& entry_equals (removed_entry,
mainstream_file.entries[k]))
@@ -1376,7 +1377,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\
separately. */
size_t num_changed = edit->i2 - edit->i1 + 1; /* >
0 */
size_t num_added = (edit->j2 - edit->j1 + 1) -
num_changed;
- ssize_t j;
+ ptrdiff_t j;
/* First part of the split
modified_file.entries[edit->j2 - edit->i2 + edit->i1]: */
gl_list_add_first (result_entries, split[0]);
/* The additions. */
@@ -1393,7 +1394,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\
? split[1]
: modified_file.entries[j]);
size_t i = j + edit->i2 - edit->j2;
- ssize_t k = entries_mapping_get (&mapping, i);
+ ptrdiff_t k = entries_mapping_get (&mapping,
i);
if (k >= 0
&& entry_equals (ancestor_file.entries[i],
mainstream_file.entries[k]))
@@ -1463,7 +1464,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\
{
/* A simple change at the top of modified_file.
Apply it to the top of mainstream_file. */
- ssize_t j;
+ ptrdiff_t j;
for (j = edit->j1 + num_added - 1; j >= edit->j1;
j--)
{
struct entry *added_entry =
modified_file.entries[j];
@@ -1473,7 +1474,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\
{
struct entry *changed_entry =
modified_file.entries[j];
size_t i = j + edit->i2 - edit->j2;
- ssize_t k = entries_mapping_get (&mapping, i);
+ ptrdiff_t k = entries_mapping_get (&mapping,
i);
if (k >= 0
&& entry_equals (ancestor_file.entries[i],
mainstream_file.entries[k]))
@@ -1503,8 +1504,8 @@ There is NO WARRANTY, to the extent permitted by law.\n\
}
else
{
- ssize_t i_before;
- ssize_t k_before;
+ ptrdiff_t i_before;
+ ptrdiff_t k_before;
bool linear;
i_before = diffs.index_mapping_reverse[edit->j1 -
1];
ASSERT (i_before >= 0);
@@ -1528,7 +1529,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\
{
gl_list_node_t node_for_insert =
result_entries_pointers[k_before + 1];
- ssize_t j;
+ ptrdiff_t j;
for (j = edit->j1 + num_added - 1; j >=
edit->j1; j--)
{
struct entry *added_entry =
modified_file.entries[j];
@@ -1538,7 +1539,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\
{
struct entry *changed_entry =
modified_file.entries[j];
size_t i = j + edit->i2 - edit->j2;
- ssize_t k = entries_mapping_get (&mapping,
i);
+ ptrdiff_t k = entries_mapping_get
(&mapping, i);
ASSERT (k >= 0);
if (entry_equals (ancestor_file.entries[i],
mainstream_file.entries[k]))
@@ -1574,8 +1575,8 @@ There is NO WARRANTY, to the extent permitted by law.\n\
See whether the num_changed entries still exist
unchanged in mainstream_file and are still
consecutive. */
- ssize_t i_first;
- ssize_t k_first;
+ ptrdiff_t i_first;
+ ptrdiff_t k_first;
bool linear_unchanged;
i_first = edit->i1;
k_first = entries_mapping_get (&mapping, i_first);
@@ -1599,7 +1600,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\
{
gl_list_node_t node_for_insert =
result_entries_pointers[k_first];
- ssize_t j;
+ ptrdiff_t j;
size_t i;
for (j = edit->j2; j >= edit->j1; j--)
{
@@ -1608,7 +1609,7 @@ There is NO WARRANTY, to the extent permitted by law.\n\
}
for (i = edit->i1; i <= edit->i2; i++)
{
- ssize_t k = entries_mapping_get (&mapping, i);
+ ptrdiff_t k = entries_mapping_get (&mapping,
i);
ASSERT (k >= 0);
ASSERT (entry_equals (ancestor_file.entries[i],
mainstream_file.entries[k]));
diff --git a/modules/git-merge-changelog b/modules/git-merge-changelog
index c58ddc7bd9..9fad67cd7c 100644
--- a/modules/git-merge-changelog
+++ b/modules/git-merge-changelog
@@ -8,6 +8,7 @@ Depends-on:
c99
getopt-gnu
stdbool
+stdint
stdlib
error
read-file
--
2.39.2