in src/logreader.c [204:232]
static sparkey_returncode seekblock(sparkey_logiter *iter, sparkey_logreader *log, uint64_t position) {
iter->block_offset = 0;
if (iter->block_position == position) {
return SPARKEY_SUCCESS;
}
if (sparkey_uses_compressor(log->header.compression_type)) {
uint64_t pos = position;
// TODO: assert that we're not reading > uint32_t
uint32_t compressed_size = read_vlq(log->data, &pos);
uint64_t next_pos = pos + compressed_size;
uint32_t uncompressed_size = log->header.compression_block_size;
sparkey_returncode ret = sparkey_compressors[log->header.compression_type].decompress(
&log->data[pos], compressed_size, iter->compression_buf, &uncompressed_size);
if (ret != SPARKEY_SUCCESS) {
return ret;
}
iter->block_position = position;
iter->next_block_position = next_pos;
iter->block_len = uncompressed_size;
} else {
iter->compression_buf = &log->data[position];
iter->block_position = position;
iter->next_block_position = log->header.data_end;
iter->block_len = log->data_len - position;
}
return SPARKEY_SUCCESS;
}