use std::env;
use super::{
error,
help,
Paradigm,
};
pub fn get_cli(
print_every: &mut usize,
paradigm: &mut Paradigm,
criterion: &mut f64,
maxiter: &mut usize,
maxtemp: &mut f64,
stdev: &mut f64,
) {
let args = env::args().collect::<Vec<String>>();
let mut i = 1;
while i < args.len() {
let arg = args[i].as_str();
match arg {
"--opt-help" => {
help();
},
"--quiet" => {
i += 1;
*print_every = 0;
},
"--no-stop-early" => {
i += 1;
*criterion = -1.0;
},
"--print-every" => {
i += 1;
if i == args.len() {
error("Missing value", "print-every");
}
*print_every = match str::parse::<usize>(&args[i]) {
Ok (m) => m,
Err (_) => error("Could not parse as integer value", &args[i]),
};
i += 1;
},
"--paradigm" => {
i += 1;
if i == args.len() {
error("Missing value", "paradigm");
}
*paradigm = match args[i].as_str() {
"steepest-descent" => Paradigm::SteepestDescent,
"newton" => Paradigm::Newton,
"genetic" => Paradigm::Genetic,
"simulated-annealing" => Paradigm::SimulatedAnnealing,
_ => error("Unrecognized paradigm", &args[i]),
};
i += 1;
},
"--criterion" => {
i += 1;
if i == args.len() {
error("Missing value", "criteron");
}
*criterion = match str::parse::<f64>(&args[i]) {
Ok (m) => m,
Err (_) => error("Could not parse as floating-point value", &args[i]),
};
i += 1;
},
"--maxiter" => {
i += 1;
if i == args.len() {
error("Missing value", "maxiter");
}
*maxiter = match str::parse::<usize>(&args[i]) {
Ok (m) => m,
Err (_) => error("Could not parse as integer value", &args[i]),
};
i += 1;
},
"--maxtemp" => {
i += 1;
if i == args.len() {
error("Missing value", "maxtemp");
}
*maxtemp = match str::parse::<f64>(&args[i]) {
Ok (m) => m,
Err (_) => error("Could not parse as floating-point value", &args[i]),
};
i += 1;
},
"--stdev" => {
i += 1;
if i == args.len() {
error("Missing value", "stdev");
}
*stdev = match str::parse::<f64>(&args[i]) {
Ok (m) => m,
Err (_) => error("Could not parse as floating-point value", &args[i]),
};
i += 1;
},
_ => error("Unrecognized command line argument", &args[i]),
}
}
}