X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Futil.c;h=e7514fce6e3bb5c19d51ac23aba3302de998086a;hb=72de763405222cc8f9bc5c75fd163362ec0f2266;hp=4e8b011639958587c173161a974d25739d8ea847;hpb=9f0e2f7de7d919d6a83944f0e7fdbd07cb6c4189;p=bluesky.git diff --git a/bluesky/util.c b/bluesky/util.c index 4e8b011..e7514fc 100644 --- a/bluesky/util.c +++ b/bluesky/util.c @@ -292,3 +292,23 @@ const BlueSkyRangesetItem *bluesky_rangeset_lookup(BlueSkyRangeset *rangeset, else return NULL; } + +/* Look up the first rangeset item starting at or following the given address. + * Can be used to iterate through a rangeset. */ +const BlueSkyRangesetItem *bluesky_rangeset_lookup_next(BlueSkyRangeset *rangeset, uint64_t offset) +{ + GSequenceIter *i; + i = g_sequence_search(rangeset->seq, &offset, compare64, NULL); + i = g_sequence_iter_prev(i); + if (g_sequence_iter_is_end(i)) + return NULL; + BlueSkyRangesetItem *item = (BlueSkyRangesetItem *)g_sequence_get(i); + if (item->start < offset) { + i = g_sequence_iter_next(i); + if (g_sequence_iter_is_end(i)) + item = NULL; + else + item = (BlueSkyRangesetItem *)g_sequence_get(i); + } + return item; +}