#ifndef __CMPH_BRZ_STRUCTS_H__
#define __CMPH_BRZ_STRUCTS_H__

#include "hash_state.h"

struct __brz_data_t
{
	CMPH_ALGO algo;      // CMPH algo for generating the MPHFs for the buckets (Just CMPH_FCH and CMPH_BMZ8)
	cmph_uint32 m;       // edges (words) count
	double c;      // constant c
	cmph_uint8  *size;   // size[i] stores the number of edges represented by g[i][...]. 
	cmph_uint32 *offset; // offset[i] stores the sum: size[0] + size[1] + ... size[i-1].
	cmph_uint8 **g;      // g function. 
	cmph_uint32 k;       // number of components
	hash_state_t **h1;
	hash_state_t **h2;
	hash_state_t * h0;
};

struct __brz_config_data_t
{
	CMPH_HASH hashfuncs[3];
	CMPH_ALGO algo;      // CMPH algo for generating the MPHFs for the buckets (Just CMPH_FCH and CMPH_BMZ8)
	double c;      // constant c
	cmph_uint32 m;       // edges (words) count
	cmph_uint8  *size;   // size[i] stores the number of edges represented by g[i][...]. 
	cmph_uint32 *offset; // offset[i] stores the sum: size[0] + size[1] + ... size[i-1].
	cmph_uint8 **g;      // g function. 
	cmph_uint8  b;       // parameter b. 
	cmph_uint32 k;       // number of components
	hash_state_t **h1;
	hash_state_t **h2;
	hash_state_t * h0;    
	cmph_uint32 memory_availability; 
	cmph_uint8 * tmp_dir; // temporary directory 
	FILE * mphf_fd; // mphf file
};

#endif