Changeset c8165c for src/UIElements


Ignore:
Timestamp:
May 8, 2017, 2:01:48 PM (8 years ago)
Author:
Frederik Heber <frederik.heber@…>
Branches:
ForceAnnealing_goodresults, ForceAnnealing_tocheck
Children:
db0833
Parents:
73faf4 (diff), c1446cd (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'Docu_Python_wait' into Candidate_v1.6.1

Conflicts:

tests/Python/AllActions/options.dat

  • two options introduced at same place, both get in.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/CommandLineUI/CommandLineParser.cpp

    r73faf4 rc8165c  
    3636
    3737#include <boost/filesystem.hpp>
     38#include <boost/lexical_cast.hpp>
     39#include <boost/program_options/option.hpp>
     40#include <boost/program_options/value_semantic.hpp>
    3841#include <boost/program_options.hpp>
    3942#include <fstream>
     
    461464}
    462465
     466/** This is due to the answer by Aleksey Vitebskiy
     467 * in http://stackoverflow.com/questions/4107087/accepting-negative-doubles-with-boostprogram-options
     468 *
     469 */
     470std::vector<po::option> ignore_numbers(std::vector<std::string>& args)
     471{
     472    std::vector<po::option> result;
     473    int pos = 0;
     474    while(!args.empty()) {
     475        const std::string& arg = args[0];
     476        bool isNumber = true;
     477        try {
     478          boost::lexical_cast<double>(arg);
     479        } catch(boost::bad_lexical_cast) {
     480          isNumber = false;
     481        }
     482        if (isNumber) {
     483            result.push_back(po::option());
     484            po::option& opt = result.back();
     485
     486            opt.position_key = pos++;
     487            opt.value.push_back(arg);
     488            opt.original_tokens.push_back(arg);
     489
     490            args.erase(args.begin());
     491        } else {
     492            break;
     493        }
     494    }
     495
     496    return result;
     497}
     498
    463499/** Parses the command line arguments.
    464500 * Calls program_options::store() and program_options::notify()
     
    471507  bool status = true;
    472508  try {
    473     po::store(po::command_line_parser(argc,argv).options(cmdline_options).run(), vm);
     509    po::store(po::command_line_parser(argc,argv).extra_style_parser(&ignore_numbers).options(cmdline_options).run(), vm);
    474510  } catch (std::exception &e) {
    475511    std::cerr << "Something went wrong with parsing the command-line arguments: "
Note: See TracChangeset for help on using the changeset viewer.