Exemple #1
0
static ssize_t chm_imp_configure_r(mphf_t *mphf, uintmax_t capacity){ // {{{
	uintmax_t              nvertex;
	chm_imp_t             *data              = (chm_imp_t *)&mphf->data;
	
	if(capacity == 0) capacity = 1; // at least one element
	
	// nvertex = (2.09 * capacity)
	if(safe_mul(&nvertex, capacity, CHM_CONST) < 0){
		safe_div(&nvertex, capacity, 100);
		
		if(safe_mul(&nvertex, nvertex, CHM_CONST) < 0)
			return error("too many elements");
	}
	safe_div(&nvertex, nvertex, 100);
	
	data->nvertex            = nvertex;
	data->params.capacity    = capacity;
	data->bt_vertex          = BITS_TO_BYTES( log_any(nvertex, 2) );
	return 0;
} // }}}
Exemple #2
0
static int error(lua_State *L) {
	return log_any(L, NSCAPI::log_level::error);
}
Exemple #3
0
static int info(lua_State *L) {
	return log_any(L, NSCAPI::log_level::info);
}
Exemple #4
0
/* size-tree {{ */
static int      tree_reinit(tree_t *tree){ // {{{
	unsigned int      i;
	size_t            ls;
	unsigned int      nlevels;
	size_t            table_size;
	size_t           *table;
	size_t           *lss;
	off_t            *tof;
	
	buffer_t  req_buffer;
	buffer_init_from_bare(&req_buffer, &tree->blocks_count, sizeof(tree->blocks_count));
	
	hash_t    req_count[] = {
		{ HK(action), DATA_UINT32T(ACTION_COUNT) },
		{ HK(buffer), DATA_BUFFERT(&req_buffer)     },
		hash_end
	};
	if(chain_next_query(tree->chain, req_count) <= 0){
		buffer_destroy(&req_buffer);
		return -1;
	}
	buffer_destroy(&req_buffer);
	
	tree->blocks_count      /= sizeof(block_info);
	
	nlevels = log_any(tree->blocks_count, tree->elements_per_level) + 1;
	if(nlevels == tree->nlevels)
		return 0;
	
	// TODO lock
	
	/* remove old data */
	if(tree->lss != NULL)
		free(tree->lss);
	if(tree->tof != NULL)
		free(tree->tof);
	if(tree->table != NULL)
		free(tree->table);
	
	if( (lss = malloc(sizeof(size_t) * nlevels)) == NULL)
		goto free;
	
	if( (tof = malloc(sizeof(off_t)  * nlevels)) == NULL)
		goto free1;
	
	table_size = 0;
	ls         = 1;
	tof[0]     = 0;
	
	for(i=1; i <= nlevels; i++){
		if(i != nlevels)
			tof[i]    = tof[i - 1] + ls;
		
		table_size       += ls;
		ls               *= tree->elements_per_level;
		lss[nlevels - i]  = ls;
	}
	table_size *= sizeof(size_t);
	
	//printf("tree_reinit: nelements: %x, nlevels: %x, table_size %d\n", (unsigned int)tree->blocks_count, nlevels, (unsigned int)table_size);
	
	if( (table = malloc(table_size)) == NULL )
		goto free2;
	
	tree->table              = table;
	tree->nlevels            = nlevels;
	tree->lss                = lss;                    // LevelSizeSizes
	tree->tof                = tof;                    // TableOFfsets
	
	// TODO unlock

	return 0;
	
free2:	free(tof);
free1:  free(lss);
free:	
	// TODO unlock
	return -1;
} // }}}