static SEXP make_fasta_index_data_frame(const IntAE *recno_buf, const IntAE *fileno_buf, const LLongAE *offset_buf, const CharAEAE *desc_buf, const IntAE *seqlength_buf) { SEXP df, colnames, tmp; int i; PROTECT(df = NEW_LIST(5)); PROTECT(colnames = NEW_CHARACTER(5)); PROTECT(tmp = mkChar("recno")); SET_STRING_ELT(colnames, 0, tmp); UNPROTECT(1); PROTECT(tmp = mkChar("fileno")); SET_STRING_ELT(colnames, 1, tmp); UNPROTECT(1); PROTECT(tmp = mkChar("offset")); SET_STRING_ELT(colnames, 2, tmp); UNPROTECT(1); PROTECT(tmp = mkChar("desc")); SET_STRING_ELT(colnames, 3, tmp); UNPROTECT(1); PROTECT(tmp = mkChar("seqlength")); SET_STRING_ELT(colnames, 4, tmp); UNPROTECT(1); SET_NAMES(df, colnames); UNPROTECT(1); PROTECT(tmp = new_INTEGER_from_IntAE(recno_buf)); SET_ELEMENT(df, 0, tmp); UNPROTECT(1); PROTECT(tmp = new_INTEGER_from_IntAE(fileno_buf)); SET_ELEMENT(df, 1, tmp); UNPROTECT(1); PROTECT(tmp = NEW_NUMERIC(LLongAE_get_nelt(offset_buf))); for (i = 0; i < LENGTH(tmp); i++) REAL(tmp)[i] = (double) offset_buf->elts[i]; SET_ELEMENT(df, 2, tmp); UNPROTECT(1); PROTECT(tmp = new_CHARACTER_from_CharAEAE(desc_buf)); SET_ELEMENT(df, 3, tmp); UNPROTECT(1); PROTECT(tmp = new_INTEGER_from_IntAE(seqlength_buf)); SET_ELEMENT(df, 4, tmp); UNPROTECT(1); /* list_as_data_frame() performs IN-PLACE coercion */ list_as_data_frame(df, IntAE_get_nelt(recno_buf)); UNPROTECT(1); return df; }
SEXP _MatchBuf_which_asINTEGER(const MatchBuf *match_buf) { SEXP ans; int i; PROTECT(ans = new_INTEGER_from_IntAE(match_buf->PSlink_ids)); sort_int_array(INTEGER(ans), LENGTH(ans), 0); for (i = 0; i < LENGTH(ans); i++) INTEGER(ans)[i]++; UNPROTECT(1); return ans; }
SEXP _reported_matches_asSEXP() { SEXP start, width, ans; switch (internal_match_buf.ms_code) { case MATCHES_AS_NULL: return R_NilValue; case MATCHES_AS_COUNTS: case MATCHES_AS_WHICH: return ScalarInteger(_get_match_count()); case MATCHES_AS_RANGES: PROTECT(start = new_INTEGER_from_IntAE( internal_match_buf.match_starts->elts[active_PSpair_id])); PROTECT(width = new_INTEGER_from_IntAE( internal_match_buf.match_widths->elts[active_PSpair_id])); PROTECT(ans = new_IRanges("IRanges", start, width, R_NilValue)); UNPROTECT(3); return ans; } error("Biostrings internal error in _reported_matches_asSEXP(): " "invalid 'internal_match_buf.ms_code' value %d", internal_match_buf.ms_code); return R_NilValue; }
SEXP _MatchBuf_counts_asINTEGER(const MatchBuf *match_buf) { return new_INTEGER_from_IntAE(match_buf->match_counts); }