caf::behavior init_buffer() { // Initial send tasks auto pending_chunks = std::make_shared<int>(workers_.size()); auto pending_jobs = std::make_shared<int>(buffer_min_size_); send_job(); return { [=](const std::vector<uint16_t>& data, uint32_t id) { concat_data(data, id); if (! --*pending_chunks) { if (--*pending_jobs) { send_job(); *pending_chunks = workers_.size(); } else { become(main_phase()); } } }, [=](resize_atom, uint32_t w, uint32_t h) { resize(w,h); }, [=](limit_atom, normal_atom, uint32_t workers) { become(make_behavior()); send(this, calc_weights_atom::value, size_t{workers}); }, caf::others() >> [=] { std::cout << to_string(current_message()) << std::endl; } }; }
int samtools_main(int argc, char *argv[]) { #ifdef _WIN32 setmode(fileno(stdout), O_BINARY); setmode(fileno(stdin), O_BINARY); #endif if (argc < 2) { usage(pysamerr); return 1; } if (strcmp(argv[1], "help") == 0 || strcmp(argv[1], "--help") == 0) { if (argc == 2) { usage(stdout); return 0; } // Otherwise change "samtools help COMMAND [...]" to "samtools COMMAND"; // main_xyz() functions by convention display the subcommand's usage // when invoked without any arguments. argv++; argc = 2; } int ret = 0; if (strcmp(argv[1], "view") == 0) ret = main_samview(argc-1, argv+1); else if (strcmp(argv[1], "import") == 0) ret = main_import(argc-1, argv+1); else if (strcmp(argv[1], "mpileup") == 0) ret = bam_mpileup(argc-1, argv+1); else if (strcmp(argv[1], "merge") == 0) ret = bam_merge(argc-1, argv+1); else if (strcmp(argv[1], "sort") == 0) ret = bam_sort(argc-1, argv+1); else if (strcmp(argv[1], "index") == 0) ret = bam_index(argc-1, argv+1); else if (strcmp(argv[1], "idxstats") == 0) ret = bam_idxstats(argc-1, argv+1); else if (strcmp(argv[1], "faidx") == 0) ret = faidx_main(argc-1, argv+1); else if (strcmp(argv[1], "dict") == 0) ret = dict_main(argc-1, argv+1); else if (strcmp(argv[1], "fixmate") == 0) ret = bam_mating(argc-1, argv+1); else if (strcmp(argv[1], "rmdup") == 0) ret = bam_rmdup(argc-1, argv+1); else if (strcmp(argv[1], "flagstat") == 0) ret = bam_flagstat(argc-1, argv+1); else if (strcmp(argv[1], "calmd") == 0) ret = bam_fillmd(argc-1, argv+1); else if (strcmp(argv[1], "fillmd") == 0) ret = bam_fillmd(argc-1, argv+1); else if (strcmp(argv[1], "reheader") == 0) ret = main_reheader(argc-1, argv+1); else if (strcmp(argv[1], "cat") == 0) ret = main_cat(argc-1, argv+1); else if (strcmp(argv[1], "targetcut") == 0) ret = main_cut_target(argc-1, argv+1); else if (strcmp(argv[1], "phase") == 0) ret = main_phase(argc-1, argv+1); else if (strcmp(argv[1], "depth") == 0) ret = main_depth(argc-1, argv+1); else if (strcmp(argv[1], "bam2fq") == 0 || strcmp(argv[1], "fastq") == 0 || strcmp(argv[1], "fasta") == 0) ret = main_bam2fq(argc-1, argv+1); else if (strcmp(argv[1], "pad2unpad") == 0) ret = main_pad2unpad(argc-1, argv+1); else if (strcmp(argv[1], "depad") == 0) ret = main_pad2unpad(argc-1, argv+1); else if (strcmp(argv[1], "bedcov") == 0) ret = main_bedcov(argc-1, argv+1); else if (strcmp(argv[1], "bamshuf") == 0) ret = main_bamshuf(argc-1, argv+1); else if (strcmp(argv[1], "collate") == 0) ret = main_bamshuf(argc-1, argv+1); else if (strcmp(argv[1], "stats") == 0) ret = main_stats(argc-1, argv+1); else if (strcmp(argv[1], "flags") == 0) ret = main_flags(argc-1, argv+1); else if (strcmp(argv[1], "split") == 0) ret = main_split(argc-1, argv+1); else if (strcmp(argv[1], "quickcheck") == 0) ret = main_quickcheck(argc-1, argv+1); else if (strcmp(argv[1], "addreplacerg") == 0) ret = main_addreplacerg(argc-1, argv+1); else if (strcmp(argv[1], "pileup") == 0) { fprintf(pysamerr, "[main] The `pileup' command has been removed. Please use `mpileup' instead.\n"); return 1; } else if (strcmp(argv[1], "tview") == 0) ret = bam_tview_main(argc-1, argv+1); else if (strcmp(argv[1], "--version") == 0) { printf( "samtools %s\n" "Using htslib %s\n" "Copyright (C) 2015 Genome Research Ltd.\n", samtools_version(), hts_version()); } else if (strcmp(argv[1], "--version-only") == 0) { printf("%s+htslib-%s\n", samtools_version(), hts_version()); } else { fprintf(pysamerr, "[main] unrecognized command '%s'\n", argv[1]); return 1; } return ret; }