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