Beispiel #1
0
ssize_t mphf_chm_imp_rebuild     (mphf_t *mphf){ // {{{
	ssize_t                ret;
	uint64_t               nelements;
	uint64_t               capacity_curr;
	chm_imp_t             *data = (chm_imp_t *)&mphf->data;
	
	//                  |  empty array        |  existing array
	// -----------------+---------------------+--------------------------
	// params.nelements |  0                  |  calculated array size
	// params.capacity  |  0                  |  array defined capacity
	// -----------------+---------------------+--------------------------
	
	capacity_curr = data->params.capacity;
	if(
		safe_div(&capacity_curr, capacity_curr, 100) < 0 ||
		safe_mul(&capacity_curr, capacity_curr, REBUILD_CONST) < 0
	)
		capacity_curr = data->params.capacity;
	
	nelements = data->params.nelements;
	
	if(nelements >= capacity_curr){
		// expand array
		nelements  = MAX(MAX(data->params.capacity, data->nelements_min), nelements);
		nelements += data->nelements_step;
		nelements *= data->nelements_mul;
#ifdef MPHF_DEBUG
	printf("mphf expand rebuild on %x (%d) elements\n", (int)nelements, (int)nelements);
#endif
	}else{
		// ordinary rebuild
		nelements = data->params.capacity;
#ifdef MPHF_DEBUG
	printf("mphf normal rebuild on %x (%d) elements\n", (int)nelements, (int)nelements);
#endif
	}
	
	// set .params
	data->params.hash1     = random();
	data->params.hash2     = random();
	data->params.nelements = 0;
	if( (ret = chm_imp_configure_r(mphf, nelements)) < 0)
		return ret;
	
	// reinit files
	if( (ret = chm_imp_file_init(mphf)) < 0)
		return ret;
	
	// save new .params
	if( (ret = chm_imp_param_write(mphf)) < 0)
		return ret;
	
	return 0;
} // }}}
Beispiel #2
0
static ssize_t chm_imp_unload     (mphf_t *mphf){ // {{{
	chm_imp_t             *data  = (chm_imp_t *)&mphf->data;
	
	// save .params
	chm_imp_param_write(mphf);
	
	fastcall_free r_free = { { 2, ACTION_FREE } };
	data_query(&data->be_g, &r_free);
	data_query(&data->be_e, &r_free);
	data_query(&data->be_v, &r_free);
	return 0;
} // }}}
Beispiel #3
0
static ssize_t chm_imp_unload     (mphf_t *mphf){ // {{{
	chm_imp_t             *data  = (chm_imp_t *)&mphf->data;
	
	// save .params
	chm_imp_param_write(mphf);
	
	if(data->be_g)
		backend_destroy(data->be_g);
	
	if( (data->status & WRITEABLE) ){
		backend_destroy(data->be_e);
		backend_destroy(data->be_v);
	}
	return 0;
} // }}}