Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4StateManager.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 //
27 // $Id: G4StateManager.hh 67970 2013-03-13 10:10:06Z gcosmo $
28 //
29 //
30 // ------------------------------------------------------------
31 // GEANT 4 class header file
32 //
33 //
34 // ---------------- G4StateManager ----------------
35 //
36 // Authors: G.Cosmo, M.Asai - November 1996
37 //
38 // -------------------------------------------------------------
39 //
40 // Class Description:
41 //
42 // Class responsible for handling and updating the running state
43 // of the Geant4 application during its different phases.
44 // The class is a singleton, it can be accessed via the public
45 // method G4StateManager::GetStateManager().
46 //
47 // States of Geant4 are defined in G4ApplicationState.
48 
49 // -------------------------------------------------------------
50 
51 #ifndef G4StateManager_h
52 #define G4StateManager_h 1
53 
54 #include <vector>
55 #include "globals.hh"
56 #include "G4ApplicationState.hh"
57 #include "G4VStateDependent.hh"
58 #include "G4VExceptionHandler.hh"
59 
61 {
62 
63 public: // with description
64 
66  // The G4StateManager class is a singleton class and the pointer
67  // to the only one existing object can be obtained by this static
68  // method.
69 
70 protected:
71 
73 
74 public:
75 
77 
78 public: // with description
79 
81  // Returns the current state
83  // Returns the previous state
84  G4bool SetNewState(G4ApplicationState requestedState);
85  // Set Geant4 to a new state.
86  // In case the request is irregal, false will be returned
87  // and the state of Geant4 will not be changed.
88  G4bool SetNewState(G4ApplicationState requestedState, const char* msg);
89  // Set Geant4 to a new state.
90  // In case the request is irregal, false will be returned
91  // and the state of Geant4 will not be changed.
92  // "msg" is information associating to this state change
93  G4bool RegisterDependent(G4VStateDependent* aDependent,G4bool bottom=false);
94  // Register a concrete class of G4VStateDependent.
95  // Registered concrete classes will be notified via
96  // G4VStateDependent::Notify() method when the state of Geant4 changes.
97  // False will be returned if registration fails.
99  // Remove the registration.
100  // False will be returned if aDependent has not been registered.
102  // Remove the registration.
103  // Removed pointer is returned.
105  // Utility method which returns a string of the state name.
106 
107 public:
108 
109  inline void SetSuppressAbortion(G4int i);
110  inline G4int GetSuppressAbortion() const;
111  inline const char* GetMessage() const;
112  inline void SetExceptionHandler(G4VExceptionHandler* eh);
114 
115 public:
116 
117  //void Pause();
118  //void Pause(const char* msg);
119  //void Pause(G4String msg);
120  //// G4UIsession::pauseSession() will be invoked. The argument string "msg"
121  //// will be used as a prompt characters if the session is non-graphical.
122  //// This method can be invoked by any user action class during the event
123  //// loop. After the user's interactions, control goes back to the caller.
124 
125 private:
126 
128  G4StateManager& operator=(const G4StateManager &right);
129  G4int operator==(const G4StateManager &right) const;
130  G4int operator!=(const G4StateManager &right) const;
131 
132 private:
133 
134  static G4ThreadLocal G4StateManager* theStateManager;
135  G4ApplicationState theCurrentState;
136  G4ApplicationState thePreviousState;
137  std::vector<G4VStateDependent*> theDependentsList;
138  G4VStateDependent* theBottomDependent;
139  G4int suppressAbortion;
140  const char* msgptr;
141  G4VExceptionHandler* exceptionHandler;
142 
143 };
144 
145 #include "G4StateManager.icc"
146 
147 #endif
G4ApplicationState GetPreviousState() const
G4bool RegisterDependent(G4VStateDependent *aDependent, G4bool bottom=false)
G4VExceptionHandler * GetExceptionHandler() const
void SetExceptionHandler(G4VExceptionHandler *eh)
#define G4ThreadLocal
Definition: tls.hh:52
int G4int
Definition: G4Types.hh:78
void SetSuppressAbortion(G4int i)
static G4StateManager * GetStateManager()
G4bool SetNewState(G4ApplicationState requestedState)
bool G4bool
Definition: G4Types.hh:79
G4ApplicationState GetCurrentState() const
const char * GetMessage() const
G4VStateDependent * RemoveDependent(const G4VStateDependent *aDependent)
G4ApplicationState
G4String GetStateString(G4ApplicationState aState) const
G4bool DeregisterDependent(G4VStateDependent *aDependent)
G4int GetSuppressAbortion() const