Exemple #1
0
static Alignment *Optimal_find_path_reduced_space(Optimal *optimal,
           Region *region, gpointer user_data, SubOpt *subopt){
    register Alignment *alignment;
    register SListSet *slist_set = SListSet_create();
    register SList *vsa_list = SList_create(slist_set);
    register SListNode *node;
    register gint cell_size
             = optimal->find_checkpoint_continuation->cell_size;
    register C4_Score score,
                     *dummy_first_cell = g_new0(C4_Score, cell_size),
                     *dummy_final_cell = g_new0(C4_Score, cell_size);
    register C4_Model *model;
    register Viterbi_SubAlignment *vsa;
    g_assert(Viterbi_use_reduced_space(optimal->find_path, region));
    model = optimal->find_checkpoint_continuation->model;
    score = Optimal_find_checkpoints_recur(optimal,
            region, user_data, subopt, vsa_list,
            model->start_state->state, dummy_first_cell,
            model->end_state->state, dummy_final_cell);
    alignment = Optimal_compute_subalignments(optimal, region,
                       user_data, subopt, vsa_list, score, cell_size);
    SList_for_each(vsa_list, node){
        vsa = node->data;
        Viterbi_SubAlignment_destroy(vsa);
        }
Exemple #2
0
SList *SList_merge(SList *left, SList *right,
                   SList_CompareFunc compare_func, gpointer user_data){
    register SList *merged = SList_create(left->set);
    register SList swap;
    g_assert(left->set == right->set);
    while(!(SList_isempty(left) || SList_isempty(right))){
        if(compare_func(left->head->next->data,
                        right->head->next->data, user_data)){
            SList_queue(merged, SList_pop(left));
        } else {
            SList_queue(merged, SList_pop(right));
            }
        }
    SList_join(merged, left);
    SList_join(merged, right);
    SList_destroy(left);
    /* Swap left and merged */
    swap.head = left->head;
    swap.tail = left->tail;
    left->head = merged->head;
    left->tail = merged->tail;
    merged->head = swap.head;
    merged->tail = swap.tail;
    return merged;
    }
void setup(){
    list = SList_create();
    it = SList_iterator(list);
};