Implement very basic grouped fetches of objects from the cloud.
[bluesky.git] / bluesky / util.c
index e7514fc..c5618b9 100644 (file)
@@ -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;
+}