Ejemplo n.º 1
0
static void add_element(void)
{
	char keybuf[100];
	struct ht_element *x = malloc(sizeof(struct ht_element));
	sprintf(keybuf,"key%08d", glob_highwater++);
	x->key = strdup(keybuf);
	x->val = strdup("interesting data");
	ast_hashtab_insert_immediate(glob_hashtab, x);
	els_added++;
}
Ejemplo n.º 2
0
/*! /brief Grow the hash data as specified */
static void *hash_test_grow(void *d)
{
	struct hash_test *data = d;
	int i;

	for (i = 0; i < data->max_grow; ++i) {
		char *obj;
		if (is_timed_out(data)) {
			return "Growth timed out";
		}
		obj = ht_new(i);
		if (obj == NULL) {
			return "Allocation failed";
		}
		ast_hashtab_insert_immediate(data->to_be_thrashed, obj);
		ast_atomic_fetchadd_int(&data->grow_count, 1);
	}
	return NULL;
}
Ejemplo n.º 3
0
int print_result(int *currset, int len, char **vals)
{
	char solutionstring[1000];
	
		/* print out the set */
/* 	int i;
	for(i=0;i<len;i++)
	{
		printf("%s", vals[currset[i]]);
	}
	printf("\n"); */

	/* test to see if each of the 6 lines of numbers adds to 26 */	
	if(  (char)vals[currset[0]][0] + (char)vals[currset[2]][0] + (char)vals[currset[5]][0] + (char)vals[currset[7]][0] == 26
	  && (char)vals[currset[0]][0] + (char)vals[currset[3]][0] + (char)vals[currset[6]][0] + (char)vals[currset[10]][0] == 26
	  && (char)vals[currset[1]][0] + (char)vals[currset[2]][0] + (char)vals[currset[3]][0] + (char)vals[currset[4]][0] == 26
	  && (char)vals[currset[1]][0] + (char)vals[currset[5]][0] + (char)vals[currset[8]][0] + (char)vals[currset[11]][0] == 26
	  && (char)vals[currset[7]][0] + (char)vals[currset[8]][0] + (char)vals[currset[9]][0] + (char)vals[currset[10]][0] == 26
	  && (char)vals[currset[4]][0] + (char)vals[currset[6]][0] + (char)vals[currset[9]][0] + (char)vals[currset[11]][0] == 26)
	{
		char *lookup_result;
		 /* yay! we found a solution! Check in the hashtab for it--
		    forming a string of the list of numbers should make for
                    fairly quick way of checking */
		sprintf(solutionstring,"%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d", 
				(char)vals[currset[0]][0],
				(char)vals[currset[1]][0],
				(char)vals[currset[2]][0],
				(char)vals[currset[3]][0],
				(char)vals[currset[4]][0],
				(char)vals[currset[5]][0],
				(char)vals[currset[6]][0],
				(char)vals[currset[7]][0],
				(char)vals[currset[8]][0],
				(char)vals[currset[9]][0],
				(char)vals[currset[10]][0],
				(char)vals[currset[11]][0]);
		lookup_result = ast_hashtab_lookup(solutions, solutionstring);
		if (!lookup_result)
		{
			printf("\n Solution: 1=%d; 2=%d; 3=%d; 4=%d; 5=%d; 6=%d, 7=%d; 8=%d; 9=%d; 10=%d; 11=%d; 12=%d\n",
				   (char)vals[currset[0]][0],
				   (char)vals[currset[1]][0],
				   (char)vals[currset[2]][0],
				   (char)vals[currset[3]][0],
				   (char)vals[currset[4]][0],
				   (char)vals[currset[5]][0],
				   (char)vals[currset[6]][0],
				   (char)vals[currset[7]][0],
				   (char)vals[currset[8]][0],
				   (char)vals[currset[9]][0],
				   (char)vals[currset[10]][0],
				   (char)vals[currset[11]][0]);
			solution_count++;
			/* really, we don't need to insert the unrotated solution;
                           it will never come up again. But, oh, well.... */
			ast_hashtab_insert_immediate(solutions, strdup(solutionstring));

			/* How do I come up the index numbers? just take the drawing, rotate it to the
                           right one step, and now read off the position numbers on the rotated set... */

			/* rotate 1/6 to the right */
			sprintf(solutionstring,"%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d", 
					(char)vals[currset[1]][0],
					(char)vals[currset[7]][0],
					(char)vals[currset[5]][0],
					(char)vals[currset[2]][0],
					(char)vals[currset[0]][0],
					(char)vals[currset[8]][0],
					(char)vals[currset[3]][0],
					(char)vals[currset[11]][0],
					(char)vals[currset[9]][0],
					(char)vals[currset[6]][0],
					(char)vals[currset[4]][0],
					(char)vals[currset[10]][0]);
			ast_hashtab_insert_immediate(solutions, strdup(solutionstring));
			/* rotate 2/6 to the right */
			sprintf(solutionstring,"%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d", 
					(char)vals[currset[7]][0],
					(char)vals[currset[11]][0],
					(char)vals[currset[8]][0],
					(char)vals[currset[5]][0],
					(char)vals[currset[1]][0],
					(char)vals[currset[9]][0],
					(char)vals[currset[2]][0],
					(char)vals[currset[10]][0],
					(char)vals[currset[6]][0],
					(char)vals[currset[3]][0],
					(char)vals[currset[0]][0],
					(char)vals[currset[4]][0]);
			ast_hashtab_insert_immediate(solutions, strdup(solutionstring));
			/* rotate 3/6 to the right */
			sprintf(solutionstring,"%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d", 
					(char)vals[currset[11]][0],
					(char)vals[currset[10]][0],
					(char)vals[currset[9]][0],
					(char)vals[currset[8]][0],
					(char)vals[currset[7]][0],
					(char)vals[currset[6]][0],
					(char)vals[currset[5]][0],
					(char)vals[currset[4]][0],
					(char)vals[currset[3]][0],
					(char)vals[currset[2]][0],
					(char)vals[currset[1]][0],
					(char)vals[currset[0]][0]);
			ast_hashtab_insert_immediate(solutions, strdup(solutionstring));
			/* rotate 4/6 to the right */
			sprintf(solutionstring,"%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d", 
					(char)vals[currset[10]][0],
					(char)vals[currset[4]][0],
					(char)vals[currset[6]][0],
					(char)vals[currset[9]][0],
					(char)vals[currset[11]][0],
					(char)vals[currset[3]][0],
					(char)vals[currset[8]][0],
					(char)vals[currset[0]][0],
					(char)vals[currset[2]][0],
					(char)vals[currset[5]][0],
					(char)vals[currset[7]][0],
					(char)vals[currset[1]][0]);
			ast_hashtab_insert_immediate(solutions, strdup(solutionstring));
			/* rotate 5/6 to the right */
			sprintf(solutionstring,"%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-%d", 
					(char)vals[currset[4]][0],
					(char)vals[currset[0]][0],
					(char)vals[currset[3]][0],
					(char)vals[currset[6]][0],
					(char)vals[currset[10]][0],
					(char)vals[currset[2]][0],
					(char)vals[currset[9]][0],
					(char)vals[currset[1]][0],
					(char)vals[currset[5]][0],
					(char)vals[currset[8]][0],
					(char)vals[currset[11]][0],
					(char)vals[currset[7]][0]);
			ast_hashtab_insert_immediate(solutions, strdup(solutionstring));
		}
		else
			non_unique_solutions_count++;
	}
	
	permutation_count++;
	if( ((permutation_count+1) % 1000000) == 0 )
	{
		printf("."); fflush(stdout); /* show progress to keep the impatient calm -- you should get around 470 of these, each standing for a million generated permutations */
	}
}