qopt 0.19.4

A simple optimization library.
Documentation
//! Provides for a command-line interface (CLI).

use std::env;

use super::{
    error,
    help,
    Paradigm,
};

/// Get command-line arguments.
pub fn get_cli(
    print_every: &mut usize,
    paradigm: &mut Paradigm,
    criterion: &mut f64,
    maxiter: &mut usize,
    maxtemp: &mut f64,
    stdev: &mut f64,
) {
    // Read in command-line arguments
    let args = env::args().collect::<Vec<String>>();
    let mut i = 1;

    while i < args.len() {
        let arg = args[i].as_str();

        match arg {
            // Flags
            "--opt-help" => {
                help();
            },
            "--quiet" => {
                i += 1;
                *print_every = 0;
            },
            "--no-stop-early" => {
                i += 1;
                *criterion = -1.0;
            },

            // Parameters
            "--print-every" => {
                i += 1;
                if i == args.len() {
                    error("Missing value", "print-every");
                }

                // Set 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");
                }

                // Set 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");
                }

                // Set criterion
                *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");
                }

                // Set 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");
                }

                // Set 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");
                }

                // Set 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]),
        }
    }
}