source: src/UIElements/CommandLineUI/CommandLineParser.hpp@ 06b5df

Action_Thermostats Add_AtomRandomPerturbation Add_FitFragmentPartialChargesAction Add_RotateAroundBondAction Add_SelectAtomByNameAction Added_ParseSaveFragmentResults AddingActions_SaveParseParticleParameters Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_ParticleName_to_Atom Adding_StructOpt_integration_tests AtomFragments Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.5.4 Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator CombiningParticlePotentialParsing Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_BoundInBox_CenterInBox_MoleculeActions Fix_ChargeSampling_PBC Fix_ChronosMutex Fix_FitPartialCharges Fix_FitPotential_needs_atomicnumbers Fix_ForceAnnealing Fix_IndependentFragmentGrids Fix_ParseParticles Fix_ParseParticles_split_forward_backward_Actions Fix_PopActions Fix_QtFragmentList_sorted_selection Fix_Restrictedkeyset_FragmentMolecule Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns Fix_fitting_potentials Fixes ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion FragmentAction_writes_AtomFragments FragmentMolecule_checks_bonddegrees GeometryObjects Gui_Fixes Gui_displays_atomic_force_velocity ImplicitCharges IndependentFragmentGrids IndependentFragmentGrids_IndividualZeroInstances IndependentFragmentGrids_IntegrationTest IndependentFragmentGrids_Sole_NN_Calculation JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix MoreRobust_FragmentAutomation ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PdbParser_setsAtomName PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks Rewrite_FitPartialCharges RotateToPrincipalAxisSystem_UndoRedo SaturateAtoms_findBestMatching SaturateAtoms_singleDegree StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_LinearAlgebra Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg Switchable_LogView ThirdParty_MPQC_rebuilt_buildsystem TrajectoryDependenant_MaxOrder TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps TremoloParser_setsAtomName Ubuntu_1604_changes stable
Last change on this file since 06b5df was 06b5df, checked in by Frederik Heber <heber@…>, 10 years ago

FIX: CommandLineParser causes idling thread when parsing goes wrong.

  • CommandLineParser::Parse() now returns bool to give status of parsing, only when true is scanForArguments() called, which fills the ActionQueue's queue which is not executed anymore because the run thread was already stopped by the caught exception from the parse failure.
  • Property mode set to 100644
File size: 3.4 KB
Line 
1/*
2 * CommandLineParser.hpp
3 *
4 * Created on: May 8, 2010
5 * Author: heber
6 */
7
8#ifndef COMMANDLINEPARSER_HPP_
9#define COMMANDLINEPARSER_HPP_
10
11// include config.h
12#ifdef HAVE_CONFIG_H
13#include <config.h>
14#endif
15
16
17#include <boost/program_options.hpp>
18
19namespace po = boost::program_options;
20
21#include "CodePatterns/Singleton.hpp"
22#include "UIElements/CommandLineUI/TypeEnumContainer.hpp"
23
24#include <map>
25
26namespace MoleCuilder {
27 class Action;
28 class OptionTrait;
29}
30class CommandLineParser_ActionRegistry_ConsistenyTest;
31
32/** This class is a wrapper for boost::program_options.
33 *
34 */
35class CommandLineParser : public Singleton<CommandLineParser> {
36 friend class Singleton<CommandLineParser>;
37
38 //!> test needs to access CmdParserLookup to see whether menus are missing
39 friend class CommandLineParser_ActionRegistry_ConsistencyTest;
40public:
41
42 // Parses the command line arguments in CommandLineParser::**argv with currently known options.
43 void Run(int _argc, char **_argv);
44
45 // Initialises all options from ActionRegistry.
46 void InitializeCommandArguments();
47
48 // Checks whether there have been any commands on the command line.
49 bool isEmpty();
50
51 /* boost's program_options are sorted into three categories:
52 * -# generic options: option available to both command line and config
53 * -# config options: only available in the config file
54 * -# hidden options: options which the user is not shown on "help"
55 */
56 po::options_description analysis;
57 po::options_description atom;
58 po::options_description bond;
59 po::options_description command;
60 po::options_description edit;
61 po::options_description fill;
62 po::options_description shape;
63 po::options_description fragmentation;
64 po::options_description graph;
65 po::options_description molecule;
66 po::options_description options;
67 po::options_description parser;
68 po::options_description potential;
69 po::options_description selection;
70 po::options_description tesselation;
71 po::options_description world;
72
73 po::options_description visible;
74
75 po::variables_map vm;
76
77 // private sequence of actions as they appeared on the command line
78 std::list<std::string> SequenceOfActions;
79
80private:
81 // private constructor and destructor
82 CommandLineParser();
83 virtual ~CommandLineParser();
84
85 /* The following program_options options_decriptions are used to
86 * generate the various cases and call differently in Parse().
87 */
88 po::options_description cmdline_options;
89 po::options_description config_file_options;
90
91 // adds options to the parser
92 void AddOptionToParser(const MoleCuilder::OptionTrait * const currentOption, po::options_description* OptionList);
93
94 // creates a map from short forms to action tokens needed to parse command line
95 std::map <std::string, std::string> getShortFormToActionMap() const;
96
97 typedef std::map< std::string , po::options_description *> CmdParserLookupMap;
98
99 // lookup list from "configmenus" to the ones of CommandLineParser
100 CmdParserLookupMap CmdParserLookup;
101
102 // Sets the options from the three cases.
103 void setOptions(int _argc, char **_argv);
104
105 // Parses all options from command line and config file
106 bool Parse();
107
108 // as boost's program_options does not care about of order of appearance but we do for actions,
109 // we have to have a list and a function to obtain it.
110 void scanforSequenceOfArguments();
111
112 TypeEnumContainer TypeToEnums;
113
114 // argument counter and array passed on from main()
115 int argc;
116 char **argv;
117};
118
119#endif /* COMMANDLINEPARSER_HPP_ */
Note: See TracBrowser for help on using the repository browser.