Example #1
0
int main(int argc, char **argv){
	mc_collector_t *mc;	
	mc = NULL;

	void *data;
	data = (void *) mc_calloc(&mc, 15);

	acseg_list_t *list;	
	list = acseg_list_init(&mc);
	acseg_queue_push(list, data, &mc);	
	acseg_queue_pop(list);
	mc_free(data);
	mc_destory(mc);
}
Example #2
0
fkw_word_list_t *
fkw_full_seg(fkw_str_t *text, fkw_dict_array_t *dict_array)
{
	u_char *start;

	fkw_str_t atom_value;

	fkw_atom_iter_t *atom_iter;

	fkw_word_list_t *word_list;

	mc_collector_t *mc;

	atom_iter = atom_iter_init(MAX_WORD_SIZE);

	mc = NULL;
	word_list = (fkw_word_list_t *) mc_calloc(&mc, sizeof(fkw_word_list_t));
	word_list->start = NULL;
	word_list->end   = NULL;
	word_list->num   = 0;
	word_list->mc    = mc;

	start = text->data;
	while ((start - text->data) < text->len) {
		atom_value.data = start;
		atom_value.len  = get_mblen((u_char)start[0]);
		
		atom_iterator_add(atom_iter, &atom_value);
		if (atom_iter->free_list == NULL) {
			fkw_do_seg(dict_array, atom_iter, word_list);
		}

		start = start + atom_value.len;
	}

	fkw_atom_iter_pop(atom_iter);
	while (atom_iter->worker_list && atom_iter->worker_list->next){
		fkw_do_seg(dict_array, atom_iter, word_list);
		fkw_atom_iter_pop(atom_iter);
	}

	// free atom iter's memory
	mc_destory(atom_iter->mc);
	return word_list;
}
Example #3
0
void 
acseg_destory_result(acseg_result_t **result)
{
	mc_destory( (*result)->mc );
	*result = NULL;
}
Example #4
0
void 
acseg_destory_index(acseg_index_t **acseg_index)
{
	mc_destory( (*acseg_index)->mc );
	*acseg_index = NULL;
}
Example #5
0
void 
acseg_index_fix(acseg_index_t *acseg_index)
{
	mc_collector_t *local_mc;

	acseg_list_t *queue, *child_queue;

	acseg_rbtree_t *rbtree, *child_rbtree;

	acseg_index_item_t *index_item, *parent_failure;
	acseg_index_item_t *tmp_index_item, *child_item;

	local_mc = NULL;

	queue = acseg_list_init(&local_mc);
	child_queue = acseg_list_init(&local_mc);

	rbtree = acseg_index->root->childs_rbtree;

	add_all_item_to_queue(rbtree->root, 
			rbtree->sentinel, queue, &local_mc);

	set_index_item_failure(queue, acseg_index->root);

	while ( (index_item = acseg_queue_pop(queue)) ){
		child_rbtree = index_item->childs_rbtree;

		add_all_item_to_queue(child_rbtree->root, 
				child_rbtree->sentinel, child_queue, &local_mc);

		child_item = acseg_queue_pop(child_queue);
		while (child_item) {
			acseg_queue_push(queue, child_item, &local_mc);

			parent_failure = index_item->failure;
			
			while (1) {
				tmp_index_item = find_child_index_item(parent_failure, &(child_item->atom));
				if (tmp_index_item == NULL) {
					if (parent_failure == acseg_index->root) {
						tmp_index_item = parent_failure;
						break;
					} else {
						parent_failure = parent_failure->failure;
					}
				} else {
					break;
				}
			}

			child_item->failure = tmp_index_item;

			acseg_list_extend(child_item->extra_outputs,
					tmp_index_item->output, &(acseg_index->mc));

			acseg_list_extend(child_item->extra_outputs, 
					tmp_index_item->extra_outputs, &(acseg_index->mc));

			child_item = acseg_queue_pop(child_queue);
		}
	}

	mc_destory(local_mc);
	acseg_index->state = AC_INDEX_FIXED;
}
Example #6
0
void fkw_free_word_list(fkw_word_list_t **word_list)
{
	mc_destory((*word_list)->mc);
	*word_list = NULL;
}
void fkw_free_dict(fkw_dict_array_t **dict_array)
{
	mc_destory( (*dict_array)->mc );
	*dict_array = NULL;
}