reftable/merged: expose functions to initialize iterators

We do not expose any functions via our public headers that would allow a caller to initialize a reftable iterator from a merged table. Instead, they are expected to go via the generic `reftable_table` interface, which is somewhat roundabout. Implement two new functions to initialize iterators for ref and log records to plug this gap. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Aug 22, 2024 at 08:34 UTC 987762a51a12e3fdbf517bcc3b4e2d5cc17658a4
2 files changed +20
reftable/merged.c
+12
@@ -254,6 +254,18 @@ void merged_table_init_iter(struct reftable_merged_table *mt,
254 iterator_from_merged_iter(it, mi);
255 }
256
257 +void reftable_merged_table_init_ref_iterator(struct reftable_merged_table *mt,
258 + struct reftable_iterator *it)
259 +{
260 + merged_table_init_iter(mt, it, BLOCK_TYPE_REF);
261 +}
262 +
263 +void reftable_merged_table_init_log_iterator(struct reftable_merged_table *mt,
264 + struct reftable_iterator *it)
265 +{
266 + merged_table_init_iter(mt, it, BLOCK_TYPE_LOG);
267 +}
268 +
269 uint32_t reftable_merged_table_hash_id(struct reftable_merged_table *mt)
270 {
271 return mt->hash_id;
reftable/reftable-merged.h
+8
@@ -36,6 +36,14 @@ int reftable_new_merged_table(struct reftable_merged_table **dest,
36 struct reftable_table *stack, size_t n,
37 uint32_t hash_id);
38
39 +/* Initialize a merged table iterator for reading refs. */
40 +void reftable_merged_table_init_ref_iterator(struct reftable_merged_table *mt,
41 + struct reftable_iterator *it);
42 +
43 +/* Initialize a merged table iterator for reading logs. */
44 +void reftable_merged_table_init_log_iterator(struct reftable_merged_table *mt,
45 + struct reftable_iterator *it);
46 +
47 /* returns the max update_index covered by this merged table. */
48 uint64_t
49 reftable_merged_table_max_update_index(struct reftable_merged_table *mt);