@@ -24,625 +24,188 @@
24 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This module implements a 3-way merge
25 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
26 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "config.h"
27 27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "merge3.h"
28 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if 1
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define DEBUG1(X) X
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define DEBUG1(X)
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if 0
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define DEBUG2(X) X
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** For debugging:
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Print 16 characters of text from zBuf
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const char *print16(const char *z){
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static char zBuf[20];
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<16; i++){
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z[i]>=0x20 && z[i]<=0x7e ){
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zBuf[i] = z[i];
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zBuf[i] = '.';
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zBuf[i] = 0;
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return zBuf;
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define DEBUG2(X)
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Must be a 32-bit integer
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- typedef unsigned int u32;
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Must be a 16-bit value
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- typedef unsigned short int u16;
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The width of a hash window in bytes. The algorithm only works if this
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is a power of 2.
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define NHASH 16
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The current state of the rolling hash.
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** z[] holds the values that have been hashed. z[] is a circular buffer.
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** z[i] is the first entry and z[(i+NHASH-1)%NHASH] is the last entry of
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the window.
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Hash.a is the sum of all elements of hash.z[]. Hash.b is a weighted
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sum. Hash.b is z[i]*NHASH + z[i+1]*(NHASH-1) + ... + z[i+NHASH-1]*1.
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (Each index for z[] should be module NHASH, of course. The %NHASH operator
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is omitted in the prior expression for brevity.)
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- typedef struct hash hash;
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct hash {
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u16 a, b; /* Hash values */
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u16 i; /* Start of the hash window */
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char z[NHASH]; /* The values that have been hashed */
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- };
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Initialize the rolling hash using the first NHASH characters of z[]
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void hash_init(hash *pHash, const char *z){
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u16 a, b, i;
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- a = b = 0;
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<NHASH; i++){
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- a += z[i];
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- b += (NHASH-i)*z[i];
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pHash->z[i] = z[i];
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pHash->a = a & 0xffff;
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pHash->b = b & 0xffff;
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pHash->i = 0;
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Advance the rolling hash by a single character "c"
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void hash_next(hash *pHash, int c){
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u16 old = pHash->z[pHash->i];
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pHash->z[pHash->i] = c;
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pHash->i = (pHash->i+1)&(NHASH-1);
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pHash->a = pHash->a - old + c;
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pHash->b = pHash->b - NHASH*old + pHash->a;
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return a 32-bit hash value
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static u32 hash_32bit(hash *pHash){
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return (pHash->a & 0xffff) | (((u32)(pHash->b & 0xffff))<<16);
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Maximum number of landmarks to set in the source file.
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define MX_LANDMARK (1024*128)
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A mapping structure is used to record which parts of two
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** files contain the same text. There are zero or more mapping
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** entries in a mapping. Each entry maps a segment of text in
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the source file into a segment of the output file.
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** fromFirst...fromLast -> toFirst...toLast
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Extra text might be inserted in the output file after a
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** mapping. The nExtra parameter records the number of bytes
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of extra text to insert.
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- typedef struct Mapping Mapping;
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Mapping {
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nMap;
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nUsed;
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Mapping_entry {
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int fromFirst, fromLast;
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int toFirst, toLast;
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nExtra;
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- } *aMap;
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- };
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Free malloced memory associated with a mapping.
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void MappingClear(Mapping *p){
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- free(p->aMap);
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(p, 0, sizeof(*p));
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Add an entry to a mapping structure. The mapping is:
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a...b -> c...d
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The nExtra parameter is initially zero. It will be changed
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** later if necessary.
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void MappingInsert(Mapping *p, int a, int b, int c, int d){
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Mapping_entry *pEntry;
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0, pEntry=p->aMap; i<p->nUsed; i++, pEntry++){
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pEntry->fromFirst==a && pEntry->fromLast==b && pEntry->toFirst==c ){
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG2( printf("DUPLICATE: %6d..%-6d %6d..%d\n", a, b, c, d); )
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nUsed>=p->nMap ){
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->nMap = p->nMap * 2 + 10;
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->aMap = realloc(p->aMap, p->nMap*sizeof(p->aMap[0]) );
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->aMap==0 ) exit(1);
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry = &p->aMap[p->nUsed];
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry->fromFirst = a;
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry->fromLast = b;
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry->toFirst = c;
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry->toLast = d;
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEntry->nExtra = 0;
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->nUsed++;
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1(
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** For debugging purposes:
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Print the content of a mapping.
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void MappingPrint(Mapping *pMap){
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Mapping_entry *p;
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0, p=pMap->aMap; i<pMap->nUsed; i++, p++){
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("%6d..%-6d %6d..%-6d %d\n",
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->fromFirst, p->fromLast,
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->toFirst, p->toLast, p->nExtra);
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- )
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Remove deleted entries from a mapping. Deleted enties have
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** an fromFirst of less than 0.
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void MappingPurgeDeletedEntries(Mapping *p){
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i, j;
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=j=0; i<p->nUsed; i++){
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->aMap[i].fromFirst<0 ) continue;
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( j<i ){
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->aMap[j] = p->aMap[i];
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- j++;
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->nUsed = j;
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Comparisons functions used for sorting elements of a Mapping
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int intAbs(int x){ return x<0 ? -x : x; }
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int compareSize(const void *a, const void *b){
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const struct Mapping_entry *A = (const struct Mapping_entry*)a;
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const struct Mapping_entry *B = (const struct Mapping_entry*)b;
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc;
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = (B->fromLast - B->fromFirst) - (A->fromLast - A->fromFirst);
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==0 ){
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = intAbs(A->toFirst - A->fromFirst) -
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- intAbs(B->toFirst - B->fromFirst);
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int compareFrom(const void *a, const void *b){
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const struct Mapping_entry *A = (const struct Mapping_entry*)a;
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const struct Mapping_entry *B = (const struct Mapping_entry*)b;
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return A->fromFirst - B->fromFirst;
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int compareTo(const void *a, const void *b){
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const struct Mapping_entry *A = (const struct Mapping_entry*)a;
247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const struct Mapping_entry *B = (const struct Mapping_entry*)b;
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return A->toFirst - B->toFirst;
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Routines for sorting the entries of a mapping. SortSize sorts
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the entries in order of decreasing size (largest first.)
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SortFrom and SortTo sort the entries in order of increasing
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** fromFirst and toFirst.
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void MappingSortSize(Mapping *p){
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- qsort(p->aMap, p->nUsed, sizeof(p->aMap[0]), compareSize);
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void MappingSortFrom(Mapping *p){
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- qsort(p->aMap, p->nUsed, sizeof(p->aMap[0]), compareFrom);
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void MappingSortTo(Mapping *p){
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- qsort(p->aMap, p->nUsed, sizeof(p->aMap[0]), compareTo);
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Initialize pMap to contain a set of similarities between two files.
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void MappingInit(
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zSrc, /* The source or pattern file */
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int lenSrc, /* Length of the source file */
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zOut, /* The target file */
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int lenOut, /* Length of the target file */
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Mapping *pMap /* Write the map of similaries here */
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i, j, base, prefix;
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int changes;
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- hash h;
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *collide;
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int origLenOut = lenOut;
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Mapping_entry *aMap;
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int landmark[MX_LANDMARK];
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Initialize the map
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(pMap, 0, sizeof(*pMap));
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Find common prefix and suffix
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( lenSrc<=NHASH || lenOut<=NHASH ){
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingInsert(pMap, 0, 0, 0, 0);
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto add_nextra;
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<lenSrc && i<lenOut && zSrc[i]==zOut[i]; i++){}
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i>=NHASH ){
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingInsert(pMap, 0, i-1, 0, i-1);
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lenSrc -= i;
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zSrc += i;
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lenOut -= i;
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zOut += i;
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( lenSrc<=0 || lenOut<=0 ) goto add_nextra;
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- prefix = i;
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- prefix = 0;
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=1; i<=lenSrc && i<=lenOut && zSrc[lenSrc-i]==zOut[lenOut-i]; i++){}
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i>NHASH ){
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingInsert(pMap, prefix+lenSrc-i+1, prefix+lenSrc-1,
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- prefix+lenOut-i+1, prefix+lenOut-1);
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lenSrc -= i;
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lenOut -= i;
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the source file is very small, it means that we have no
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** chance of ever finding any matches. We can leave early.
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( lenSrc<=NHASH ) goto add_nextra;
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Compute the hash table used to locate matching sections in the
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** source file.
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- collide = malloc( lenSrc*sizeof(int)/NHASH );
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( collide==0 ) return;
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(landmark, -1, sizeof(landmark));
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(collide, -1, lenSrc*sizeof(int)/NHASH );
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<lenSrc-NHASH; i+=NHASH){
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int hv;
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- hash_init(&h, &zSrc[i]);
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- hv = hash_32bit(&h) & (MX_LANDMARK-1);
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- collide[i/NHASH] = landmark[hv];
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- landmark[hv] = i/NHASH;
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Begin scanning the target file and generating mappings. In this
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** step, we generate as many mapping entries is we can. Many of these
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** entries might overlap. The overlapping entries are removed by
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the loop the follows.
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- base = 0; /* We have already checked everything before zOut[base] */
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( base<lenOut-NHASH ){
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iSrc, iBlock, nextBase, nextBaseI;
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- hash_init(&h, &zOut[base]);
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i = 0; /* Trying to match a landmark against zOut[base+i] */
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nextBaseI = NHASH;
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nextBase = base;
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while(1){
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int hv;
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- hv = hash_32bit(&h) & (MX_LANDMARK-1);
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG2( printf("LOOKING: %d+%d+%d=%d [%s]\n",
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- prefix,base,i,prefix+base+i, print16(&zOut[base+i])); )
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iBlock = landmark[hv];
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( iBlock>=0 ){
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The hash window has identified a potential match against
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** landmark block iBlock. But we need to investigate further.
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Look for a region in zOut that matches zSrc. Anchor the search
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** at zSrc[iSrc] and zOut[base+i].
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Set cnt equal to the length of the match and set ofst so that
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** zSrc[ofst] is the first element of the match.
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int cnt, ofstSrc;
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int j, k, x, y;
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Beginning at iSrc, match forwards as far as we can. j counts
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the number of characters that match */
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iSrc = iBlock*NHASH;
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(j=0, x=iSrc, y=base+i; x<lenSrc && y<lenOut; j++, x++, y++){
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zSrc[x]!=zOut[y] ) break;
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- j--;
377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Beginning at iSrc-1, match backwards as far as we can. k counts
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the number of characters that match */
380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(k=1; k<iSrc && k<=base+i; k++){
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zSrc[iSrc-k]!=zOut[base+i-k] ) break;
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- k--;
384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Compute the offset and size of the matching region zSrc */
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ofstSrc = iSrc-k;
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cnt = j+k+1;
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG2( printf("MATCH %d bytes at SRC[%d..%d]: [%s]\n",
389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cnt, ofstSrc, ofstSrc+cnt-1, print16(&zSrc[ofstSrc])); )
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( cnt>NHASH ){
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int ofstOut = base+i-k;
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG2( printf("COPY %6d..%-6d %6d..%d\n",
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- prefix+ofstSrc, prefix+ofstSrc+cnt-1,
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- prefix+ofstOut, prefix+ofstOut+cnt-1); )
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingInsert(pMap,
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- prefix+ofstSrc, prefix+ofstSrc+cnt-1,
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- prefix+ofstOut, prefix+ofstOut+cnt-1);
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nextBase < ofstOut+cnt-1 ){
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nextBase = ofstOut+cnt-1;
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nextBaseI = i+NHASH;
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Check the next matching block */
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iBlock = collide[iBlock];
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If we found a match, then jump out to the outer loop and begin
409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a new cycle.
410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nextBase>base && i>=nextBaseI ){
412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- base = nextBase;
413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Advance the hash by one character. Keep looking for a match */
417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( base+i+NHASH>=lenOut ){
418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- base = lenOut;
419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- hash_next(&h, zOut[base+i+NHASH]);
422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i++;
423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- free(collide);
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if 0
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1(
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("after creation:\n");
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingPrint(pMap);
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- )
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* In this step, we will remove overlapping entries from the mapping.
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** We use a greedy algorithm. Select the largest mapping first and
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** remove all overlapping mappings. Then take the next largest
437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** mapping and remove others that overlap with it. Keep going until
438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** all mappings have been processed.
439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingSortSize(pMap);
441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do{
442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- changes = 0;
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<pMap->nUsed; i++){
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int sortNeeded = 0;
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int purgeNeeded = 0;
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Mapping_entry *pA;
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pA = &pMap->aMap[i];
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(j=i+1; j<pMap->nUsed; j++){
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int diff;
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Mapping_entry *pB;
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB = &pMap->aMap[j];
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pB->fromLast<pA->fromFirst || pB->fromFirst>pA->fromLast ){
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* No overlap. Do nothing */
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pB->fromFirst>=pA->fromFirst && pB->fromLast<=pA->fromLast ){
455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* B is contained entirely within A. Drop B */
456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB->fromFirst = -1;
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- purgeNeeded = 1;
458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- continue;
459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pB->fromFirst<pA->fromFirst ){
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The tail B overlaps the head of A */
461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pB->fromLast>=pA->fromFirst && pB->fromLast<=pA->fromLast );
462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff = pB->fromLast + 1 - pA->fromFirst;
463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB->fromLast -= diff;
464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB->toLast -= diff;
465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sortNeeded = 1;
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The head of B overlaps the tail of A */
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pB->fromFirst<=pA->fromLast && pB->fromLast>pA->fromLast );
469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff = pA->fromLast + 1 - pB->fromFirst;
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB->fromFirst += diff;
471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB->toFirst += diff;
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sortNeeded = 1;
473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pB->toLast<pA->toFirst || pB->toFirst>pA->toLast ){
475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* No overlap. Do nothing */
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pB->toFirst>=pA->toFirst && pB->toLast<=pA->toLast ){
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* B is contained entirely within A. Drop B */
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB->fromFirst = -1;
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- purgeNeeded = 1;
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pB->toFirst<pA->toFirst ){
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The tail of B overlaps the head of A */
482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pB->toLast>=pA->toFirst && pB->toLast<=pA->toLast );
483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff = pB->toLast + 1 - pA->toFirst;
484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB->fromLast -= diff;
485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB->toLast -= diff;
486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sortNeeded = 1;
487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The head of B overlaps the tail of A */
489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pB->toFirst<=pA->toLast && pB->toLast>pA->toLast );
490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff = pA->toLast + 1 - pB->toFirst;
491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB->fromFirst += diff;
492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pB->toFirst += diff;
493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sortNeeded = 1;
494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( purgeNeeded ){
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingPurgeDeletedEntries(pMap);
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* changes++; */
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sortNeeded && i<pMap->nUsed-2 ){
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingSortSize(pMap);
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* changes++; */
503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( changes );
506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Final step: Arrange the mapping entires so that they are in the
508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** order of the output file. Then fill in the nExtra values.
509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- add_nextra:
511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingSortTo(pMap);
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aMap = pMap->aMap;
513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<pMap->nUsed-1; i++){
514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aMap[i].nExtra = aMap[i+1].toFirst - aMap[i].toLast - 1;
515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pMap->nUsed>0 && origLenOut > aMap[i].toLast+1 ){
517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aMap[i].nExtra = origLenOut - aMap[i].toLast - 1;
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Translate an index into a file using a mapping.
523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The mapping "p" shows how blocks in the input file map into blocks
525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the output file. The index iFrom is an index into the input file.
526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine returns the index into the output file of the corresponding
527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** character.
528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If pInserted!=0 and iFrom points to the last character before a
530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** insert in the output file, then the return value is adjusted forward
531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** so that it points to the end of the insertion and the number of
532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** bytes inserted is written into *pInserted. If pInserted==0 then
533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** iFrom always maps directly in the corresponding output file
534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** index regardless of whether or not it points to the last character
535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** before an insertion.
536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int MappingTranslate(Mapping *p, int iFrom, int *pInserted){
538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<p->nUsed; i++){
540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iFrom>p->aMap[i].fromLast ) continue;
541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iFrom<=p->aMap[i].fromFirst ){
542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return p->aMap[i].toFirst;
543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pInserted && iFrom==p->aMap[i].fromLast ){
545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n = p->aMap[i].nExtra;
546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pInserted = n;
547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return p->aMap[i].toLast + n;
548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return p->aMap[i].toFirst + iFrom - p->aMap[i].fromFirst;
550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i--;
553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return p->aMap[i].toLast + p->aMap[i].nExtra;
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if 0
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define DEBUG(X) X
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define DEBUG(X)
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Opcodes
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define CPY 0
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define DEL 1
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define INS 2
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define END 3
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define UNK 4
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Compare a single line of text from pV1 and pV2. If the lines
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are the same, return true. Return false if they are different.
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The cursor on both pV1 and pV2 is unchanged.
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int sameLine(Blob *pV1, Blob *pV2){
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *z1, *z2;
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z1 = blob_buffer(pV1);
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z2 = blob_buffer(pV2);
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; z1[i]!='\n' && z1[i]==z2[i]; i++){}
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return z2[i]=='\n' || (z2[i]=='\r' && z2[i+1]=='\n')
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (z1[i]=='\r' && z2[i]=='\n' && z1[i+1]=='\n');
554 59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
555 60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
556 61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
557 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Do a three-way merge. Initialize pOut to contain the result.
558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void blob_merge(Blob *pPivot, Blob *pV1, Blob *pV2, Blob *pOut){
560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Mapping map1, map2, map3;
561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i, j;
562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zV1, *zV2;
563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_zero(pOut);
564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingInit(
565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_buffer(pPivot), blob_size(pPivot),
566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_buffer(pV1), blob_size(pV1),
567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &map1);
568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingSortFrom(&map1);
569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1(
570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("map1-final:\n");
571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingPrint(&map1);
572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- )
573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingInit(
574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_buffer(pPivot), blob_size(pPivot),
575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_buffer(pV2), blob_size(pV2),
576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &map2);
577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1(
578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("map2-final:\n");
579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingPrint(&map2);
580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- )
581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingInit(
582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_buffer(pV1), blob_size(pV1),
583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_buffer(pV2), blob_size(pV2),
584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &map3);
585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1(
586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("map3-final:\n");
587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingPrint(&map3);
588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- )
589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zV1 = blob_buffer(pV1);
590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zV2 = blob_buffer(pV2);
591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( map1.aMap[0].toFirst>0 ){
592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(pOut, zV1, map1.aMap[0].toFirst);
593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1( printf("INSERT %d bytes from V1[0..%d]\n",
594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- map1.aMap[0].toFirst, map1.aMap[0].toFirst-1); )
595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( map2.aMap[0].toFirst>0 ){
597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(pOut, zV2, map2.aMap[0].toFirst);
598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1( printf("INSERT %d bytes from V2[0..%d]\n",
599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- map2.aMap[0].toFirst, map2.aMap[0].toFirst-1); )
600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=j=0; i<map2.nUsed; i++){
602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iFirst, iLast, nInsert, iTail;
603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Mapping_entry *p = &map2.aMap[i];
604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( j<map3.nUsed-1 && map3.aMap[j+1].toFirst>p->toFirst ){ j++; }
605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1(
606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("map2: %6d..%-6d %6d..%-6d %d\n",
607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->fromFirst, p->fromLast, p->toFirst, p->toLast, p->nExtra);
608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("map3: j=%-6d %6d..%-6d\n", j, map3.aMap[j].toFirst,
609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- map3.aMap[j].toLast);
610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iTail = p->toLast + p->nExtra;
612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i<map2.nUsed-1 &&
613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- map3.aMap[j].toFirst<=p->toFirst && map3.aMap[j].toLast>=iTail ){
614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(pOut, &zV2[p->toFirst], iTail - p->toFirst + 1);
615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1(
616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("COPY %d bytes from V2[%d..%d]\n", iTail - p->toFirst+1,
617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->toFirst, iTail);
618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- )
619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- continue;
620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iFirst = MappingTranslate(&map1, p->fromFirst, 0);
622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iLast = MappingTranslate(&map1, p->fromLast, &nInsert);
623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(pOut, &zV1[iFirst], iLast - iFirst + 1);
624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1(
625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("COPY %d bytes from V1[%d..%d]\n", iLast-iFirst+1, iFirst, iLast);
626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- )
627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nExtra>0 ){
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nExtra==nInsert &&
629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memcmp(&zV2[p->toLast+1], &zV1[iLast-nInsert+1], nInsert)==0 ){
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Omit a duplicate insert */
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1( printf("OMIT duplicate insert\n"); )
632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_append(pOut, &zV2[p->toLast+1], p->nExtra);
634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1(
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("INSERT %d bytes from V2[%d..%d]\n",
636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->nExtra, p->toLast+1, p->toLast+p->nExtra);
637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- )
638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingClear(&map1);
642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingClear(&map2);
643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingClear(&map3);
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The merge is an edit against pV2. Both pV1 and pV2 have a
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** common origin at pPivot. Apply the changes of pPivot ==> pV1
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to pV2.
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The return is 0 upon complete success. If any input file is binary,
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** -1 is returned and pOut is unmodified. If there are merge
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** conflicts, the merge proceeds as best as it can and the number
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of conflicts is returns
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int blob_merge(Blob *pPivot, Blob *pV1, Blob *pV2, Blob *pOut){
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *aC1; /* Changes from pPivot to pV1 */
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *aC2; /* Changes from pPivot to pV2 */
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i1, i2;
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int op1, op2;
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int limit1, limit2;
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int inConflict = 0;
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nConflict = 0;
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char zBegin[] = ">>>>>>>> BEGIN MERGE CONFLICT <<<<<<<<\n";
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char zEnd[] = ">>>>>>>>> END MERGE CONFLICT <<<<<<<<<\n";
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aC1 = text_diff(pPivot, pV1, 0, 0);
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aC2 = text_diff(pPivot, pV2, 0, 0);
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aC2==0 || aC2==0 ){
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(aC1);
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(aC2);
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -1;
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_zero(pOut);
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_rewind(pV1);
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_rewind(pV2);
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_rewind(pPivot);
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i1=0; aC1[i1] || aC1[i1+1] || aC1[i1+2]; i1+=3){}
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ limit1 = i1;
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i2=0; aC2[i2] || aC2[i2+1] || aC2[i2+2]; i2+=3){}
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ limit2 = i2;
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DEBUG(
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i1=0; i1<limit1; i1+=3){
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("c1: %4d %4d %4d\n", aC1[i1], aC1[i1+1], aC1[i1+2]);
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i2=0; i2<limit2; i2+=3){
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("c2: %4d %4d %4d\n", aC2[i2], aC2[i2+1], aC2[i2+2]);
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op1 = op2 = UNK;
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i1 = i2 = 0;
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i1<limit1 && aC1[i1]==0 ){ i1++; }
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i2<limit2 && aC2[i2]==0 ){ i2++; }
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while(1){
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op1==UNK ){
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i1>=limit1 ){
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op1 = END;
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DEBUG( printf("get op1=END\n"); )
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op1 = i1 % 3;
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aC1[i1]--;
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DEBUG( printf("get op1=%d from %d (%d->%d)\n",
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op1,i1,aC1[i1]+1,aC1[i1]); )
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i1<limit1 && aC1[i1]==0 ){ i1++; }
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op2==UNK ){
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i2>=limit2 ){
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op2 = END;
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DEBUG( printf("get op2=END\n"); )
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op2 = i2 % 3;
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aC2[i2]--;
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DEBUG( printf("get op2=%d from %d (%d->%d)\n",
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op2,i2,aC2[i2]+1,aC2[i2]); )
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( i2<limit2 && aC2[i2]==0 ){ i2++; }
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DEBUG( printf("op1=%d op2=%d\n", op1, op2); )
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op1==END ){
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op2==INS ){
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(pOut, pV2, 1);
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op2 = UNK;
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( op2==END ){
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op1==INS ){
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(pOut, pV1, 1);
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op1 = UNK;
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( op1==INS && op2==INS ){
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !inConflict && sameLine(pV1, pV2) ){
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(pOut, pV2, 1);
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(0, pV1, 0);
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op1 = UNK;
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op2 = UNK;
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !inConflict ){
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ inConflict = 1;
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nConflict++;
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(pOut, zBegin);
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(pOut, pV1, 1);
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op1 = UNK;
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( op1==INS ){
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(pOut, pV1, 1);
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op1 = UNK;
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( op2==INS ){
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(pOut, pV2, 1);
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op2 = UNK;
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( inConflict ){
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ inConflict = 0;
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(pOut, zEnd);
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op1==DEL || op2==DEL ){
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(0, pPivot, 1);
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op2==CPY ){
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(0, pV2, 1);
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op1==CPY ){
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(0, pV1, 1);
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( op1==CPY && op2==CPY );
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(pOut, pPivot, 1);
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(0, pV1, 1);
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_copy_lines(0, pV2, 1);
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op1 = UNK;
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op2 = UNK;
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( inConflict ){
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(pOut, zEnd);
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(aC1);
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(aC2);
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return nConflict;
644 207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
645 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
646 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
647 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: test-3-way-merge
648 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -675,43 +238,5 @@
675 238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&pivot);
676 239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&v1);
677 240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&v2);
678 241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&merged);
679 242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** COMMAND: test-mapping
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void mapping_test(void){
686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *za, *zb;
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob a, b;
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Mapping map;
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( g.argc!=4 ){
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- usage("FILE1 FILE2");
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_read_from_file(&a, g.argv[2]);
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_read_from_file(&b, g.argv[3]);
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(&map, 0, sizeof(map));
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingInit(blob_buffer(&a), blob_size(&a),
697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_buffer(&b), blob_size(&b),
698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &map);
699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DEBUG1(
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("map-final:\n");
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MappingPrint(&map);
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- )
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- za = blob_buffer(&a);
704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zb = blob_buffer(&b);
705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<map.nUsed; i++){
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("======= %6d..%-6d %6d..%-6d %d\n",
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- map.aMap[i].fromFirst, map.aMap[i].fromLast,
708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- map.aMap[i].toFirst, map.aMap[i].toLast,
709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- map.aMap[i].nExtra);
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("%.*s\n", map.aMap[i].fromLast - map.aMap[i].fromFirst + 1,
711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &za[map.aMap[i].fromFirst]);
712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( map.aMap[i].nExtra ){
713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("======= EXTRA:\n");
714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("%.*s\n", map.aMap[i].nExtra, &zb[map.aMap[i].toLast+1]);
715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
718 243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!