Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // G4UIparameter << 27 // 26 // 28 // Class description: << 27 // $Id$ 29 // 28 // 30 // This class represents a parameter which wil << 29 // 31 // object. In case a command is defined by con << 30 // --------------------------------------------------------------------- 32 // it automatically creates necessary paramete << 31 33 // not to create parameter object(s). In case << 32 #ifndef G4UIparameter_h 34 // command directly instantiated by G4UIcomman << 33 #define G4UIparameter_h 1 35 // a parameter object(s) << 36 << 37 // Author: Makoto Asai, 1997 << 38 // ------------------------------------------- << 39 #ifndef G4UIparameter_hh << 40 #define G4UIparameter_hh 1 << 41 34 42 #include "globals.hh" 35 #include "globals.hh" >> 36 #include "G4UItokenNum.hh" >> 37 >> 38 // class description: >> 39 // >> 40 // This class represents a parameter which will be taken by a G4UIcommand >> 41 // object. In case a command is defined by constructing G4UIcmdXXX class, >> 42 // it automatically creates necessary parameter objects, thus the user needs >> 43 // not to create parameter object(s) by him/herself. In case the user wants >> 44 // to create a command directly instansiated by G4UIcommand class, he/she >> 45 // must create parameter object(s) by him/herself. 43 46 44 class G4UIparameter << 47 class G4UIparameter 45 { 48 { >> 49 public: // with description >> 50 G4UIparameter(); >> 51 G4UIparameter(char theType); >> 52 G4UIparameter(const char * theName, char theType, G4bool theOmittable); >> 53 // Constructors, where "theName" is the name of the parameter which will >> 54 // be used by the range checking, "theType" is the type of the parameter >> 55 // (currently "b" (boolean), "i" (integer), "d" (double), and "s" (string) >> 56 // are supported), and "theOmittable" is a boolean flag to set whether >> 57 // the user of the command can ommit the parameter or not. If "theOmittable" >> 58 // is true, the default value must be given. >> 59 ~G4UIparameter(); >> 60 // Destructor. When a command is destructed, the delete operator(s) for >> 61 // associating parameter(s) are AUTOMATICALLY invoked. Thus the user needs >> 62 // NOT to invoke this by him/herself. >> 63 46 public: 64 public: 47 // Default constructor << 65 G4int operator==(const G4UIparameter &right) const; 48 G4UIparameter() = default; << 66 G4int operator!=(const G4UIparameter &right) const; 49 67 50 // Constructors, where "theName" is the na << 68 G4int CheckNewValue(const char* newValue); 51 // be used by the range checking, "theType << 69 void List(); 52 // (currently "b" (Boolean), "i" (integer) << 53 // and "s" (string) are supported). << 54 // "theOmittable" is a Boolean flag to set << 55 // the user of the command can omit the pa << 56 // If "theOmittable" is true, the default << 57 G4UIparameter(char theType); << 58 G4UIparameter(const char* theName, char th << 59 << 60 // Destructor. When a command is destructe << 61 // associated parameter(s) are AUTOMATICAL << 62 ~G4UIparameter(); << 63 << 64 G4int CheckNewValue(const char* newValue); << 65 void List(); << 66 << 67 // These methods set the default value of << 68 inline void SetDefaultValue(const char* th << 69 void SetDefaultValue(G4int theDefaultValue << 70 void SetDefaultValue(G4long theDefaultValu << 71 void SetDefaultValue(G4double theDefaultVa << 72 << 73 // This method can be used for a string-ty << 74 // used to specify a unit. This method is << 75 // string-type parameter << 76 void SetDefaultUnit(const char* theDefault << 77 << 78 inline const G4String& GetDefaultValue() c << 79 inline char GetParameterType() const { ret << 80 << 81 // Defines the range the parameter can tak << 82 // The variable name appearing in the rang << 83 // same as the name of the parameter. << 84 // All the C++ syntax of relational operat << 85 // range expression << 86 inline void SetParameterRange(const char* << 87 << 88 inline const G4String& GetParameterRange() << 89 << 90 inline void SetParameterName(const char* p << 91 inline const G4String& GetParameterName() << 92 << 93 // This method is meaningful if the type o << 94 // The candidates listed in the argument m << 95 inline void SetParameterCandidates(const c << 96 << 97 inline const G4String& GetParameterCandida << 98 << 99 inline void SetOmittable(G4bool om) { omit << 100 inline G4bool IsOmittable() const { return << 101 << 102 inline void SetCurrentAsDefault(G4bool val << 103 inline G4bool GetCurrentAsDefault() const << 104 << 105 // Obsolete methods << 106 // << 107 inline const G4String& GetParameterGuidanc << 108 inline void SetGuidance(const char* theGui << 109 70 110 private: 71 private: 111 G4bool TypeCheck(const char* newValue); << 72 G4String parameterName; 112 G4bool CandidateCheck(const char* newValue << 73 G4String parameterGuidance; >> 74 G4String defaultValue; >> 75 G4String parameterRange; >> 76 G4String parameterCandidate; >> 77 char parameterType; >> 78 G4bool omittable; >> 79 G4bool currentAsDefaultFlag; >> 80 G4int widget; >> 81 >> 82 public: // with description >> 83 inline void SetDefaultValue(const char * theDefaultValue) >> 84 { defaultValue = theDefaultValue; } >> 85 void SetDefaultValue(G4int theDefaultValue); >> 86 void SetDefaultValue(G4double theDefaultValue); >> 87 // These methods set the default value of the parameter. >> 88 public: >> 89 inline G4String GetDefaultValue() const >> 90 { return defaultValue; } >> 91 inline char GetParameterType() const >> 92 { return parameterType; } >> 93 >> 94 public: // with description >> 95 inline void SetParameterRange(const char * theRange) >> 96 { parameterRange = theRange; } >> 97 // Defines the range the parameter can take. >> 98 // The variable name appear in the range expression must be same >> 99 // as the name of the parameter. >> 100 // All the C++ syntax of relational operators are allowed for the >> 101 // range expression. >> 102 public: >> 103 inline G4String GetParameterRange() const >> 104 { return parameterRange; } >> 105 >> 106 // parameterName >> 107 inline void SetParameterName(const char * theName) >> 108 { parameterName = theName; } >> 109 inline G4String GetParameterName() const >> 110 { return parameterName; } >> 111 >> 112 public: // with description >> 113 inline void SetParameterCandidates(const char * theString) >> 114 { parameterCandidate = theString; } >> 115 // This method is meaningful if the type of the parameter is string. >> 116 // The candidates listed in the argument must be separated by space(s). >> 117 public: >> 118 inline G4String GetParameterCandidates() const >> 119 { return parameterCandidate; } >> 120 >> 121 // omittable >> 122 inline void SetOmittable(G4bool om) >> 123 { omittable = om; } >> 124 inline G4bool IsOmittable() const >> 125 { return omittable; } >> 126 >> 127 // currentAsDefaultFlag >> 128 inline void SetCurrentAsDefault(G4bool val) >> 129 { currentAsDefaultFlag = val; } >> 130 inline G4bool GetCurrentAsDefault() const >> 131 { return currentAsDefaultFlag; } >> 132 >> 133 // out of date methods >> 134 inline void SetWidget(G4int theWidget) >> 135 { widget = theWidget; } >> 136 inline const G4String GetParameterGuidance() const >> 137 { return parameterGuidance; } >> 138 inline void SetGuidance(const char * theGuidance) >> 139 { parameterGuidance = theGuidance; } 113 140 114 private: 141 private: 115 G4String parameterName; << 142 // --- the following is used by CheckNewValue() ------- 116 G4String parameterGuidance; << 143 G4int TypeCheck(const char* newValue ); 117 G4String defaultValue; << 144 G4int RangeCheck(const char* newValue ); 118 G4String rangeExpression; << 145 G4int CandidateCheck(const char* newValue ); 119 G4String parameterCandidate; << 146 G4int IsInt(const char* str, short maxDigit); 120 char parameterType = '\0'; << 147 G4int IsDouble(const char* str); 121 G4bool omittable = false; << 148 G4int ExpectExponent(const char* str); 122 G4bool currentAsDefaultFlag = false; << 149 // syntax nodes >> 150 yystype Expression( void ); >> 151 yystype LogicalORExpression( void ); >> 152 yystype LogicalANDExpression( void ); >> 153 yystype EqualityExpression ( void ); >> 154 yystype RelationalExpression( void ); >> 155 yystype AdditiveExpression( void ); >> 156 yystype MultiplicativeExpression( void ); >> 157 yystype UnaryExpression( void ); >> 158 yystype PrimaryExpression( void ); >> 159 // semantics routines >> 160 G4int Eval2( yystype arg1, G4int op, yystype arg2 ); >> 161 G4int CompareInt( G4int arg1, G4int op, G4int arg2); >> 162 G4int CompareDouble( double arg1, G4int op, double arg2); >> 163 // utility >> 164 tokenNum Yylex( void ); // returns next token >> 165 G4int G4UIpGetc( void ); // read one char from rangeBuf >> 166 G4int G4UIpUngetc( G4int c ); // put back >> 167 G4int Backslash( G4int c ); >> 168 G4int Follow( G4int expect, G4int ifyes, G4int ifno ); >> 169 G4String TokenToStr(G4int token); >> 170 //void PrintToken(void); // debug >> 171 // data >> 172 G4String rangeBuf; >> 173 G4int bp; // buffer pointer for rangeBuf >> 174 tokenNum token; >> 175 yystype yylval; >> 176 yystype newVal; >> 177 G4int paramERR; >> 178 //------------ end of CheckNewValue() related member -------------- >> 179 123 }; 180 }; 124 181 125 #endif 182 #endif >> 183 126 184