// 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); }