1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
Description: Upgrade dtl to the latest release 1.20 for bugfixes
Origin: upstream, https://github.com/cubicdaiya/dtl/releases/tag/v1.20
Forwarded: not-needed
--- a/thirdparty/dtl/dtl/Diff.hpp
+++ b/thirdparty/dtl/dtl/Diff.hpp
@@ -67,6 +67,8 @@ namespace dtl {
bool editDistanceOnly;
uniHunkVec uniHunks;
comparator cmp;
+ long long ox;
+ long long oy;
public :
Diff () {}
@@ -260,7 +262,8 @@ namespace dtl {
if (isHuge()) {
pathCordinates.reserve(MAX_CORDINATES_SIZE);
}
-
+ ox = 0;
+ oy = 0;
long long p = -1;
fp = new long long[M + N + 3];
fill(&fp[0], &fp[M + N + 3], -1);
@@ -340,6 +343,15 @@ namespace dtl {
sesElemVec ses_v = ses.getSequence ();
for_each (ses_v.begin (), ses_v.end(), PT < sesElem, stream > (out));
}
+
+ /**
+ * store difference between A and B as an SES with custom storage
+ */
+ template < typename storedData, template < typename SEET, typename STRT > class ST >
+ void storeSES(storedData& sd) const {
+ sesElemVec ses_v = ses.getSequence();
+ for_each(ses_v.begin(), ses_v.end(), ST < sesElem, storedData >(sd));
+ }
/**
* print difference between A and B in the Unified Format
@@ -586,18 +598,18 @@ namespace dtl {
while(px_idx < v[i].x || py_idx < v[i].y) {
if (v[i].y - v[i].x > py_idx - px_idx) {
if (!wasSwapped()) {
- ses.addSequence(*y, 0, y_idx, SES_ADD);
+ ses.addSequence(*y, 0, y_idx + oy, SES_ADD);
} else {
- ses.addSequence(*y, y_idx, 0, SES_DELETE);
+ ses.addSequence(*y, y_idx + oy, 0, SES_DELETE);
}
++y;
++y_idx;
++py_idx;
} else if (v[i].y - v[i].x < py_idx - px_idx) {
if (!wasSwapped()) {
- ses.addSequence(*x, x_idx, 0, SES_DELETE);
+ ses.addSequence(*x, x_idx + ox, 0, SES_DELETE);
} else {
- ses.addSequence(*x, 0, x_idx, SES_ADD);
+ ses.addSequence(*x, 0, x_idx + ox, SES_ADD);
}
++x;
++x_idx;
@@ -605,10 +617,10 @@ namespace dtl {
} else {
if (!wasSwapped()) {
lcs.addSequence(*x);
- ses.addSequence(*x, x_idx, y_idx, SES_COMMON);
+ ses.addSequence(*x, x_idx + ox, y_idx + oy, SES_COMMON);
} else {
lcs.addSequence(*y);
- ses.addSequence(*y, y_idx, x_idx, SES_COMMON);
+ ses.addSequence(*y, y_idx + oy, x_idx + ox, SES_COMMON);
}
++x;
++y;
@@ -649,6 +661,8 @@ namespace dtl {
fp = new long long[M + N + 3];
fill(&fp[0], &fp[M + N + 3], -1);
fill(path.begin(), path.end(), -1);
+ ox = x_idx - 1;
+ oy = y_idx - 1;
return false;
}
return true;
--- a/thirdparty/dtl/dtl/functors.hpp
+++ b/thirdparty/dtl/dtl/functors.hpp
@@ -118,6 +118,20 @@ namespace dtl {
private :
stream& out_;
};
+
+ /**
+ * storage class template
+ */
+ template <typename sesElem, typename storedData >
+ class Storage
+ {
+ public:
+ Storage(storedData& sd) : storedData_(sd) {}
+ virtual ~Storage() {}
+ virtual void operator() (const sesElem& se) const = 0;
+ protected:
+ storedData& storedData_;
+ };
/**
* compare class template
--- a/thirdparty/dtl/dtl/variables.hpp
+++ b/thirdparty/dtl/dtl/variables.hpp
@@ -63,7 +63,7 @@ namespace dtl {
/**
* version string
*/
- const string version = "1.19";
+ const string version = "1.20";
/**
* type of edit for SES
|