#ifndef CHUNK_TABLE_H_ #define CHUNK_TABLE_H_ #include "b-tree.h" #include "bin.h" #include #include #include struct ec3_tag_ioctx; struct chunk_table { struct b_tree tab_chunks; enum ec3_cluster_size tab_cluster_size; b_btree tab_cache; unsigned char *tab_cluster_buf; size_t tab_cluster_buf_pos; size_t tab_next_cdat_cluster; struct ec3_tag_ioctx *tab_ctab; struct ec3_tag_ioctx *tab_cdat; b_hash_ctx tab_hash; size_t tab_first_chunk_cdat_cluster; }; extern enum ec3_status chunk_table_init( struct ec3_tag_ioctx *ctab, struct ec3_tag_ioctx *cdat, enum ec3_cluster_size cluster_size, struct chunk_table *tab); extern void chunk_table_init_empty_table(struct chunk_table *table); extern void chunk_table_finish(struct chunk_table *tab); extern enum ec3_status chunk_table_get( struct chunk_table *tab, ec3_chunk_id id, void *out_data, size_t *out_len); extern enum ec3_status chunk_table_begin_chunk(struct chunk_table *tab); extern enum ec3_status chunk_table_put( struct chunk_table *tab, const void *data, size_t len); extern enum ec3_status chunk_table_end_chunk( struct chunk_table *tab, ec3_chunk_id out_chunk_id); extern size_t chunk_table_bytes_per_chunk(struct chunk_table *tab); extern void ec3_chunk_id_to_string( const ec3_chunk_id id, char *out, size_t max); #endif