Esempio n. 1
0
static acseg_index_item_t *
create_index_item(acseg_str_t *atom, acseg_rbtree_node_t 
		*rbtree_sentinel, mc_collector_t **mc)
{
	acseg_index_item_t *index_item;


	index_item = (acseg_index_item_t *) mc_calloc(mc, sizeof(acseg_index_item_t));

	acseg_copy_str_t(&(index_item->atom), atom, mc);

	index_item->output = acseg_list_init(mc);
	index_item->extra_outputs = acseg_list_init(mc);
	index_item->failure = NULL;

	index_item->childs_rbtree = (acseg_rbtree_t *) mc_calloc(mc, sizeof(acseg_rbtree_t));

	acseg_rbtree_init(index_item->childs_rbtree, 
			rbtree_sentinel, acseg_rbtree_insert_value);
	
	return index_item;
}
Esempio n. 2
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);
}
Esempio n. 3
0
static acseg_result_t *
acseg_result_init(void)
{
	mc_collector_t *mc;
	acseg_result_t *result;

	mc = NULL;

	result = (acseg_result_t *) mc_calloc(&mc, sizeof(acseg_result_t));
	result->list = acseg_list_init(&mc);
	result->mc = mc;
	result->num = 0;

	return result;
}
Esempio n. 4
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;
}