File indexing completed on 2026-04-01 07:50:56
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040 #ifndef COMMANDLINEPARSER_HH
0041 #define COMMANDLINEPARSER_HH
0042
0043 #include "globals.hh"
0044
0045 #include <map>
0046
0047 namespace G4DNAPARSER
0048 {
0049 class Command
0050 {
0051 public:
0052 enum Type
0053 {
0054 WithOption,
0055 WithoutOption,
0056 OptionNotCompulsory
0057 };
0058
0059 virtual const G4String& GetOption() { return fNoOption; }
0060 Command::Type GetType() { return fType; }
0061 G4bool IsActive() { return fActive; }
0062 const G4String& GetDescription() { return fDescription; }
0063 virtual const G4String& GetOptionName() { return fNoOption; }
0064 virtual const G4String& GetDefaultOption() { return fNoOption; }
0065
0066 virtual void SetOption(const G4String&) { ; }
0067 virtual void SetOptionName(const G4String&) { ; }
0068 virtual void SetDefaultOption(const G4String&) { ; }
0069
0070 protected:
0071 friend class CommandLineParser;
0072 Type fType;
0073 G4bool fActive;
0074 G4String fDescription;
0075 static G4String fNoOption;
0076
0077 Command(Type, const G4String& description = "");
0078 virtual ~Command() { ; }
0079 };
0080
0081 class CommandWithOption : public Command
0082 {
0083 public:
0084 virtual const G4String& GetOption() { return fOption; }
0085 virtual const G4String& GetOptionName() { return fOptionName; }
0086 virtual const G4String& GetDefaultOption() { return fDefaultOption; }
0087
0088 virtual void SetOption(const G4String& in_op) { fOption = in_op; }
0089 virtual void SetOptionName(const G4String& in_op) { fOptionName = in_op; }
0090 virtual void SetDefaultOption(const G4String& in_op) { fDefaultOption = in_op; }
0091
0092 private:
0093 friend class CommandLineParser;
0094 CommandWithOption(Type, const G4String& description = "", const G4String& defaultOption = "",
0095 const G4String& optionName = "optionName");
0096
0097 virtual ~CommandWithOption() { ; }
0098
0099 G4String fOption;
0100 G4String fDefaultOption;
0101 G4String fOptionName;
0102 };
0103
0104 class CommandLineParser
0105 {
0106 static CommandLineParser* fpInstance;
0107 std::map<G4String, Command*> fCommandMap;
0108 G4bool fOptionsWereSetup;
0109 G4int fMaxMarkerLength;
0110 G4int fMaxOptionNameLength;
0111 G4int fVerbose;
0112
0113 public:
0114 static CommandLineParser* GetParser();
0115 CommandLineParser();
0116 ~CommandLineParser();
0117 static void DeleteInstance();
0118 int Parse(int& argc, char** argv);
0119 void PrintHelp();
0120 bool CheckIfNotHandledOptionsExists(int& argc, char** argv);
0121 void CorrectRemainingOptions(int& argc, char** argv);
0122 void AddCommand(const G4String& marker, Command::Type, const G4String& description = "",
0123 const G4String& defaultOption = "", const G4String& optionName = "");
0124 Command* FindCommand(const G4String& marker);
0125 Command* GetCommandIfActive(const G4String& marker);
0126 G4bool WereOptionsSetup() { return fOptionsWereSetup; }
0127 };
0128 }
0129 #endif