Merge branch 'ps/reftable-reusable-iterator'
Code clean-up to make the reftable iterator closer to be reusable. * ps/reftable-reusable-iterator: reftable/merged: adapt interface to allow reuse of iterators reftable/stack: provide convenience functions to create iterators reftable/reader: adapt interface to allow reuse of iterators reftable/generic: adapt interface to allow reuse of iterators reftable/generic: move seeking of records into the iterator reftable/merged: simplify indices for subiterators reftable/merged: split up initialization and seeking of records reftable/reader: set up the reader when initializing table iterator reftable/reader: inline `reader_seek_internal()` reftable/reader: separate concerns of table iter and reftable reader reftable/reader: unify indexed and linear seeking reftable/reader: avoid copying index iterator reftable/block: use `size_t` to track restart point index
This commit is contained in:
@ -133,6 +133,20 @@ int read_lines(const char *filename, char ***namesp)
|
||||
return err;
|
||||
}
|
||||
|
||||
void reftable_stack_init_ref_iterator(struct reftable_stack *st,
|
||||
struct reftable_iterator *it)
|
||||
{
|
||||
merged_table_init_iter(reftable_stack_merged_table(st),
|
||||
it, BLOCK_TYPE_REF);
|
||||
}
|
||||
|
||||
void reftable_stack_init_log_iterator(struct reftable_stack *st,
|
||||
struct reftable_iterator *it)
|
||||
{
|
||||
merged_table_init_iter(reftable_stack_merged_table(st),
|
||||
it, BLOCK_TYPE_LOG);
|
||||
}
|
||||
|
||||
struct reftable_merged_table *
|
||||
reftable_stack_merged_table(struct reftable_stack *st)
|
||||
{
|
||||
@ -913,7 +927,8 @@ static int stack_write_compact(struct reftable_stack *st,
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = reftable_merged_table_seek_ref(mt, &it, "");
|
||||
merged_table_init_iter(mt, &it, BLOCK_TYPE_REF);
|
||||
err = reftable_iterator_seek_ref(&it, "");
|
||||
if (err < 0)
|
||||
goto done;
|
||||
|
||||
@ -937,7 +952,8 @@ static int stack_write_compact(struct reftable_stack *st,
|
||||
}
|
||||
reftable_iterator_destroy(&it);
|
||||
|
||||
err = reftable_merged_table_seek_log(mt, &it, "");
|
||||
merged_table_init_iter(mt, &it, BLOCK_TYPE_LOG);
|
||||
err = reftable_iterator_seek_log(&it, "");
|
||||
if (err < 0)
|
||||
goto done;
|
||||
|
||||
@ -1333,9 +1349,11 @@ int reftable_stack_read_ref(struct reftable_stack *st, const char *refname,
|
||||
int reftable_stack_read_log(struct reftable_stack *st, const char *refname,
|
||||
struct reftable_log_record *log)
|
||||
{
|
||||
struct reftable_iterator it = { NULL };
|
||||
struct reftable_merged_table *mt = reftable_stack_merged_table(st);
|
||||
int err = reftable_merged_table_seek_log(mt, &it, refname);
|
||||
struct reftable_iterator it = {0};
|
||||
int err;
|
||||
|
||||
reftable_stack_init_log_iterator(st, &it);
|
||||
err = reftable_iterator_seek_log(&it, refname);
|
||||
if (err)
|
||||
goto done;
|
||||
|
||||
|
Reference in New Issue
Block a user