Patchwork D2685: xdiff: add comments for fields in xdfile_t

login
register
mail settings
Submitter phabricator
Date March 5, 2018, 12:50 a.m.
Message ID <differential-rev-PHID-DREV-dblcoiy7jhteyjtxatap-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/29035/
State Superseded
Headers show

Comments

phabricator - March 5, 2018, 12:50 a.m.
quark created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This makes the related code easier to understand.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2685

AFFECTED FILES
  mercurial/thirdparty/xdiff/xtypes.h

CHANGE DETAILS




To: quark, #hg-reviewers
Cc: mercurial-devel
phabricator - March 5, 2018, 1:09 a.m.
quark abandoned this revision.
quark added a comment.


  No longer needed

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2685

To: quark, #hg-reviewers
Cc: mercurial-devel
phabricator - March 9, 2018, 11:17 p.m.
indygreg accepted this revision.
indygreg added a comment.
This revision is now accepted and ready to land.


  So. Much. Better.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2685

To: quark, #hg-reviewers, indygreg
Cc: indygreg, mercurial-devel

Patch

diff --git a/mercurial/thirdparty/xdiff/xtypes.h b/mercurial/thirdparty/xdiff/xtypes.h
--- a/mercurial/thirdparty/xdiff/xtypes.h
+++ b/mercurial/thirdparty/xdiff/xtypes.h
@@ -46,15 +46,49 @@ 
 } xrecord_t;
 
 typedef struct s_xdfile {
+	/* manual memory management */
 	chastore_t rcha;
+
+	/* number of records (lines) */
 	long nrec;
+
+	/* hash table size
+	 * the maximum hash value in the table is (1 << hbits) */
 	unsigned int hbits;
+
+	/* hash table, hash value => xrecord_t
+	 * note: xrecord_t is a linked list. */
 	xrecord_t **rhash;
+
+	/* range excluding common prefix and suffix
+	 * [recs[i] for i in range(0, dstart)] are common prefix.
+	 * [recs[i] for i in range(dstart, dend + 1 - dstart)] are interesting
+	 * lines */
 	long dstart, dend;
+
+	/* pointer to records (lines) */
 	xrecord_t **recs;
+
+	/* record changed, use original "recs" index
+	 * rchag[i] can be either 0 or 1. 1 means recs[i] (line i) is marked
+	 * "changed". */
 	char *rchg;
+
+	/* cleaned-up record index => original "recs" index
+	 * clean-up means:
+	 *  rule 1. remove common prefix and suffix
+	 *  rule 2. remove records that are only on one side, since they can
+	 *          not match the other side
+	 * rindex[0] is likely dstart, if not removed up by rule 2.
+	 * rindex[nreff - 1] is likely dend, if not removed by rule 2.
+	 */
 	long *rindex;
+
+	/* rindex size */
 	long nreff;
+
+	/* cleaned-up record index => hash value
+	 * ha[i] = recs[rindex[i]]->ha */
 	unsigned long *ha;
 } xdfile_t;