/*
Copyright 2020 Google LLC

Use of this source code is governed by a BSD-style
license that can be found in the LICENSE file or at
https://developers.google.com/open-source/licenses/bsd
*/

#ifndef WRITER_H
#define WRITER_H

#include "basics.h"
#include "block.h"
#include "tree.h"
#include "reftable-writer.h"

struct reftable_writer {
	ssize_t (*write)(void *, const void *, size_t);
	int (*flush)(void *);
	void *write_arg;
	int pending_padding;
	struct strbuf last_key;

	/* offset of next block to write. */
	uint64_t next;
	uint64_t min_update_index, max_update_index;
	struct reftable_write_options opts;

	/* memory buffer for writing */
	uint8_t *block;

	/* writer for the current section. NULL or points to
	 * block_writer_data */
	struct block_writer *block_writer;

	struct block_writer block_writer_data;

	/* pending index records for the current section */
	struct reftable_index_record *index;
	size_t index_len;
	size_t index_cap;

	/*
	 * tree for use with tsearch; used to populate the 'o' inverse OID
	 * map */
	struct tree_node *obj_index_tree;

	struct reftable_stats stats;
};

#endif
