X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Futil.c;h=c5618b9125d4f81d84f852c3328668047d47793e;hb=43b95b084f95a57e6a08ab986037c4d3a72d2052;hp=e7514fce6e3bb5c19d51ac23aba3302de998086a;hpb=7f47ef48ce38ab71fc414bee592a9078ed1c0a7a;p=bluesky.git diff --git a/bluesky/util.c b/bluesky/util.c index e7514fc..c5618b9 100644 --- a/bluesky/util.c +++ b/bluesky/util.c @@ -312,3 +312,27 @@ const BlueSkyRangesetItem *bluesky_rangeset_lookup_next(BlueSkyRangeset *rangese } return item; } + +/* Determine the full extent of a rangeset--the smallest offset covered and the + * length needed to extend to the end of the last item. */ +void bluesky_rangeset_get_extents(BlueSkyRangeset *rangeset, + uint64_t *start, uint64_t *length) +{ + GSequenceIter *i; + BlueSkyRangesetItem *item; + + i = g_sequence_get_begin_iter(rangeset->seq); + if (g_sequence_iter_is_end(i)) { + *start = 0; + *length = 0; + return; + } + + item = (BlueSkyRangesetItem *)g_sequence_get(i); + *start = item->start; + + i = g_sequence_get_end_iter(rangeset->seq); + i = g_sequence_iter_prev(i); + item = (BlueSkyRangesetItem *)g_sequence_get(i); + *length = (item->start + item->length) - *start; +}