void merge_sort(t_list **ref, t_opt *opt) { t_list *head; t_list *a; t_list *b; head = *ref; if (!head || !head->next) return ; split(head, &a, &b); merge_sort(&a, opt); merge_sort(&b, opt); if (opt->sort == 't') *ref = (opt->r) ? (merge_time_r(a, b)) : (merge_time(a, b)); else if (opt->sort == 'S') *ref = (opt->r) ? (merge_size_r(a, b)) : (merge_size(a, b)); else if (opt->sort == 'd') *ref = (opt->r) ? (merge_r(a, b)) : (merge(a, b)); }
static int read_DB(DAZZ_DB *block, char *name, char **mask, int *mstat, int mtop, int kmer) { int i, isdam, status, kind, stop; isdam = Open_DB(name,block); if (isdam < 0) Clean_Exit(1); for (i = 0; i < mtop; i++) { status = Check_Track(block,mask[i],&kind); if (status >= 0) if (kind == MASK_TRACK) mstat[i] = 0; else { if (mstat[i] != 0) mstat[i] = -3; } else { if (mstat[i] == -2) mstat[i] = status; } if (status == 0 && kind == MASK_TRACK) Open_Track(block,mask[i]); } Trim_DB(block); stop = 0; for (i = 0; i < mtop; i++) { DAZZ_TRACK *track; int64 *anno; int j; status = Check_Track(block,mask[i],&kind); if (status < 0 || kind != MASK_TRACK) continue; stop += 1; track = Open_Track(block,mask[i]); Load_All_Track_Data(track); anno = (int64 *) (track->anno); for (j = 0; j <= block->nreads; j++) anno[j] /= sizeof(int); } if (stop > 1) { int64 nsize; DAZZ_TRACK *track; nsize = merge_size(block,stop); track = merge_tracks(block,stop,nsize); while (block->tracks != NULL) Close_Track(block,block->tracks); block->tracks = track; } if (block->cutoff < kmer) { for (i = 0; i < block->nreads; i++) if (block->reads[i].rlen < kmer) { fprintf(stderr,"%s: Block %s contains reads < %dbp long ! Run DBsplit.\n", Prog_Name,name,kmer); Clean_Exit(1); } } Load_All_Reads(block,0); return (isdam); }