static int decode_sequence_file(const char *seqfile, GtEncseqDecodeArguments *args, GtError *err) { GtEncseqLoader *encseq_loader; GtEncseq *encseq; int had_err = 0; gt_error_check(err); gt_assert(seqfile); encseq_loader = gt_encseq_loader_new(); if (!had_err && gt_encseq_options_lossless_value(args->eopts)) { gt_encseq_loader_require_lossless_support(encseq_loader); } if (!(encseq = gt_encseq_loader_load(encseq_loader, seqfile, err))) had_err = -1; if (!had_err && gt_encseq_options_mirrored_value(args->eopts)) { if (!gt_alphabet_is_dna(gt_encseq_alphabet(encseq))) { gt_error_set(err, "mirroring is only defined on DNA sequences"); had_err = -1; } if (!had_err) had_err = gt_encseq_mirror(encseq, err); } if (!had_err) had_err = output_sequence(encseq, args, seqfile, err); gt_encseq_delete(encseq); gt_encseq_loader_delete(encseq_loader); return had_err; }
static int encseq_loader_lua_require_lossless_support(lua_State *L) { GtEncseqLoader **loader; loader = check_encseq_loader(L, 1); gt_assert(*loader); gt_encseq_loader_require_lossless_support(*loader); return 0; }
static int bioseq_fill(GtBioseq *bs, bool recreate, GtError *err) { GtStr *bioseq_index_file = NULL, *bioseq_ois_file = NULL, *bioseq_sds_file = NULL, *bioseq_md5_file = NULL, *bioseq_des_file = NULL; int had_err = 0; GtStr *bioseq_basename; gt_assert(!bs->encseq); if (bs->use_stdin) bioseq_basename = gt_str_new_cstr("stdin"); else bioseq_basename = bs->sequence_file; /* construct file names */ bioseq_index_file = gt_str_clone(bioseq_basename); gt_str_append_cstr(bioseq_index_file, GT_ENCSEQFILESUFFIX); bioseq_ois_file = gt_str_clone(bioseq_basename); gt_str_append_cstr(bioseq_ois_file, GT_OISTABFILESUFFIX); bioseq_sds_file = gt_str_clone(bioseq_basename); gt_str_append_cstr(bioseq_sds_file, GT_SDSTABFILESUFFIX); bioseq_md5_file = gt_str_clone(bioseq_basename); gt_str_append_cstr(bioseq_md5_file, GT_MD5TABFILESUFFIX); bioseq_des_file = gt_str_clone(bioseq_basename); gt_str_append_cstr(bioseq_des_file, GT_DESTABFILESUFFIX); /* construct the bioseq files if necessary */ if (recreate || bs->use_stdin || !gt_file_exists(gt_str_get(bioseq_index_file)) || !gt_file_exists(gt_str_get(bioseq_ois_file)) || !gt_file_exists(gt_str_get(bioseq_sds_file)) || !gt_file_exists(gt_str_get(bioseq_md5_file)) || !gt_file_exists(gt_str_get(bioseq_des_file)) || gt_file_is_newer(gt_str_get(bs->sequence_file), gt_str_get(bioseq_index_file))) { had_err = construct_bioseq_files(bs, bioseq_basename, err); } if (!had_err) { GtEncseqLoader *el = gt_encseq_loader_new(); gt_encseq_loader_disable_autosupport(el); gt_encseq_loader_require_lossless_support(el); gt_encseq_loader_require_description_support(el); gt_encseq_loader_require_md5_support(el); gt_encseq_loader_require_multiseq_support(el); bs->encseq = gt_encseq_loader_load(el, gt_str_get(bioseq_basename), err); if (bs->encseq == NULL) { had_err = -1; gt_assert(gt_error_is_set(err)); } gt_encseq_loader_delete(el); } if (!had_err) { gt_assert(bs->encseq); } /* free */ if (bs->use_stdin) gt_str_delete(bioseq_basename); gt_str_delete(bioseq_index_file); gt_str_delete(bioseq_ois_file); gt_str_delete(bioseq_md5_file); gt_str_delete(bioseq_sds_file); gt_str_delete(bioseq_des_file); return had_err; }