summaryrefslogtreecommitdiff
path: root/src/offmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/offmap.c')
-rw-r--r--src/offmap.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/offmap.c b/src/offmap.c
index 09f8a2eb0..162501d8f 100644
--- a/src/offmap.c
+++ b/src/offmap.c
@@ -82,6 +82,25 @@ int git_offmap_exists(git_offmap *map, const git_off_t key)
return kh_get(off, map, key) != kh_end(map);
}
+int git_offmap_iterate(void **value, git_offmap *map, size_t *iter, git_off_t *key)
+{
+ size_t i = *iter;
+
+ while (i < git_offmap_end(map) && !git_offmap_has_data(map, i))
+ i++;
+
+ if (i >= git_offmap_end(map))
+ return GIT_ITEROVER;
+
+ if (key)
+ *key = git_offmap_key_at(map, i);
+ if (value)
+ *value = git_offmap_value_at(map, i);
+ *iter = ++i;
+
+ return 0;
+}
+
size_t git_offmap_lookup_index(git_offmap *map, const git_off_t key)
{
return kh_get(off, map, key);