Analizo
view release on metacpan or search on metacpan
t/samples/mlpack-3.0.0/parse_command_line.hpp view on Meta::CPAN
/*
**ANALIZO NOTE**
This file was copied here from mlpack project as is just to be used as input on
analizo testsuite in order to fix the issue #120.
- https://github.com/analizo/analizo/issues/120
mlpack repository:
- https://github.com/mlpack/mlpack
Original file was copied from the tag mlpack-3.0.0 from mlpack git repository
and it is located on the path below.
- src/mlpack/bindings/cli/parse_command_line.hpp
Link to the original file on GitHub:
- https://github.com/mlpack/mlpack/blob/mlpack-3.0.0/src/mlpack/bindings/cli/parse_command_line.hpp
See full copyrigth info at:
- https://github.com/mlpack/mlpack/blob/mlpack-3.0.0/COPYRIGHT.txt
*/
/**
* @file parse_command_line.hpp
* @author Ryan Curtin
* @author Matthew Amidon
*
* Parse the command line options.
*
* mlpack is free software; you may redistribute it and/or modify it under the
* terms of the 3-clause BSD license. You should have received a copy of the
* 3-clause BSD license along with mlpack. If not, see
* http://www.opensource.org/licenses/BSD-3-Clause for more information.
*/
#ifndef MLPACK_BINDINGS_CLI_PARSE_COMMAND_LINE_HPP
#define MLPACK_BINDINGS_CLI_PARSE_COMMAND_LINE_HPP
#include <mlpack/core.hpp>
#include <boost/program_options.hpp>
#include "print_help.hpp"
namespace mlpack {
namespace bindings {
namespace cli {
// Add default parameters that are included in every program.
PARAM_FLAG("help", "Default help info.", "h");
PARAM_STRING_IN("info", "Get help on a specific module or option.", "", "");
PARAM_FLAG("verbose", "Display informational messages and the full list of "
"parameters and timers at the end of execution.", "v");
PARAM_FLAG("version", "Display the version of mlpack.", "V");
/**
* Parse the command line, setting all of the options inside of the CLI object
* to their appropriate given values.
*/
void ParseCommandLine(int argc, char** argv)
{
// First, we need to build the boost::program_options variables for parsing.
using namespace boost::program_options;
options_description desc;
variables_map vmap;
// Go through list of options in order to add them.
std::map<std::string, util::ParamData>& parameters = CLI::Parameters();
typedef std::map<std::string, util::ParamData>::const_iterator IteratorType;
std::map<std::string, std::string> boostNameMap;
for (IteratorType it = parameters.begin(); it != parameters.end(); ++it)
{
// Add the parameter to desc.
const util::ParamData& d = it->second;
CLI::GetSingleton().functionMap[d.tname]["AddToPO"](d, NULL,
(void*) &desc);
// Generate the name the user passes on the command line.
std::string boostName;
CLI::GetSingleton().functionMap[d.tname]["MapParameterName"](d, NULL,
(void*) &boostName);
boostNameMap[boostName] = d.name;
}
// Mark that we did parsing.
CLI::GetSingleton().didParse = true;
// Parse the command line, then place the values in the right place.
try
{
basic_parsed_options<char> bpo(parse_command_line(argc, argv, desc));
// Iterate over all the options, looking for duplicate parameters. If we
// find any, remove the duplicates. Note that vector options can have
// duplicates, so we check for those with max_tokens().
for (size_t i = 0; i < bpo.options.size(); ++i)
{
for (size_t j = i + 1; j < bpo.options.size(); ++j)
{
if ((bpo.options[i].string_key == bpo.options[j].string_key) &&
(desc.find(bpo.options[i].string_key,
false).semantic()->max_tokens() <= 1))
{
// If a duplicate is found, check to see if either one has a value.
if (bpo.options[i].value.size() == 0 &&
bpo.options[j].value.size() == 0)
{
// If neither has a value, we'll consider it a duplicate flag and
// remove the duplicate. It's important to not break out of this
// loop because there might be another duplicate later on in the
// vector.
bpo.options.erase(bpo.options.begin() + j);
--j; // Fix the index.
( run in 2.583 seconds using v1.01-cache-2.11-cpan-2398b32b56e )