From: Phillip Wood <phillip.wood123@gmail.com>
To: Ezekiel Newren via GitGitGadget <gitgitgadget@gmail.com>,
git@vger.kernel.org
Cc: Ezekiel Newren <ezekielnewren@gmail.com>
Subject: Re: [PATCH 07/10] xdiff: replace xdfile_t.dstart with xdfenv_t.delta_start
Date: Wed, 28 Jan 2026 10:51:49 +0000 [thread overview]
Message-ID: <79ea1b9c-47cd-4702-bcb2-05417adf9eae@gmail.com> (raw)
In-Reply-To: <e9a031fd-072d-4810-b7e0-0d64ffedce10@gmail.com>
On 20/01/2026 16:32, Phillip Wood wrote:
> On 02/01/2026 18:52, Ezekiel Newren via GitGitGadget wrote:
>> From: Ezekiel Newren <ezekielnewren@gmail.com>
>>
>> Placing delta_start in xdfenv_t instead of xdfile_t provides a more
>> appropriate context since this variable only makes sense with a pair
>> of files. View with --color-words.
>
> So as dstart and dend must be the same for both files we now store the
> values once in xdfenv_t.
Except it's only dstart that's the same, dend is different because it
convinently stores an index, not an offset from the end. Having realized
that, moving them to xdfenv_t makes less sense as having to calculate
the dend index from an offset from the end of the array each time is a
pain and sooner or later we'll make a mistake.
Thanks
Phillip
> That explains why we start passing xdfenv_t
> around rather than xdfile_t in patch 5.
>
> Thanks
>
> Phillip
>
>> Signed-off-by: Ezekiel Newren <ezekielnewren@gmail.com>
>> ---
>> xdiff/xhistogram.c | 4 ++--
>> xdiff/xpatience.c | 4 ++--
>> xdiff/xprepare.c | 17 +++++++++--------
>> xdiff/xtypes.h | 3 ++-
>> 4 files changed, 15 insertions(+), 13 deletions(-)
>>
>> diff --git a/xdiff/xhistogram.c b/xdiff/xhistogram.c
>> index 5ae1282c27..eb6a52d9ba 100644
>> --- a/xdiff/xhistogram.c
>> +++ b/xdiff/xhistogram.c
>> @@ -365,6 +365,6 @@ out:
>> int xdl_do_histogram_diff(xpparam_t const *xpp, xdfenv_t *env)
>> {
>> return histogram_diff(xpp, env,
>> - env->xdf1.dstart + 1, env->xdf1.dend - env->xdf1.dstart + 1,
>> - env->xdf2.dstart + 1, env->xdf2.dend - env->xdf2.dstart + 1);
>> + env->delta_start + 1, env->xdf1.dend - env->delta_start + 1,
>> + env->delta_start + 1, env->xdf2.dend - env->delta_start + 1);
>> }
>> diff --git a/xdiff/xpatience.c b/xdiff/xpatience.c
>> index 2bce07cf48..bd0ffbb417 100644
>> --- a/xdiff/xpatience.c
>> +++ b/xdiff/xpatience.c
>> @@ -374,6 +374,6 @@ static int patience_diff(xpparam_t const *xpp,
>> xdfenv_t *env,
>> int xdl_do_patience_diff(xpparam_t const *xpp, xdfenv_t *env)
>> {
>> return patience_diff(xpp, env,
>> - env->xdf1.dstart + 1, env->xdf1.dend - env->xdf1.dstart + 1,
>> - env->xdf2.dstart + 1, env->xdf2.dend - env->xdf2.dstart + 1);
>> + env->delta_start + 1, env->xdf1.dend - env->delta_start + 1,
>> + env->delta_start + 1, env->xdf2.dend - env->delta_start + 1);
>> }
>> diff --git a/xdiff/xprepare.c b/xdiff/xprepare.c
>> index 06b6a6f804..e88468e74c 100644
>> --- a/xdiff/xprepare.c
>> +++ b/xdiff/xprepare.c
>> @@ -173,7 +173,6 @@ static int xdl_prepare_ctx(mmfile_t *mf, xdfile_t
>> *xdf, uint64_t flags) {
>> xdf->changed += 1;
>> xdf->nreff = 0;
>> - xdf->dstart = 0;
>> xdf->dend = xdf->nrec - 1;
>> return 0;
>> @@ -287,7 +286,7 @@ static int xdl_cleanup_records(xdlclassifier_t
>> *cf, xdfenv_t *xe) {
>> */
>> if ((mlim = xdl_bogosqrt((long)xe->xdf1.nrec)) > XDL_MAX_EQLIMIT)
>> mlim = XDL_MAX_EQLIMIT;
>> - for (i = xe->xdf1.dstart, recs = &xe->xdf1.recs[xe->xdf1.dstart];
>> i <= xe->xdf1.dend; i++, recs++) {
>> + for (i = xe->delta_start, recs = &xe->xdf1.recs[xe->delta_start];
>> i <= xe->xdf1.dend; i++, recs++) {
>> rcrec = cf->rcrecs[recs->minimal_perfect_hash];
>> nm = rcrec ? rcrec->len2 : 0;
>> action1[i] = (nm == 0) ? DISCARD: (nm >= mlim && !
>> need_min) ? INVESTIGATE: KEEP;
>> @@ -295,7 +294,7 @@ static int xdl_cleanup_records(xdlclassifier_t
>> *cf, xdfenv_t *xe) {
>> if ((mlim = xdl_bogosqrt((long)xe->xdf2.nrec)) > XDL_MAX_EQLIMIT)
>> mlim = XDL_MAX_EQLIMIT;
>> - for (i = xe->xdf2.dstart, recs = &xe->xdf2.recs[xe->xdf2.dstart];
>> i <= xe->xdf2.dend; i++, recs++) {
>> + for (i = xe->delta_start, recs = &xe->xdf2.recs[xe->delta_start];
>> i <= xe->xdf2.dend; i++, recs++) {
>> rcrec = cf->rcrecs[recs->minimal_perfect_hash];
>> nm = rcrec ? rcrec->len1 : 0;
>> action2[i] = (nm == 0) ? DISCARD: (nm >= mlim && !
>> need_min) ? INVESTIGATE: KEEP;
>> @@ -306,10 +305,10 @@ static int xdl_cleanup_records(xdlclassifier_t
>> *cf, xdfenv_t *xe) {
>> * false, or become true.
>> */
>> xe->xdf1.nreff = 0;
>> - for (i = xe->xdf1.dstart, recs = &xe->xdf1.recs[xe->xdf1.dstart];
>> + for (i = xe->delta_start, recs = &xe->xdf1.recs[xe->delta_start];
>> i <= xe->xdf1.dend; i++, recs++) {
>> if (action1[i] == KEEP ||
>> - (action1[i] == INVESTIGATE && !xdl_clean_mmatch(action1,
>> i, xe->xdf1.dstart, xe->xdf1.dend))) {
>> + (action1[i] == INVESTIGATE && !xdl_clean_mmatch(action1,
>> i, xe->delta_start, xe->xdf1.dend))) {
>> xe->xdf1.reference_index[xe->xdf1.nreff++] = i;
>> /* changed[i] remains false, i.e. keep */
>> } else
>> @@ -318,10 +317,10 @@ static int xdl_cleanup_records(xdlclassifier_t
>> *cf, xdfenv_t *xe) {
>> }
>> xe->xdf2.nreff = 0;
>> - for (i = xe->xdf2.dstart, recs = &xe->xdf2.recs[xe->xdf2.dstart];
>> + for (i = xe->delta_start, recs = &xe->xdf2.recs[xe->delta_start];
>> i <= xe->xdf2.dend; i++, recs++) {
>> if (action2[i] == KEEP ||
>> - (action2[i] == INVESTIGATE && !xdl_clean_mmatch(action2,
>> i, xe->xdf2.dstart, xe->xdf2.dend))) {
>> + (action2[i] == INVESTIGATE && !xdl_clean_mmatch(action2,
>> i, xe->delta_start, xe->xdf2.dend))) {
>> xe->xdf2.reference_index[xe->xdf2.nreff++] = i;
>> /* changed[i] remains false, i.e. keep */
>> } else
>> @@ -348,7 +347,7 @@ static void xdl_trim_ends(xdfenv_t *xe)
>> size_t mph1 = xe->xdf1.recs[i].minimal_perfect_hash;
>> size_t mph2 = xe->xdf2.recs[i].minimal_perfect_hash;
>> if (mph1 != mph2) {
>> - xe->xdf1.dstart = xe->xdf2.dstart = (ssize_t)i;
>> + xe->delta_start = (ssize_t)i;
>> lim -= i;
>> break;
>> }
>> @@ -370,6 +369,8 @@ int xdl_prepare_env(mmfile_t *mf1, mmfile_t *mf2,
>> xpparam_t const *xpp,
>> xdfenv_t *xe) {
>> xdlclassifier_t cf;
>> + xe->delta_start = 0;
>> +
>> if (xdl_prepare_ctx(mf1, &xe->xdf1, xpp->flags) < 0) {
>> return -1;
>> diff --git a/xdiff/xtypes.h b/xdiff/xtypes.h
>> index 979586f20a..bda1f85eb0 100644
>> --- a/xdiff/xtypes.h
>> +++ b/xdiff/xtypes.h
>> @@ -48,7 +48,7 @@ typedef struct s_xrecord {
>> typedef struct s_xdfile {
>> xrecord_t *recs;
>> size_t nrec;
>> - ptrdiff_t dstart, dend;
>> + ptrdiff_t dend;
>> bool *changed;
>> size_t *reference_index;
>> size_t nreff;
>> @@ -56,6 +56,7 @@ typedef struct s_xdfile {
>> typedef struct s_xdfenv {
>> xdfile_t xdf1, xdf2;
>> + size_t delta_start;
>> } xdfenv_t;
>
>
next prev parent reply other threads:[~2026-01-28 10:51 UTC|newest]
Thread overview: 124+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-02 18:52 [PATCH 00/10] Xdiff cleanup part 3 Ezekiel Newren via GitGitGadget
2026-01-02 18:52 ` [PATCH 01/10] ivec: introduce the C side of ivec Ezekiel Newren via GitGitGadget
2026-01-04 5:32 ` Junio C Hamano
2026-01-17 16:06 ` Ezekiel Newren
2026-01-08 14:34 ` Phillip Wood
2026-01-15 15:55 ` Ezekiel Newren
2026-01-16 10:39 ` Phillip Wood
2026-01-16 20:19 ` René Scharfe
2026-01-17 13:55 ` Phillip Wood
2026-01-17 16:04 ` Ezekiel Newren
2026-01-18 14:58 ` René Scharfe
2026-01-17 16:14 ` Ezekiel Newren
2026-01-17 16:16 ` Ezekiel Newren
2026-01-17 17:40 ` Phillip Wood
2026-01-19 5:59 ` Jeff King
2026-01-19 20:21 ` Ezekiel Newren
2026-01-19 20:40 ` Jeff King
2026-01-20 2:36 ` D. Ben Knoble
2026-01-21 21:00 ` Ezekiel Newren
2026-01-21 21:20 ` Jeff King
2026-01-21 21:31 ` Junio C Hamano
2026-01-21 21:45 ` Ezekiel Newren
2026-01-20 13:46 ` Phillip Wood
2026-01-20 14:06 ` Phillip Wood
2026-01-21 21:39 ` Ezekiel Newren
2026-01-28 11:15 ` Phillip Wood
2026-01-16 20:19 ` René Scharfe
2026-01-17 15:58 ` Ezekiel Newren
2026-01-18 14:55 ` René Scharfe
2026-01-02 18:52 ` [PATCH 02/10] xdiff: make classic diff explicit by creating xdl_do_classic_diff() Ezekiel Newren via GitGitGadget
2026-01-20 15:01 ` Phillip Wood
2026-01-21 21:05 ` Ezekiel Newren
2026-01-02 18:52 ` [PATCH 03/10] xdiff: don't waste time guessing the number of lines Ezekiel Newren via GitGitGadget
2026-01-20 15:02 ` Phillip Wood
2026-01-21 21:12 ` Ezekiel Newren
2026-01-22 10:16 ` Phillip Wood
2026-01-02 18:52 ` [PATCH 04/10] xdiff: let patience and histogram benefit from xdl_trim_ends() Ezekiel Newren via GitGitGadget
2026-01-20 15:02 ` Phillip Wood
2026-01-21 14:49 ` Phillip Wood
2026-01-02 18:52 ` [PATCH 05/10] xdiff: use xdfenv_t in xdl_trim_ends() and xdl_cleanup_records() Ezekiel Newren via GitGitGadget
2026-01-20 16:32 ` Phillip Wood
2026-01-02 18:52 ` [PATCH 06/10] xdiff: cleanup xdl_trim_ends() Ezekiel Newren via GitGitGadget
2026-01-20 16:32 ` Phillip Wood
2026-01-02 18:52 ` [PATCH 07/10] xdiff: replace xdfile_t.dstart with xdfenv_t.delta_start Ezekiel Newren via GitGitGadget
2026-01-20 16:32 ` Phillip Wood
2026-01-28 10:51 ` Phillip Wood [this message]
2026-01-02 18:52 ` [PATCH 08/10] xdiff: replace xdfile_t.dend with xdfenv_t.delta_end Ezekiel Newren via GitGitGadget
2026-01-02 18:52 ` [PATCH 09/10] xdiff: remove dependence on xdlclassifier from xdl_cleanup_records() Ezekiel Newren via GitGitGadget
2026-01-16 20:19 ` René Scharfe
2026-01-17 16:34 ` Ezekiel Newren
2026-01-18 18:23 ` René Scharfe
2026-01-21 15:01 ` Phillip Wood
2026-01-02 18:52 ` [PATCH 10/10] xdiff: move xdl_cleanup_records() from xprepare.c to xdiffi.c Ezekiel Newren via GitGitGadget
2026-01-21 15:01 ` Phillip Wood
2026-01-28 10:56 ` Phillip Wood
2026-01-04 2:44 ` [PATCH 00/10] Xdiff cleanup part 3 Junio C Hamano
2026-01-04 6:01 ` Yee Cheng Chin
2026-01-28 14:40 ` Phillip Wood
2026-03-06 23:03 ` Junio C Hamano
2026-03-09 19:06 ` Ezekiel Newren
2026-03-09 23:31 ` Junio C Hamano
2026-03-25 21:11 ` [PATCH v2 0/5] " Ezekiel Newren via GitGitGadget
2026-03-25 21:11 ` [PATCH v2 1/5] xdiff/xdl_cleanup_records: delete local recs pointer Ezekiel Newren via GitGitGadget
2026-03-25 21:11 ` [PATCH v2 2/5] xdiff/xdl_cleanup_records: make limits more clear Ezekiel Newren via GitGitGadget
2026-03-25 21:11 ` [PATCH v2 3/5] xdiff/xdl_cleanup_records: make setting action easier to follow Ezekiel Newren via GitGitGadget
2026-03-25 21:11 ` [PATCH v2 4/5] xdiff/xdl_cleanup_records: simplify INVESTIGATE handling for clarity Ezekiel Newren via GitGitGadget
2026-03-25 21:11 ` [PATCH v2 5/5] xdiff/xdl_cleanup_records: use unambiguous types Ezekiel Newren via GitGitGadget
2026-03-25 21:58 ` Junio C Hamano
2026-03-26 6:26 ` [PATCH v2 0/5] Xdiff cleanup part 3 SZEDER Gábor
2026-03-27 19:23 ` [PATCH v3 0/6] " Ezekiel Newren via GitGitGadget
2026-03-27 19:23 ` [PATCH v3 1/6] xdiff/xdl_cleanup_records: delete local recs pointer Ezekiel Newren via GitGitGadget
2026-03-27 19:23 ` [PATCH v3 2/6] xdiff: use unambiguous types in xdl_bogo_sqrt() Ezekiel Newren via GitGitGadget
2026-03-27 19:23 ` [PATCH v3 3/6] xdiff/xdl_cleanup_records: use unambiguous types Ezekiel Newren via GitGitGadget
2026-03-27 19:23 ` [PATCH v3 4/6] xdiff/xdl_cleanup_records: make limits more clear Ezekiel Newren via GitGitGadget
2026-03-27 21:09 ` Junio C Hamano
2026-03-27 23:01 ` Junio C Hamano
2026-03-30 16:00 ` Ezekiel Newren
2026-03-30 19:59 ` Junio C Hamano
2026-03-31 1:29 ` Ezekiel Newren
2026-03-27 19:23 ` [PATCH v3 5/6] xdiff/xdl_cleanup_records: make setting action easier to follow Ezekiel Newren via GitGitGadget
2026-03-27 19:23 ` [PATCH v3 6/6] xdiff/xdl_cleanup_records: simplify INVESTIGATE handling for clarity Ezekiel Newren via GitGitGadget
2026-03-30 16:59 ` [PATCH v4 0/6] Xdiff cleanup part 3 Ezekiel Newren via GitGitGadget
2026-03-30 16:59 ` [PATCH v4 1/6] xdiff/xdl_cleanup_records: delete local recs pointer Ezekiel Newren via GitGitGadget
2026-03-30 17:23 ` Ezekiel Newren
2026-03-30 22:53 ` Junio C Hamano
2026-03-30 16:59 ` [PATCH v4 2/6] xdiff: use unambiguous types in xdl_bogo_sqrt() Ezekiel Newren via GitGitGadget
2026-03-30 22:59 ` Junio C Hamano
2026-03-30 17:00 ` [PATCH v4 3/6] xdiff/xdl_cleanup_records: use unambiguous types Ezekiel Newren via GitGitGadget
2026-03-30 17:00 ` [PATCH v4 4/6] xdiff/xdl_cleanup_records: make limits more clear Ezekiel Newren via GitGitGadget
2026-03-31 9:44 ` Phillip Wood
2026-03-31 16:13 ` Junio C Hamano
2026-04-14 21:58 ` Ezekiel Newren
2026-04-14 22:15 ` Junio C Hamano
2026-04-15 13:54 ` Phillip Wood
2026-03-30 17:00 ` [PATCH v4 5/6] xdiff/xdl_cleanup_records: make setting action easier to follow Ezekiel Newren via GitGitGadget
2026-03-30 23:02 ` Junio C Hamano
2026-03-31 9:44 ` Phillip Wood
2026-03-30 17:00 ` [PATCH v4 6/6] xdiff/xdl_cleanup_records: simplify INVESTIGATE handling for clarity Ezekiel Newren via GitGitGadget
2026-03-31 9:43 ` Phillip Wood
2026-04-01 16:00 ` Phillip Wood
2026-03-30 23:04 ` [PATCH v4 0/6] Xdiff cleanup part 3 Junio C Hamano
2026-03-31 9:45 ` Phillip Wood
2026-04-08 20:26 ` [PATCH v5 " Ezekiel Newren via GitGitGadget
2026-04-08 20:26 ` [PATCH v5 1/6] xdiff/xdl_cleanup_records: delete local recs pointer Ezekiel Newren via GitGitGadget
2026-04-08 20:26 ` [PATCH v5 2/6] xdiff: use unambiguous types in xdl_bogo_sqrt() Ezekiel Newren via GitGitGadget
2026-04-08 20:26 ` [PATCH v5 3/6] xdiff/xdl_cleanup_records: use unambiguous types Ezekiel Newren via GitGitGadget
2026-04-08 20:26 ` [PATCH v5 4/6] xdiff/xdl_cleanup_records: make limits more clear Ezekiel Newren via GitGitGadget
2026-04-14 10:09 ` Phillip Wood
2026-04-08 20:26 ` [PATCH v5 5/6] xdiff/xdl_cleanup_records: make setting action easier to follow Ezekiel Newren via GitGitGadget
2026-04-08 20:26 ` [PATCH v5 6/6] xdiff/xdl_cleanup_records: put braces around the else clause Ezekiel Newren via GitGitGadget
2026-04-08 21:28 ` [PATCH v5 0/6] Xdiff cleanup part 3 Junio C Hamano
2026-04-09 14:01 ` Phillip Wood
2026-04-14 10:08 ` Phillip Wood
2026-04-14 17:06 ` Junio C Hamano
2026-04-29 22:08 ` [PATCH v6 " Ezekiel Newren via GitGitGadget
2026-04-29 22:08 ` [PATCH v6 1/6] xdiff/xdl_cleanup_records: delete local recs pointer Ezekiel Newren via GitGitGadget
2026-04-29 22:08 ` [PATCH v6 2/6] xdiff: use unambiguous types in xdl_bogo_sqrt() Ezekiel Newren via GitGitGadget
2026-04-29 22:08 ` [PATCH v6 3/6] xdiff/xdl_cleanup_records: use unambiguous types Ezekiel Newren via GitGitGadget
2026-04-29 22:08 ` [PATCH v6 4/6] xdiff/xdl_cleanup_records: make limits more clear Ezekiel Newren via GitGitGadget
2026-04-29 22:08 ` [PATCH v6 5/6] xdiff/xdl_cleanup_records: make setting action easier to follow Ezekiel Newren via GitGitGadget
2026-04-29 22:08 ` [PATCH v6 6/6] xdiff/xdl_cleanup_records: make execution of " Ezekiel Newren via GitGitGadget
2026-04-30 13:35 ` [PATCH v6 0/6] Xdiff cleanup part 3 Phillip Wood
2026-04-30 21:08 ` Ezekiel Newren
2026-05-04 0:59 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=79ea1b9c-47cd-4702-bcb2-05417adf9eae@gmail.com \
--to=phillip.wood123@gmail.com \
--cc=ezekielnewren@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
/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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.