Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. 1 // 3 // 2 // ******************************************* << 4 // By copying, distributing or modifying the Program (or any work 3 // * License and Disclaimer << 5 // based on the Program) you indicate your acceptance of this statement, 4 // * << 6 // and all its terms. 5 // * The Geant4 software is copyright of th << 6 // * the Geant4 Collaboration. It is provided << 7 // * conditions of the Geant4 Software License << 8 // * LICENSE and available at http://cern.ch/ << 9 // * include a list of copyright holders. << 10 // * << 11 // * Neither the authors of this software syst << 12 // * institutes,nor the agencies providing fin << 13 // * work make any representation or warran << 14 // * regarding this software system or assum << 15 // * use. Please see the license in the file << 16 // * for the full disclaimer and the limitatio << 17 // * << 18 // * This code implementation is the result << 19 // * technical work of the GEANT4 collaboratio << 20 // * By using, copying, modifying or distri << 21 // * any work based on the software) you ag << 22 // * use in resulting scientific publicati << 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* << 25 // 7 // 26 // G4UIcommand << 8 // $Id: G4UIcommand.hh,v 1.5 1999/12/15 14:50:39 gunter Exp $ >> 9 // GEANT4 tag $Name: geant4-03-00 $ 27 // 10 // 28 // Class description: << 11 // 29 // << 30 // This G4UIcommand is the "concrete" base cla << 31 // used by Geant4 (G)UI. The user can use this << 32 // arguments of a command are not suitable wit << 33 // classes. << 34 // Some methods defined in this base class are << 35 12 36 // Author: Makoto Asai (SLAC), 1998 << 13 #ifndef G4UIcommand_h 37 // ------------------------------------------- << 14 #define G4UIcommand_h 1 38 #ifndef G4UIcommand_hh << 39 #define G4UIcommand_hh 1 << 40 15 41 #include "G4ApplicationState.hh" << 42 #include "G4ThreeVector.hh" << 43 #include "G4UIparameter.hh" 16 #include "G4UIparameter.hh" 44 #include "globals.hh" << 45 << 46 #include <vector> << 47 << 48 class G4UImessenger; 17 class G4UImessenger; >> 18 #include "globals.hh" >> 19 #include "G4ApplicationState.hh" >> 20 #include "g4rw/tpordvec.h" >> 21 #include "g4rw/tvordvec.h" >> 22 #include "G4UItokenNum.hh" >> 23 >> 24 // class description: >> 25 // >> 26 // This G4UIcommand is the "concrete" base class which represents a command >> 27 // used by Geant4 (G)UI. The user can use this class in case the parameter >> 28 // arguments of a command are not suitable with respect to the derived command >> 29 // classes. >> 30 // Some methods defined in this base class are used by the derived classes. >> 31 // 49 32 50 class G4UIcommand << 33 class G4UIcommand 51 { 34 { >> 35 public: >> 36 G4UIcommand(); >> 37 public: // with description >> 38 G4UIcommand(const char * theCommandPath, G4UImessenger * theMessenger); >> 39 // Constructor. The command string with full path directory >> 40 // and the pointer to the messenger must be given. >> 41 public: >> 42 virtual ~G4UIcommand(); >> 43 >> 44 int operator==(const G4UIcommand &right) const; >> 45 int operator!=(const G4UIcommand &right) const; >> 46 >> 47 G4int DoIt(G4String parameterList); >> 48 G4String GetCurrentValue(); >> 49 public: // with description >> 50 void AvailableForStates(G4ApplicationState s1); >> 51 void AvailableForStates(G4ApplicationState s1,G4ApplicationState s2); >> 52 void AvailableForStates(G4ApplicationState s1,G4ApplicationState s2, >> 53 G4ApplicationState s3); >> 54 void AvailableForStates(G4ApplicationState s1,G4ApplicationState s2, >> 55 G4ApplicationState s3,G4ApplicationState s4); >> 56 void AvailableForStates(G4ApplicationState s1,G4ApplicationState s2, >> 57 G4ApplicationState s3,G4ApplicationState s4, >> 58 G4ApplicationState s5); >> 59 // These methods define the states where the command is available. >> 60 // Once one of these commands is invoked, the command application will >> 61 // be denied when Geant4 is NOT in the assigned states. 52 public: 62 public: 53 // Dummy default constructor << 63 G4bool IsAvailable(); 54 G4UIcommand() = default; << 64 virtual void List(); 55 << 56 // Constructor. The command string with fu << 57 // and the pointer to the messenger must b << 58 // If tBB is set to false, this command wo << 59 // This tBB parameter could be changed wit << 60 // except for G4UIdirectory << 61 G4UIcommand(const char* theCommandPath, G4 << 62 << 63 virtual ~G4UIcommand(); << 64 << 65 G4bool operator==(const G4UIcommand& right << 66 G4bool operator!=(const G4UIcommand& right << 67 << 68 virtual G4int DoIt(const G4String& paramet << 69 << 70 G4String GetCurrentValue(); << 71 << 72 // These methods define the states where t << 73 // Once one of these commands is invoked, << 74 // be denied when Geant4 is NOT in the ass << 75 void AvailableForStates(G4ApplicationState << 76 void AvailableForStates(G4ApplicationState << 77 void AvailableForStates(G4ApplicationState << 78 void AvailableForStates(G4ApplicationState << 79 G4ApplicationState << 80 void AvailableForStates(G4ApplicationState << 81 G4ApplicationState << 82 << 83 G4bool IsAvailable(); << 84 << 85 virtual void List(); << 86 << 87 // Static methods for conversion from valu << 88 // These methods are to be used by GetCurr << 89 // of concrete messengers << 90 static G4String ConvertToString(G4bool boo << 91 static G4String ConvertToString(G4int intV << 92 static G4String ConvertToString(G4long lon << 93 static G4String ConvertToString(G4double d << 94 static G4String ConvertToString(G4double d << 95 static G4String ConvertToString(const G4Th << 96 static G4String ConvertToString(const G4Th << 97 << 98 // Static methods for conversion from a st << 99 // type. These methods are to be used dire << 100 // of concrete messengers, or GetNewXXXVal << 101 // this G4UIcommand class << 102 static G4bool ConvertToBool(const char* st << 103 static G4int ConvertToInt(const char* st); << 104 static G4long ConvertToLongInt(const char* << 105 static G4double ConvertToDouble(const char << 106 static G4double ConvertToDimensionedDouble << 107 static G4ThreeVector ConvertTo3Vector(cons << 108 static G4ThreeVector ConvertToDimensioned3 << 109 << 110 // Static methods for unit and its categor << 111 static G4double ValueOf(const char* unitNa << 112 static G4String CategoryOf(const char* uni << 113 static G4String UnitsList(const char* unit << 114 << 115 // Defines the range the command parameter << 116 // The variable name(s) appear in the rang << 117 // as the name(s) of the parameter(s). << 118 // All the C++ syntax of relational operat << 119 // range expression << 120 inline void SetRange(const char* rs) { ran << 121 << 122 inline const G4String& GetRange() const { << 123 inline std::size_t GetGuidanceEntries() co << 124 inline const G4String& GetGuidanceLine(G4i << 125 inline const G4String& GetCommandPath() co << 126 inline const G4String& GetCommandName() co << 127 inline std::size_t GetParameterEntries() c << 128 inline G4UIparameter* GetParameter(G4int i << 129 inline std::vector<G4ApplicationState>* Ge << 130 inline G4UImessenger* GetMessenger() const << 131 << 132 // Defines a parameter. This method is use << 133 // classes but the user can directly use t << 134 // a command, without using the derived cl << 135 // of the parameters is the order of invok << 136 inline void SetParameter(G4UIparameter* co << 137 { << 138 parameter.push_back(newParameter); << 139 } << 140 << 141 // Adds a guidance line. Unlimited times o << 142 // allowed. The given lines of guidance wi << 143 // The first line of the guidance will be << 144 // command, i.e. one line list of the comm << 145 inline void SetGuidance(const char* aGuida << 146 << 147 inline const G4String GetTitle() const << 148 { << 149 return (commandGuidance.empty()) ? G4Str << 150 } << 151 << 152 inline void SetToBeBroadcasted(G4bool val) << 153 inline G4bool ToBeBroadcasted() const { re << 154 inline void SetToBeFlushed(G4bool val) { t << 155 inline G4bool ToBeFlushed() const { return << 156 inline void SetWorkerThreadOnly(G4bool val << 157 inline G4bool IsWorkerThreadOnly() const { << 158 << 159 inline void CommandFailed(G4int errCode, G << 160 { << 161 commandFailureCode = errCode; << 162 failureDescription = ed.str(); << 163 } << 164 inline void CommandFailed(G4ExceptionDescr << 165 { << 166 commandFailureCode = 1; << 167 failureDescription = ed.str(); << 168 } << 169 inline G4int IfCommandFailed() { return co << 170 inline const G4String& GetFailureDescripti << 171 inline void ResetFailure() << 172 { << 173 commandFailureCode = 0; << 174 failureDescription = ""; << 175 } << 176 65 177 public: 66 public: 178 enum CommandType << 67 static G4double ValueOf(G4String unitName); 179 { << 68 static G4String CategoryOf(G4String unitName); 180 BaseClassCmd, << 69 static G4String UnitsList(G4String unitCategory); 181 WithoutParameterCmd, << 70 182 WithABoolCmd, << 71 private: 183 WithAnIntegerCmd, << 72 void G4UIcommandCommonConstructorCode (const char * theCommandPath); 184 WithALongIntCmd, << 73 G4UImessenger *messenger; 185 WithADoubleCmd, << 74 G4String commandPath; 186 WithADoubleAndUnitCmd, << 75 G4String commandName; 187 With3VectorCmd, << 76 G4String rangeString; 188 With3VectorAndUnitCmd, << 77 G4RWTPtrOrderedVector<G4UIparameter> parameter; 189 WithAStringCmd, << 78 G4RWTValOrderedVector<G4String> commandGuidance; 190 CmdDirectory = -1 << 79 G4RWTValOrderedVector<G4ApplicationState> availabelStateList; 191 }; << 80 192 << 81 public: // with description 193 inline CommandType GetCommandType() const << 82 inline void SetRange(const char* rs) 194 void SetCommandType(CommandType); << 83 { rangeString = rs; } 195 << 84 // Defines the range the command parameter(s) can take. 196 inline void SetDefaultSortFlag(G4bool val) << 85 // The variable name(s) appear in the range expression must be same >> 86 // as the name(s) of the parameter(s). >> 87 // All the C++ syntax of relational operators are allowed for the >> 88 // range expression. >> 89 public: >> 90 inline const G4String GetRange() const >> 91 { return rangeString; }; >> 92 inline G4int GetGuidanceEntries() const >> 93 { return commandGuidance.entries(); } >> 94 inline const G4String GetGuidanceLine(int i) const >> 95 { return commandGuidance[i]; } >> 96 inline const G4String GetCommandPath() const >> 97 { return commandPath; } >> 98 inline const G4String GetCommandName() const >> 99 { return commandName; } >> 100 inline G4int GetParameterEntries() const >> 101 { return parameter.entries(); } >> 102 inline G4UIparameter * GetParameter(int i) const >> 103 { return parameter[i]; } >> 104 public: // with description >> 105 inline void SetParameter(G4UIparameter *const newParameter) >> 106 { >> 107 parameter.insert( newParameter ); >> 108 newVal.resize( parameter.entries() ); >> 109 } >> 110 // Defines a parameter. This method is used by the derived command classes >> 111 // but the user can directly use this command when he/she defines a command >> 112 // by hem(her)self without using the derived class. For this case, the order >> 113 // of the parameters is the order of invoking this method. >> 114 inline void SetGuidance(const char * aGuidance) >> 115 { >> 116 G4String * theGuidance = new G4String( aGuidance ); >> 117 commandGuidance.insert( *theGuidance ); >> 118 } >> 119 // Adds a guidance line. Unlimitted number of invokation of this method is >> 120 // allowed. The given lines of guidance will appear for the help. The first >> 121 // line of the guidance will be used as the title of the command, i.e. one >> 122 // line list of the commands. >> 123 public: >> 124 inline const G4String GetTitle() const >> 125 { >> 126 if(commandGuidance.entries() == 0) >> 127 { return G4String("...Title not available..."); } >> 128 else >> 129 { return commandGuidance(0); } >> 130 } 197 131 198 protected: 132 protected: 199 G4int CheckNewValue(const char* newValue); << 133 int CheckNewValue(G4String newValue); 200 << 201 G4bool toBeBroadcasted = false; << 202 G4bool toBeFlushed = false; << 203 G4bool workerThreadOnly = false; << 204 << 205 G4int commandFailureCode = 0; << 206 G4String failureDescription = ""; << 207 << 208 G4bool ifSort = false; << 209 134 >> 135 // --- the following is used by CheckNewValue() -------- 210 private: 136 private: 211 void G4UIcommandCommonConstructorCode(cons << 137 int TypeCheck(G4String newValue); 212 << 138 int RangeCheck(G4String newValue); 213 private: << 139 int IsInt(const char* str, short maxLength); 214 CommandType commandType = BaseClassCmd; << 140 int IsDouble(const char* str); 215 G4UImessenger* messenger = nullptr; << 141 int ExpectExponent(const char* str); 216 G4String commandPath; << 142 // syntax nodes 217 G4String commandName; << 143 yystype Expression( void ); 218 G4String rangeExpression; << 144 yystype LogicalORExpression( void ); 219 std::vector<G4UIparameter*> parameter; << 145 yystype LogicalANDExpression( void ); 220 std::vector<G4String> commandGuidance; << 146 yystype EqualityExpression ( void ); 221 std::vector<G4ApplicationState> availabelS << 147 yystype RelationalExpression( void ); >> 148 yystype AdditiveExpression( void ); >> 149 yystype MultiplicativeExpression( void ); >> 150 yystype UnaryExpression( void ); >> 151 yystype PrimaryExpression( void ); >> 152 // semantics routines >> 153 int Eval2( yystype arg1, int op, yystype arg2 ); >> 154 int CompareInt( int arg1, int op, int arg2); >> 155 int CompareDouble( double arg1, int op, double arg2); >> 156 // utility >> 157 tokenNum Yylex( void ); // returns next token >> 158 unsigned IndexOf( G4String ); // returns the index of the var name >> 159 unsigned IsParameter( G4String ); // returns 1 or 0 >> 160 int G4UIpGetc( void ); // read one char from rangeBuf >> 161 int G4UIpUngetc( int c ); // put back >> 162 int Backslash( int c ); >> 163 int Follow( int expect, int ifyes, int ifno ); >> 164 G4String TokenToStr(int token); >> 165 void PrintToken(void); // for debug >> 166 // data >> 167 G4String rangeBuf; >> 168 int bp; // buffer pointer for rangeBuf >> 169 tokenNum token; >> 170 yystype yylval; >> 171 G4RWTValOrderedVector<yystype> newVal; >> 172 int paramERR; 222 }; 173 }; 223 174 224 #endif 175 #endif >> 176 225 177