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

Re: [PATCH 07/10] xdiff: replace xdfile_t.dstart with xdfenv_t.delta_start

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Jan 28, 2026, 10:51 UTC
Message-ID
<79ea1b9c-47cd-4702-bcb2-05417adf9eae@gmail.com>
In-Reply-To
<e9a031fd-072d-4810-b7e0-0d64ffedce10@gmail.com>
On 20/01/2026 16:32, Phillip Wood wrote:
Show 9 quoted lines
> 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
Show 146 quoted lines
> 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;
> 
> 
Previous: Phillip WoodNext: Ezekiel Newren via GitGitGadget
Message 46 of 124 in “Xdiff cleanup part 3”
  1. 00/10 Xdiff cleanup part 3Ezekiel Newren via GitGitGadget, Jan 2, 2026
  2. 01/10 ivec: introduce the C side of ivecEzekiel Newren via GitGitGadget, Jan 2, 2026
  3. Junio C HamanoJan 4, 2026
  4. Ezekiel NewrenJan 17, 2026
  5. Phillip WoodJan 8, 2026
  6. Ezekiel NewrenJan 15, 2026
  7. Phillip WoodJan 16, 2026
  8. René ScharfeJan 16, 2026
  9. Phillip WoodJan 17, 2026
  10. Ezekiel NewrenJan 17, 2026
  11. René ScharfeJan 18, 2026
  12. Ezekiel NewrenJan 17, 2026
  13. Ezekiel NewrenJan 17, 2026
  14. Phillip WoodJan 17, 2026
  15. Jeff KingJan 19, 2026
  16. Ezekiel NewrenJan 19, 2026
  17. Jeff KingJan 19, 2026
  18. D. Ben KnobleJan 20, 2026
  19. Ezekiel NewrenJan 21, 2026
  20. Jeff KingJan 21, 2026
  21. Junio C HamanoJan 21, 2026
  22. Ezekiel NewrenJan 21, 2026
  23. Phillip WoodJan 20, 2026
  24. Phillip WoodJan 20, 2026
  25. Ezekiel NewrenJan 21, 2026
  26. Phillip WoodJan 28, 2026
  27. René ScharfeJan 16, 2026
  28. Ezekiel NewrenJan 17, 2026
  29. René ScharfeJan 18, 2026
  30. 02/10 xdiff: make classic diff explicit by creating xdl_do_classic_diff()Ezekiel Newren via GitGitGadget, Jan 2, 2026
  31. Phillip WoodJan 20, 2026
  32. Ezekiel NewrenJan 21, 2026
  33. 03/10 xdiff: don't waste time guessing the number of linesEzekiel Newren via GitGitGadget, Jan 2, 2026
  34. Phillip WoodJan 20, 2026
  35. Ezekiel NewrenJan 21, 2026
  36. Phillip WoodJan 22, 2026
  37. 04/10 xdiff: let patience and histogram benefit from xdl_trim_ends()Ezekiel Newren via GitGitGadget, Jan 2, 2026
  38. Phillip WoodJan 20, 2026
  39. Phillip WoodJan 21, 2026
  40. 05/10 xdiff: use xdfenv_t in xdl_trim_ends() and xdl_cleanup_records()Ezekiel Newren via GitGitGadget, Jan 2, 2026
  41. Phillip WoodJan 20, 2026
  42. 06/10 xdiff: cleanup xdl_trim_ends()Ezekiel Newren via GitGitGadget, Jan 2, 2026
  43. Phillip WoodJan 20, 2026
  44. 07/10 xdiff: replace xdfile_t.dstart with xdfenv_t.delta_startEzekiel Newren via GitGitGadget, Jan 2, 2026
  45. Phillip WoodJan 20, 2026
  46. Phillip WoodJan 28, 2026
  47. 08/10 xdiff: replace xdfile_t.dend with xdfenv_t.delta_endEzekiel Newren via GitGitGadget, Jan 2, 2026
  48. 09/10 xdiff: remove dependence on xdlclassifier from xdl_cleanup_records()Ezekiel Newren via GitGitGadget, Jan 2, 2026
  49. René ScharfeJan 16, 2026
  50. Ezekiel NewrenJan 17, 2026
  51. René ScharfeJan 18, 2026
  52. Phillip WoodJan 21, 2026
  53. 10/10 xdiff: move xdl_cleanup_records() from xprepare.c to xdiffi.cEzekiel Newren via GitGitGadget, Jan 2, 2026
  54. Phillip WoodJan 21, 2026
  55. Phillip WoodJan 28, 2026
  56. Junio C HamanoJan 4, 2026
  57. Yee Cheng ChinJan 4, 2026
  58. Phillip WoodJan 28, 2026
  59. Junio C HamanoMar 6, 2026
  60. Ezekiel NewrenMar 9, 2026
  61. Junio C HamanoMar 9, 2026
  62. 0/5 Xdiff cleanup part 3Ezekiel Newren via GitGitGadget, Mar 25, 2026
  63. 1/5 xdiff/xdl_cleanup_records: delete local recs pointerEzekiel Newren via GitGitGadget, Mar 25, 2026
  64. 2/5 xdiff/xdl_cleanup_records: make limits more clearEzekiel Newren via GitGitGadget, Mar 25, 2026
  65. 3/5 xdiff/xdl_cleanup_records: make setting action easier to followEzekiel Newren via GitGitGadget, Mar 25, 2026
  66. 4/5 xdiff/xdl_cleanup_records: simplify INVESTIGATE handling for clarityEzekiel Newren via GitGitGadget, Mar 25, 2026
  67. 5/5 xdiff/xdl_cleanup_records: use unambiguous typesEzekiel Newren via GitGitGadget, Mar 25, 2026
  68. Junio C HamanoMar 25, 2026
  69. SZEDER GáborMar 26, 2026
  70. 0/6 Xdiff cleanup part 3Ezekiel Newren via GitGitGadget, Mar 27, 2026
  71. 1/6 xdiff/xdl_cleanup_records: delete local recs pointerEzekiel Newren via GitGitGadget, Mar 27, 2026
  72. 2/6 xdiff: use unambiguous types in xdl_bogo_sqrt()Ezekiel Newren via GitGitGadget, Mar 27, 2026
  73. 3/6 xdiff/xdl_cleanup_records: use unambiguous typesEzekiel Newren via GitGitGadget, Mar 27, 2026
  74. 4/6 xdiff/xdl_cleanup_records: make limits more clearEzekiel Newren via GitGitGadget, Mar 27, 2026
  75. Junio C HamanoMar 27, 2026
  76. Junio C HamanoMar 27, 2026
  77. Ezekiel NewrenMar 30, 2026
  78. Junio C HamanoMar 30, 2026
  79. Ezekiel NewrenMar 31, 2026
  80. 5/6 xdiff/xdl_cleanup_records: make setting action easier to followEzekiel Newren via GitGitGadget, Mar 27, 2026
  81. 6/6 xdiff/xdl_cleanup_records: simplify INVESTIGATE handling for clarityEzekiel Newren via GitGitGadget, Mar 27, 2026
  82. 0/6 Xdiff cleanup part 3Ezekiel Newren via GitGitGadget, Mar 30, 2026
  83. 1/6 xdiff/xdl_cleanup_records: delete local recs pointerEzekiel Newren via GitGitGadget, Mar 30, 2026
  84. Ezekiel NewrenMar 30, 2026
  85. Junio C HamanoMar 30, 2026
  86. 2/6 xdiff: use unambiguous types in xdl_bogo_sqrt()Ezekiel Newren via GitGitGadget, Mar 30, 2026
  87. Junio C HamanoMar 30, 2026
  88. 3/6 xdiff/xdl_cleanup_records: use unambiguous typesEzekiel Newren via GitGitGadget, Mar 30, 2026
  89. 4/6 xdiff/xdl_cleanup_records: make limits more clearEzekiel Newren via GitGitGadget, Mar 30, 2026
  90. Phillip WoodMar 31, 2026
  91. Junio C HamanoMar 31, 2026
  92. Ezekiel NewrenApr 14, 2026
  93. Junio C HamanoApr 14, 2026
  94. Phillip WoodApr 15, 2026
  95. 5/6 xdiff/xdl_cleanup_records: make setting action easier to followEzekiel Newren via GitGitGadget, Mar 30, 2026
  96. Junio C HamanoMar 30, 2026
  97. Phillip WoodMar 31, 2026
  98. 6/6 xdiff/xdl_cleanup_records: simplify INVESTIGATE handling for clarityEzekiel Newren via GitGitGadget, Mar 30, 2026
  99. Phillip WoodMar 31, 2026
  100. Phillip WoodApr 1, 2026
  101. Junio C HamanoMar 30, 2026
  102. Phillip WoodMar 31, 2026
  103. 0/6 Xdiff cleanup part 3Ezekiel Newren via GitGitGadget, Apr 8, 2026
  104. 1/6 xdiff/xdl_cleanup_records: delete local recs pointerEzekiel Newren via GitGitGadget, Apr 8, 2026
  105. 2/6 xdiff: use unambiguous types in xdl_bogo_sqrt()Ezekiel Newren via GitGitGadget, Apr 8, 2026
  106. 3/6 xdiff/xdl_cleanup_records: use unambiguous typesEzekiel Newren via GitGitGadget, Apr 8, 2026
  107. 4/6 xdiff/xdl_cleanup_records: make limits more clearEzekiel Newren via GitGitGadget, Apr 8, 2026
  108. Phillip WoodApr 14, 2026
  109. 5/6 xdiff/xdl_cleanup_records: make setting action easier to followEzekiel Newren via GitGitGadget, Apr 8, 2026
  110. 6/6 xdiff/xdl_cleanup_records: put braces around the else clauseEzekiel Newren via GitGitGadget, Apr 8, 2026
  111. Junio C HamanoApr 8, 2026
  112. Phillip WoodApr 9, 2026
  113. Phillip WoodApr 14, 2026
  114. Junio C HamanoApr 14, 2026
  115. 0/6 Xdiff cleanup part 3Ezekiel Newren via GitGitGadget, Apr 29, 2026
  116. 1/6 xdiff/xdl_cleanup_records: delete local recs pointerEzekiel Newren via GitGitGadget, Apr 29, 2026
  117. 2/6 xdiff: use unambiguous types in xdl_bogo_sqrt()Ezekiel Newren via GitGitGadget, Apr 29, 2026
  118. 3/6 xdiff/xdl_cleanup_records: use unambiguous typesEzekiel Newren via GitGitGadget, Apr 29, 2026
  119. 4/6 xdiff/xdl_cleanup_records: make limits more clearEzekiel Newren via GitGitGadget, Apr 29, 2026
  120. 5/6 xdiff/xdl_cleanup_records: make setting action easier to followEzekiel Newren via GitGitGadget, Apr 29, 2026
  121. 6/6 xdiff/xdl_cleanup_records: make execution of action easier to followEzekiel Newren via GitGitGadget, Apr 29, 2026
  122. Phillip WoodApr 30, 2026
  123. Ezekiel NewrenApr 30, 2026
  124. Junio C HamanoMay 4, 2026

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.