MatchBuf _new_MatchBuf(int ms_code, int nPSpair) { int count_only; static MatchBuf match_buf; if (ms_code != MATCHES_AS_NULL && ms_code != MATCHES_AS_WHICH && ms_code != MATCHES_AS_COUNTS && ms_code != MATCHES_AS_STARTS && ms_code != MATCHES_AS_ENDS && ms_code != MATCHES_AS_RANGES) error("Biostrings internal error in _new_MatchBuf(): ", "%d: unsupported match storing code", ms_code); count_only = ms_code == MATCHES_AS_WHICH || ms_code == MATCHES_AS_COUNTS; match_buf.ms_code = ms_code; match_buf.PSlink_ids = new_IntAE(0, 0, 0); match_buf.match_counts = new_IntAE(nPSpair, nPSpair, 0); if (count_only) { /* No match_starts and match_widths buffers in that case */ match_buf.match_starts = NULL; match_buf.match_widths = NULL; } else { match_buf.match_starts = new_IntAEAE(nPSpair, nPSpair); match_buf.match_widths = new_IntAEAE(nPSpair, nPSpair); } return match_buf; }
static FASTAINDEX_loaderExt new_FASTAINDEX_loaderExt() { FASTAINDEX_loaderExt loader_ext; loader_ext.recno_buf = new_IntAE(0, 0, 0); loader_ext.offset_buf = new_LLongAE(0, 0, 0); loader_ext.desc_buf = new_CharAEAE(0, 0); loader_ext.seqlength_buf = new_IntAE(0, 0, 0); return loader_ext; }
/* --- .Call ENTRY POINT --- */ SEXP fasta_index(SEXP filexp_list, SEXP nrec, SEXP skip, SEXP seek_first_rec, SEXP lkup) { int nrec0, skip0, seek_rec0, i, recno, old_nrec, new_nrec, k; FASTAINDEX_loaderExt loader_ext; FASTAloader loader; IntAE *seqlength_buf, *fileno_buf; SEXP filexp; long long int offset, ninvalid; const char *errmsg; nrec0 = INTEGER(nrec)[0]; skip0 = INTEGER(skip)[0]; seek_rec0 = LOGICAL(seek_first_rec)[0]; loader_ext = new_FASTAINDEX_loaderExt(); loader = new_FASTAINDEX_loader(lkup, 1, &loader_ext); seqlength_buf = loader_ext.seqlength_buf; fileno_buf = new_IntAE(0, 0, 0); for (i = recno = 0; i < LENGTH(filexp_list); i++) { filexp = VECTOR_ELT(filexp_list, i); offset = ninvalid = 0LL; errmsg = parse_FASTA_file(filexp, nrec0, skip0, seek_rec0, &loader, &recno, &offset, &ninvalid); if (errmsg != NULL) error("reading FASTA file %s: %s", CHAR(STRING_ELT(GET_NAMES(filexp_list), i)), errmsg_buf); if (ninvalid != 0LL) warning("reading FASTA file %s: ignored %lld " "invalid one-letter sequence codes", CHAR(STRING_ELT(GET_NAMES(filexp_list), i)), ninvalid); old_nrec = IntAE_get_nelt(fileno_buf); new_nrec = IntAE_get_nelt(seqlength_buf); for (k = old_nrec; k < new_nrec; k++) IntAE_insert_at(fileno_buf, k, i + 1); } return make_fasta_index_data_frame(loader_ext.recno_buf, fileno_buf, loader_ext.offset_buf, loader_ext.desc_buf, seqlength_buf); }