MCPcopy Create free account
hub / github.com/git/git / range_set_difference

Function range_set_difference

line-log.c:189–229  ·  view source on GitHub ↗

* Difference of range sets (out = a \ b). Pass the "interesting" * ranges as 'a' and the target side of the diff as 'b': it removes * the ranges for which the commit is responsible. */

Source from the content-addressed store, hash-verified

187 * the ranges for which the commit is responsible.
188 */
189static void range_set_difference(struct range_set *out,
190 struct range_set *a, struct range_set *b)
191{
192 unsigned int i, j = 0;
193 for (i = 0; i < a->nr; i++) {
194 long start = a->ranges[i].start;
195 long end = a->ranges[i].end;
196 while (start < end) {
197 while (j < b->nr && start >= b->ranges[j].end)
198 /*
199 * a: |-------
200 * b: ------|
201 */
202 j++;
203 if (j >= b->nr || end <= b->ranges[j].start) {
204 /*
205 * b exhausted, or
206 * a: ----|
207 * b: |----
208 */
209 range_set_append(out, start, end);
210 break;
211 }
212 if (start >= b->ranges[j].start) {
213 /*
214 * a: |--????
215 * b: |------|
216 */
217 start = b->ranges[j].end;
218 } else if (end > b->ranges[j].start) {
219 /*
220 * a: |-----|
221 * b: |--?????
222 */
223 if (start < b->ranges[j].start)
224 range_set_append(out, start, b->ranges[j].start);
225 start = b->ranges[j].end;
226 }
227 }
228 }
229}
230
231static void diff_ranges_init(struct diff_ranges *diff)
232{

Callers 1

Calls 1

range_set_appendFunction · 0.85

Tested by

no test coverage detected