static inline void resort_and_fill_gaps (GESTrack * track) { g_sequence_sort (track->priv->trackelements_by_start, (GCompareDataFunc) element_start_compare, NULL); if (track->priv->updating == TRUE) { update_gaps (track); } }
struct alignment* make_seq (struct alignment* aln, int a, int b, int* path) { int c; int i; int posa = 0; int posb = 0; int* gap_a = 0; int* gap_b = 0; gap_a = malloc ( (path[0] + 1) *sizeof (int) ); gap_b = malloc ( (path[0] + 1) *sizeof (int) ); for (i = path[0] + 1; i--;) { gap_a[i] = 0; gap_b[i] = 0; } c = 1; while (path[c] != 3) { if (!path[c]) { posa++; posb++; } if (path[c] & 1) { gap_a[posa] += 1; posb++; } if (path[c] & 2) { gap_b[posb] += 1; posa++; } c++; } for (i = aln->nsip[a]; i--;) { update_gaps (aln->sl[aln->sip[a][i]], aln->s[aln->sip[a][i]], path[0], gap_a); } for (i = aln->nsip[b]; i--;) { update_gaps (aln->sl[aln->sip[b][i]], aln->s[aln->sip[b][i]], path[0], gap_b); } free (gap_a); free (gap_b); free (path); return aln; }