/* This file is part of Jellyfish. Jellyfish is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Jellyfish is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Jellyfish. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include namespace err = jellyfish::err; static dump_main_cmdline args; // Command line switches and arguments template void dump(iterator& it, std::ostream &out, uint64_t lower_count, uint64_t upper_count) { if(args.column_flag) { char spacer = args.tab_flag ? '\t' : ' '; while(it.next()) { if(it.val() < lower_count || it.val() > upper_count) continue; out << it.key() << spacer << it.val() << "\n"; } } else { while(it.next()) { if(it.val() < lower_count || it.val() > upper_count) continue; out << ">" << it.val() << "\n" << it.key() << "\n"; } } } int dump_main(int argc, char *argv[]) { args.parse(argc, argv); std::ios::sync_with_stdio(false); // No sync with stdio -> faster ofstream_default out(args.output_given ? args.output_arg : 0, std::cout); if(!out.good()) err::die(err::msg() << "Error opening output file '" << args.output_arg << "'"); std::ifstream is(args.db_arg); if(!is.good()) err::die(err::msg() << "Failed to open input file '" << args.db_arg << "'"); jellyfish::file_header header; header.read(is); jellyfish::mer_dna::k(header.key_len() / 2); if(!args.lower_count_given) args.lower_count_arg = 0; if(!args.upper_count_given) args.upper_count_arg = std::numeric_limits::max(); if(!header.format().compare(binary_dumper::format)) { binary_reader reader(is, &header); dump(reader, out, args.lower_count_arg, args.upper_count_arg); } else if(!header.format().compare(text_dumper::format)) { text_reader reader(is, &header); dump(reader, out, args.lower_count_arg, args.upper_count_arg); } else { err::die(err::msg() << "Unknown format '" << header.format() << "'"); } out.close(); return 0; }