diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/diff/Subsequence.java b/org.eclipse.jgit/src/org/eclipse/jgit/diff/Subsequence.java index aee869dc9..20544b1e4 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/Subsequence.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/diff/Subsequence.java @@ -54,6 +54,81 @@ * the base sequence type. */ public final class Subsequence extends Sequence { + /** + * Construct a subsequence around the A region/base sequence. + * + * @param + * the base sequence type. + * @param a + * the A sequence. + * @param region + * the region of {@code a} to create a subsequence around. + * @return subsequence of {@code base} as described by A in {@code region}. + */ + public static Subsequence a(S a, Edit region) { + return new Subsequence(a, region.beginA, region.endA); + } + + /** + * Construct a subsequence around the B region/base sequence. + * + * @param + * the base sequence type. + * @param b + * the B sequence. + * @param region + * the region of {@code b} to create a subsequence around. + * @return subsequence of {@code base} as described by B in {@code region}. + */ + public static Subsequence b(S b, Edit region) { + return new Subsequence(b, region.beginB, region.endB); + } + + /** + * Adjust the Edit to reflect positions in the base sequence. + * + * @param + * the base sequence type. + * @param e + * edit to adjust in-place. Prior to invocation the indexes are + * in terms of the two subsequences; after invocation the indexes + * are in terms of the base sequences. + * @param a + * the A sequence. + * @param b + * the B sequence. + */ + public static void toBase(Edit e, Subsequence a, + Subsequence b) { + e.beginA += a.begin; + e.endA += a.begin; + + e.beginB += b.begin; + e.endB += b.begin; + } + + /** + * Adjust the Edits to reflect positions in the base sequence. + * + * @param + * the base sequence type. + * @param edits + * edits to adjust in-place. Prior to invocation the indexes are + * in terms of the two subsequences; after invocation the indexes + * are in terms of the base sequences. + * @param a + * the A sequence. + * @param b + * the B sequence. + * @return always {@code edits} (as the list was updated in-place). + */ + public static EditList toBase(EditList edits, + Subsequence a, Subsequence b) { + for (Edit e : edits) + toBase(e, a, b); + return edits; + } + final S base; final int begin;