示例#1
0
文件: testhash.c 项目: ffbli666/D2MCE
int main(int argc, char* argv[]){
	struct hashtable *a;
	struct abc **tb;
	struct abc *abc;
	int i;
	a = hashTableCreate(10);
	tb = (struct abc**)getHashTable(a);
	for(i=0;i<10;i++){
		if(tb[i] == NULL)
			printf("%d:null\n",i);
	}
	for(i=0;i<5;i++){
		abc=malloc(sizeof(struct abc));
		abc->a=i+1;
		abc->b=i+2;
		tb[i]=abc;
	}
    for(i=0;i<10;i++){
        if(tb[i] == NULL)
            printf("%d:null\n",i);
		else
			printf("%d:a:%d,b:%d\n",i, tb[i]->a, tb[i]->b);
    }

	return 1;
}
示例#2
0
int sem_imanager_req(){
	int i, j;
	void *buf;
	unsigned int offset;
	unsigned int queue_count;
	unsigned int src_node;
	unsigned int seq_number;
	struct sem *find;
	struct req_node_info node;
	char *sem_name;
	if(g_group.coordinator.sem_id == g_group.node_id)
		return 1;
	//max 33 sem
	buf = mem_malloc(SEM_ISEM_SIZE);
	((struct request_header*)buf)->msg_type = MSG_ISEM_MANAGER;
	sendRecv(g_group.coordinator.sem_id, buf, sizeof(struct request_header),
			buf, SEM_ISEM_SIZE);
	if(g_group.sem_table == NULL){
		g_group.sem_table = hashTableCreate(SEM_HASH_SIZE);
	}
	src_node = ((struct isem_reply*)buf)->req.src_node;
	seq_number = ((struct isem_reply*)buf)->req.src_seq_number;
	offset = sizeof(struct isem_reply);
	for(i=0; i<((struct isem_reply*)buf)->sem_num; i++){
		//sem name
		sem_name = malloc(((struct sem_info*)(buf+offset))->name_len);
		memcpy(sem_name, buf+offset+sizeof(struct sem_info), ((struct sem_info*)(buf+offset))->name_len);
		sem_name[((struct sem_info*)(buf+offset))->name_len] = 0;
		//search sem
		find = hashTableSearch(g_group.sem_table, ((struct sem_info*)(buf+offset))->hash_id, sem_name);
		if(find == NULL){
			//create new
			find = createNewSem(((struct sem_info*)(buf+offset))->hash_id, sem_name, ((struct sem_info*)(buf+offset))->value);
			hashTableInsert(g_group.sem_table, (struct hashheader*)find);
		}else{
			if(find->queue->use!=0){
				while(queuePop(find->queue)!=NULL);
			}
		}
		//copy queue info
		queue_count = ((struct sem_info*)(buf+offset))->queue_count;
		offset += sizeof(struct sem_info)+strlen(sem_name);
		for(j=0; j< queue_count;j++){
			node.id = ((struct req_node_info*)(buf+offset))->id;
			node.seq_number = ((struct req_node_info*)(buf+offset))->seq_number;
			queuePush(find->queue, (void*)&node);
			offset += sizeof(struct req_node_info);
		}
	}	
	g_group.coordinator.sem_id = g_group.node_id;
	((struct request_header*)buf)->msg_type = MSG_ISEM_READY;
	((struct request_header*)buf)->seq_number = seq_number;
	sendTo(src_node ,buf, sizeof(struct request_header));
	mem_free(buf);
	return 1;
}
示例#3
0
int main()
{
	hashTable* nein = hashTableCreate(TABLE_SIZE);
	int count = 0;
	int i = 0;
	int percents[] = { 50, 75, 90, 99 };
	//char *string[] = { "hello", "hellod", "hellod" };
	


	srand((unsigned int)time(NULL));
	for (i = 0; i < 1000; i++)
	{
		int len = (rand() % 15) + 3;
		char *generated_string = generated_string = generateString(len);
		int index = BKDRHash(generated_string, len);
		addIntoList(nein->data, index, generated_string);
		
	}

	return 0;
}
示例#4
0
文件: manager.c 项目: ffbli666/D2MCE
int main_imanager_req(){
	int i, j;
	int index;
	void *buf;
	unsigned int offset;
	unsigned int users_count;
	unsigned int src_node;
	unsigned int seq_number;
	unsigned int node_id;
	struct sm_header *find;
	char *sm_name;
	if(g_group.coordinator.main_id == g_group.node_id)
		return 1;
	//max 33 mutex
	buf = mem_malloc(MAIN_IMAIN_SIZE);
	((struct request_header*)buf)->msg_type = MSG_IMAIN_MANAGER;
	sendRecv(g_group.coordinator.main_id, buf, sizeof(struct request_header),
			buf, MSG_IMAIN_MANAGER);
	if(g_group.sm_table == NULL){
		g_group.sm_table = hashTableCreate(SM_HASH_SIZE);
	}
	
	src_node = ((struct imain_reply*)buf)->req.src_node;
	seq_number = ((struct imain_reply*)buf)->req.src_seq_number;
	offset = sizeof(struct imain_reply);
	//copy share memory data
	for(i=0; i<((struct imain_reply*)buf)->sm_num; i++){
		//mutex name
		sm_name = malloc(((struct main_sm_info*)(buf+offset))->name_len);
		memcpy(sm_name, buf+offset+sizeof(struct main_sm_info), ((struct main_sm_info*)(buf+offset))->name_len);
		sm_name[((struct main_sm_info*)(buf+offset))->name_len] = 0;
		printf("%s", sm_name);
		//search mutex
		find = hashTableSearch(g_group.sm_table, ((struct main_sm_info*)(buf+offset))->hash_id, sm_name);
		if(find == NULL){
			//create new
			find = createSM(((struct main_sm_info*)(buf+offset))->hash_id, sm_name, 
						((struct main_sm_info*)(buf+offset))->home_node, ((struct main_sm_info*)(buf+offset))->size);
			hashTableInsert(g_group.sm_table, (struct hashheader*)find);
		}
		//copy 
		find->count = ((struct main_sm_info*)(buf+offset))->count;
		//copy queue info
		users_count = ((struct main_sm_info*)(buf+offset))->users_count;
		offset += sizeof(struct main_sm_info)+strlen(sm_name);
		if(find->users == NULL)
			find->users = tableCreate(MAX_NODE_NUM, sizeof(unsigned int));
		for(j=0; j< users_count; j++){
			node_id = *((unsigned int*)(buf+offset));
			if(searchNode(find->users, src_node)==-1){
				index = tableGetEmpty(find->users);
				if(index == -1)
					return -1;
				tableAdd(find->users, (void*)&src_node, index);
			}
			offset += sizeof(unsigned int);
		}
	}	
	g_group.coordinator.main_id = g_group.node_id;
	((struct request_header*)buf)->msg_type = MSG_IMAIN_READY;
	((struct request_header*)buf)->seq_number = seq_number;
	sendTo(src_node ,buf, sizeof(struct request_header));
	mem_free(buf);
	return 1;
}