genetic-images/src/parseargs.cc

51 lines
1.9 KiB
C++

#include "parseargs.hh"
#include <boost/program_options.hpp>
#include <cstdlib>
#include <iostream>
constexpr int DEFAULT_ITERATIONS = 5000;
using path = std::filesystem::path;
namespace po = boost::program_options;
void processFilenames(po::variables_map const &vm, path const &t_input,
path &t_output) {
if (!vm.count("output")) {
t_output.replace_filename("output_" +
std::string{t_input.filename().string()});
} else if (!t_output.has_extension()) {
t_output.replace_extension(".png");
}
}
[[nodiscard]] std::tuple<path, path, int, int, bool> parse_args(int t_ac,
char **t_av) {
po::options_description desc("Allowed options");
desc.add_options()
("help,h", "Display this help message")
("input,i", po::value<path>(), "Input image")
("output,o", po::value<path>(),
"Image output path (default: input path + \"_output\")")
("method,m", po::value<int>(), "Method number to be used (default: 1)")
("iterations,n", po::value<int>(), "Number of iterations (default: 5000)")
("verbose,v", "Enables verbosity");
po::variables_map vm;
po::store(po::parse_command_line(t_ac, t_av, desc), vm);
po::notify(vm);
if (vm.count("help") || !vm.count("input")) {
std::cout << desc << "\n";
std::exit(1);
}
auto const input_path = vm["input"].as<path>();
auto output_path =
vm.count("output") ? vm["output"].as<path>() : input_path.filename();
processFilenames(vm, input_path, output_path);
return std::make_tuple(input_path, output_path,
vm.count("iterations") ? vm["iterations"].as<int>()
: DEFAULT_ITERATIONS,
vm.count("method") ? vm["method"].as<int>() : 1,
vm.count("verbose") ? true : false);
}