Commit c0babbe6 authored by Eric Sunshine's avatar Eric Sunshine Committed by Junio C Hamano

range-set: publish API for re-use by git-blame -L

git-blame is slated to accept multiple -L ranges.  git-log already
accepts multiple -L's but its implementation of range-set, which
organizes and normalizes -L ranges, is private.  Publish the small
subset of range-set API which is needed for git-blame multiple -L
support.
Signed-off-by: Eric Sunshine's avatarEric Sunshine <[email protected]>
Signed-off-by: default avatarJunio C Hamano <[email protected]>
parent 0ddd4719
...@@ -23,7 +23,7 @@ static void range_set_grow(struct range_set *rs, size_t extra) ...@@ -23,7 +23,7 @@ static void range_set_grow(struct range_set *rs, size_t extra)
/* Either initialization would be fine */ /* Either initialization would be fine */
#define RANGE_SET_INIT {0} #define RANGE_SET_INIT {0}
static void range_set_init(struct range_set *rs, size_t prealloc) void range_set_init(struct range_set *rs, size_t prealloc)
{ {
rs->alloc = rs->nr = 0; rs->alloc = rs->nr = 0;
rs->ranges = NULL; rs->ranges = NULL;
...@@ -31,7 +31,7 @@ static void range_set_init(struct range_set *rs, size_t prealloc) ...@@ -31,7 +31,7 @@ static void range_set_init(struct range_set *rs, size_t prealloc)
range_set_grow(rs, prealloc); range_set_grow(rs, prealloc);
} }
static void range_set_release(struct range_set *rs) void range_set_release(struct range_set *rs)
{ {
free(rs->ranges); free(rs->ranges);
rs->alloc = rs->nr = 0; rs->alloc = rs->nr = 0;
...@@ -56,7 +56,7 @@ static void range_set_move(struct range_set *dst, struct range_set *src) ...@@ -56,7 +56,7 @@ static void range_set_move(struct range_set *dst, struct range_set *src)
} }
/* tack on a _new_ range _at the end_ */ /* tack on a _new_ range _at the end_ */
static void range_set_append_unsafe(struct range_set *rs, long a, long b) void range_set_append_unsafe(struct range_set *rs, long a, long b)
{ {
assert(a <= b); assert(a <= b);
range_set_grow(rs, 1); range_set_grow(rs, 1);
...@@ -65,7 +65,7 @@ static void range_set_append_unsafe(struct range_set *rs, long a, long b) ...@@ -65,7 +65,7 @@ static void range_set_append_unsafe(struct range_set *rs, long a, long b)
rs->nr++; rs->nr++;
} }
static void range_set_append(struct range_set *rs, long a, long b) void range_set_append(struct range_set *rs, long a, long b)
{ {
assert(rs->nr == 0 || rs->ranges[rs->nr-1].end <= a); assert(rs->nr == 0 || rs->ranges[rs->nr-1].end <= a);
range_set_append_unsafe(rs, a, b); range_set_append_unsafe(rs, a, b);
...@@ -107,7 +107,7 @@ static void range_set_check_invariants(struct range_set *rs) ...@@ -107,7 +107,7 @@ static void range_set_check_invariants(struct range_set *rs)
* In-place pass of sorting and merging the ranges in the range set, * In-place pass of sorting and merging the ranges in the range set,
* to establish the invariants when we get the ranges from the user * to establish the invariants when we get the ranges from the user
*/ */
static void sort_and_merge_range_set(struct range_set *rs) void sort_and_merge_range_set(struct range_set *rs)
{ {
int i; int i;
int o = 0; /* output cursor */ int o = 0; /* output cursor */
......
...@@ -25,6 +25,18 @@ struct diff_ranges { ...@@ -25,6 +25,18 @@ struct diff_ranges {
struct range_set target; struct range_set target;
}; };
extern void range_set_init(struct range_set *, size_t prealloc);
extern void range_set_release(struct range_set *);
/* Range includes start; excludes end */
extern void range_set_append_unsafe(struct range_set *, long start, long end);
/* New range must begin at or after end of last added range */
extern void range_set_append(struct range_set *, long start, long end);
/*
* In-place pass of sorting and merging the ranges in the range set,
* to sort and make the ranges disjoint.
*/
extern void sort_and_merge_range_set(struct range_set *);
/* Linked list of interesting files and their associated ranges. The /* Linked list of interesting files and their associated ranges. The
* list must be kept sorted by path. * list must be kept sorted by path.
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment