File: dtl-upgrade.diff

package info (click to toggle)
musescore3 3.2.3%2Bdfsg2-19
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 218,192 kB
  • sloc: cpp: 291,369; xml: 200,226; sh: 3,779; ansic: 1,447; python: 393; makefile: 249; perl: 82; pascal: 79
file content (120 lines) | stat: -rw-r--r-- 4,466 bytes parent folder | download
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