Example #1
0
// INITIALIZING EACH ROOM IS CAPITAL. YOU WILL SEGFAULT YOU SON OF A BITCH. DO YOU HEAR ME ? YOU WILL. SEGFAULT.
// CAN YOU REDEFINE START OR END WITHOUT HAVING TO CREATE ANOTHER ROOM ?
int			main(int argc, char **argv)
{
	t_lem	lem;
	char	*line;
	int		break_loop;
	int		fd;

	line = NULL;
	init_lem(&lem);
	break_loop = 0;
	fd = open(argv[1], O_RDONLY);
	while(break_loop == 0 && get_next_line(fd, &line))
	{
		if (line[0] == '#')
			break_loop = comment_start_end(&lem, line, break_loop, fd);
		else if (lem.colony == -1)
			break_loop = where_is_my_colony(&lem, line);
		else if (!(ft_strchr(line, '-') && line[0] > 32))			// WARNING, WE DO NOT ACCEPT MORE THAN ONE SPACE BETWEEN "NAME X Y" I MUST THINK ABOUT A WAY TO
			break_loop = room_specs(line, &lem, 0);
		else if ((ft_strchr(line, '-')) && line[0] > 32)
		{
			lem.phase = (lem.phase == 0) ? 1 : lem.phase;
			break_loop = links(&lem, line);
			lem.match = 0;
		}
	}
	final_step(break_loop, lem);
	return (0);
}
bool PinyinLookup::get_best_match(PinyinKeyVector keys, CandidateConstraints constraints, MatchResults & results){
    //g_array_set_size(results, 0);

    m_constraints = constraints;
    m_keys = keys;
    int nstep = keys->len + 1;

    //free m_steps_index
    for ( size_t i = 0; i < m_steps_index->len; ++i){
	GHashTable * table = (GHashTable *) g_ptr_array_index(m_steps_index, i);
	g_hash_table_destroy(table);
	g_ptr_array_index(m_steps_index, i) = NULL;
    }

    //free m_steps_content
    for ( size_t i = 0; i < m_steps_content->len; ++i){
	GArray * array = (GArray *) g_ptr_array_index(m_steps_content, i);
	g_array_free(array, TRUE);
	g_ptr_array_index(m_steps_content, i) = NULL;
    }    
    
    //add null start step
    g_ptr_array_set_size(m_steps_index, nstep);
    g_ptr_array_set_size(m_steps_content, nstep);

    for ( size_t i = 0 ; i < nstep; ++i ){
	//initialize m_steps_index
	g_ptr_array_index(m_steps_index, i) = g_hash_table_new(g_direct_hash, g_direct_equal);
	//initialize m_steps_content
	g_ptr_array_index(m_steps_content, i) = g_array_new(FALSE, FALSE, sizeof(lookup_value_t));
    }
    
    lookup_key_t initial_key = sentence_start;
    lookup_value_t initial_value(log(1));
    initial_value.m_handles[1] = sentence_start;
    GArray * initial_step_content = (GArray *) g_ptr_array_index(m_steps_content, 0);
    initial_step_content = g_array_append_val(initial_step_content, initial_value);
    GHashTable * initial_step_index = (GHashTable *) g_ptr_array_index(m_steps_index, 0);
    g_hash_table_insert(initial_step_index, GUINT_TO_POINTER(initial_key), GUINT_TO_POINTER(initial_step_content->len - 1));

#if 0
    LookupStepContent tmp_step = (LookupStepContent) g_ptr_array_index(m_steps_content, 0);
    IBranchIterator * iter = m_winner_tree->get_iterator(tmp_step);
    size_t npinyin = prepare_table_cache(0, keys->len);
    search_unigram(iter, 0, npinyin);
    delete iter;
#endif

    for ( size_t i = 0 ; i < nstep - 1 ; ++i ){
	LookupStepContent tmp_step = (LookupStepContent) g_ptr_array_index(m_steps_content, i);
	IBranchIterator * iter = m_winner_tree->get_iterator(tmp_step);
	size_t npinyin = prepare_table_cache(i, keys->len - i);
	search_bigram(iter, i, npinyin),
	    search_unigram(iter, i, npinyin);
	delete iter;
    }
    return final_step(results);
}