SLIC  6.1.1
Simulation for the Linear Collider (SLIC) - Geant4 simulation application
LogManager.hh
Go to the documentation of this file.
1 #ifndef SLIC_LOGMANAGER_HH_
2 #define SLIC_LOGMANAGER_HH_ 1
3 
4 // SLIC
5 #include "LogStream.hh"
6 #include "LogMessenger.hh"
7 #include "Singleton.hh"
8 
9 // Geant4
10 #include "G4UIdirectory.hh"
11 
12 // STL
13 #include <algorithm>
14 #include <vector>
15 #include <map>
16 
17 namespace slic {
18 
31 class LogManager: public Singleton<LogManager> {
32 
33  private:
34 
36  typedef std::vector<LogStream*> LogList;
37 
39  typedef LogList::iterator LogListIterator;
40 
42  typedef std::vector<LogMessenger*> LogMessengerList;
43 
45  typedef LogMessengerList::iterator LogMessengerListIterator;
46 
48  typedef std::map<std::string, LogStream*> LogNameMap;
49 
51  typedef std::map<LogStream*, LogMessenger*> LogMessengerMap;
52 
53  public:
54 
59  m_logDir = new G4UIdirectory("/log/");
60  m_logDir->SetGuidance("Commands for changing log output settings. [SLIC]");
61  }
62 
66  virtual ~LogManager() {
67  delete m_logDir;
68  }
69 
70  public:
71 
78  LogStream* createLog(std::string name = "NONE", LOG::ELevel level = LOG::okay, ostream* os = &std::cout) {
79  LogStream *l = new LogStream(name, level, os);
80  m_logs.push_back(l);
81  m_logNameMap[name] = l;
82  return l;
83  }
84 
91  LogStream* createLogWithMessenger(std::string name = "NONE", LOG::ELevel level = LOG::okay, ostream* os = &std::cout) {
92  LogStream *l = createLog(name, level, os);
94  return l;
95  }
96 
101  void removeLog(LogStream *log) {
102  if (log == 0)
103  return;
104  LogListIterator it = findLog(log);
105  if (it != m_logs.end()) {
106  LogStream *l = (*it);
107 
108  // Delete the LogStream's messenger, if it exists.
110  if (lm != 0) {
111  removeLogMessenger(lm);
112  }
113 
114  // Delete the LogStream object.
115  delete (*it);
116 
117  // Remove the LogStream entry.
118  m_logs.erase(it);
119  }
120  }
121 
122  private:
123 
130  // Check for and return an existing LogMessenger.
131  LogMessenger *check = findLogMessenger(l);
132  if (check != 0) {
133  return check;
134  }
135 
136  // Make a new LogMessenger.
137  LogMessenger *lm = new LogMessenger(l);
138  m_messengers.push_back(lm);
139  m_logMessengerMap[l] = lm;
140  return lm;
141  }
142 
148  if (lm == 0)
149  return;
151  if (it != m_messengers.end()) {
152  delete (*it);
153  m_messengers.erase(it);
154  }
155  }
156 
161  LogStream* findLog(const std::string &name) {
162  return m_logNameMap[name];
163  }
164 
171  if (log == 0)
172  return m_logs.end();
173  return find(m_logs.begin(), m_logs.end(), log);
174  }
175 
182  if (lm == 0)
183  return m_messengers.end();
184  return find(m_messengers.begin(), m_messengers.end(), lm);
185  }
186 
193  return m_logMessengerMap[s];
194  }
195 
196  friend class LogStream;
197 
198  private:
203 
204  G4UIdirectory *m_logDir;
205 };
206 }
207 
208 #endif
Manages LogStreams and their associated LogMessenger objects.
Definition: LogManager.hh:31
LogMessengerListIterator findLogMessenger(LogMessenger *lm)
Definition: LogManager.hh:181
LogList::iterator LogListIterator
Definition: LogManager.hh:39
LogMessengerMap m_logMessengerMap
Definition: LogManager.hh:202
std::map< LogStream *, LogMessenger * > LogMessengerMap
Definition: LogManager.hh:51
void removeLogMessenger(LogMessenger *lm)
Definition: LogManager.hh:147
LogListIterator findLog(LogStream *log)
Definition: LogManager.hh:170
LogNameMap m_logNameMap
Definition: LogManager.hh:201
LogStream * findLog(const std::string &name)
Definition: LogManager.hh:161
std::map< std::string, LogStream * > LogNameMap
Definition: LogManager.hh:48
virtual ~LogManager()
Definition: LogManager.hh:66
friend class LogStream
Definition: LogManager.hh:196
std::vector< LogMessenger * > LogMessengerList
Definition: LogManager.hh:42
LogMessenger * findLogMessenger(LogStream *s)
Definition: LogManager.hh:192
LogMessenger * createLogMessenger(LogStream *l)
Definition: LogManager.hh:129
LogMessengerList::iterator LogMessengerListIterator
Definition: LogManager.hh:45
std::vector< LogStream * > LogList
Definition: LogManager.hh:36
void removeLog(LogStream *log)
Definition: LogManager.hh:101
LogMessengerList m_messengers
Definition: LogManager.hh:200
LogStream * createLog(std::string name="NONE", LOG::ELevel level=LOG::okay, ostream *os=&std::cout)
Definition: LogManager.hh:78
G4UIdirectory * m_logDir
Definition: LogManager.hh:204
LogStream * createLogWithMessenger(std::string name="NONE", LOG::ELevel level=LOG::okay, ostream *os=&std::cout)
Definition: LogManager.hh:91
G4UImessenger assigned to a LogStream.
Definition: LogMessenger.hh:19
A class for streaming messages to a log.
Definition: LogStream.hh:71
ELevel
Definition: LogStream.hh:32
@ okay
Definition: LogStream.hh:33
@ name
Definition: LogStream.hh:26
@ level
Definition: LogStream.hh:26