Orxonox  0.0.5 Codename: Arcturus
OutputManager.h
Go to the documentation of this file.
1 /*
2  * ORXONOX - the hottest 3D action shooter ever to exist
3  * > www.orxonox.net <
4  *
5  *
6  * License notice:
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * Author:
23  * Fabian 'x3n' Landau
24  * Co-authors:
25  * ...
26  *
27  */
28 
36 #ifndef _OutputManager_H__
37 #define _OutputManager_H__
38 
39 #include "util/UtilPrereqs.h"
40 
41 #include <vector>
42 #include <map>
43 #include <memory>
44 
45 #include "OutputDefinitions.h"
47 
48 namespace orxonox
49 {
66  {
67  public:
68  OutputManager();
69  virtual ~OutputManager();
70 
71  static OutputManager& getInstance();
72  static OutputManager& getInstanceAndCreateListeners();
73 
74  inline MemoryWriter* getMemoryWriter() { return this->memoryWriterInstance_; }
75  inline ConsoleWriter* getConsoleWriter() { return this->consoleWriterInstance_; }
76  inline LogWriter* getLogWriter() { return this->logWriterInstance_; }
77 
78  virtual void pushMessage(OutputLevel level, const OutputContextContainer& context, const std::string& message);
79 
80  virtual void registerListener(OutputListener* listener);
81  virtual void unregisterListener(OutputListener* listener);
82 
83  virtual void updatedLevelMask(const OutputListener* listener) override
84  { this->updateCombinedLevelMask(); }
85  virtual void updatedAdditionalContextsLevelMask(const OutputListener* listener) override
86  { this->updateCombinedAdditionalContextsLevelMask(); }
87  virtual void updatedAdditionalContextsMask(const OutputListener* listener) override
88  { this->updateCombinedAdditionalContextsMask(); }
89 
97  inline bool acceptsOutput(OutputLevel level, const OutputContextContainer& context) const
98  {
99  return (this->combinedLevelMask_ & level) ||
100  ((this->combinedAdditionalContextsLevelMask_ & level) && (this->combinedAdditionalContextsMask_ & context.mask));
101  }
102 
103  const OutputContextContainer& registerContext(const std::string& name, const std::string& subname = "");
104 
105  const std::string& getLevelName(OutputLevel level) const;
106  std::string getDefaultPrefix(OutputLevel level, const OutputContextContainer& context) const;
107 
108  inline const std::vector<OutputListener*>& getListeners() const
109  { return this->listeners_; }
110 
111  inline OutputLevel getCombinedLevelMask() const { return this->combinedLevelMask_; }
112  inline OutputLevel getCombinedAdditionalContextsLevelMask() const { return this->combinedAdditionalContextsLevelMask_; }
113  inline OutputContextMask getCombinedAdditionalContextsMask() const { return this->combinedAdditionalContextsMask_; }
114 
115  private:
116  // non-copyable:
117  OutputManager(const OutputManager&) = delete;
118  OutputManager& operator=(const OutputManager&) = delete;
119 
120  void updateMasks();
121  void updateCombinedLevelMask();
122  void updateCombinedAdditionalContextsLevelMask();
123  void updateCombinedAdditionalContextsMask();
124 
125  std::vector<OutputListener*> listeners_;
126 
130 
131  std::map<std::string, OutputContextMask> contextMasks_;
132  std::map<std::string, OutputContextContainer> contextContainers_;
134 
139 
140  public:
142  {
143  static std::shared_ptr<OutputManager>& getInstancePointer();
144  };
145  };
146 }
147 
148 #endif /* _OutputManager_H__ */
#define _UtilExport
Definition: UtilPrereqs.h:60
OutputContextMask mask
The mask of the context (or the mask of the main-context if this container defines a sub-context) ...
Definition: OutputDefinitions.h:114
OutputContextMask combinedAdditionalContextsMask_
The combined mask of accepted additional contexts of all listeners.
Definition: OutputManager.h:129
Stores all information about a context.
Definition: OutputDefinitions.h:112
::std::string string
Definition: gtest-port.h:756
virtual void updatedAdditionalContextsLevelMask(const OutputListener *listener) override
Definition: OutputManager.h:85
OutputLevel combinedLevelMask_
The combined mask of accepted levels of all listeners.
Definition: OutputManager.h:127
LogWriter * getLogWriter()
Definition: OutputManager.h:76
Output level, used for messages directed to the user (e.g. "Press any key to continue") ...
Definition: OutputDefinitions.h:89
OutputContextSubID subcontextCounter_
Counts the number of sub-contexts (and generates their IDs)
Definition: OutputManager.h:133
std::vector< OutputListener * > listeners_
List of all registered output listeners.
Definition: OutputManager.h:125
virtual void updatedAdditionalContextsMask(const OutputListener *listener) override
Definition: OutputManager.h:87
OutputLevel
Output levels define type and importance of an output message.
Definition: OutputDefinitions.h:84
Defines output levels and output contexts.
Declaration of the AdditionalContextListener interface.
bool acceptsOutput(OutputLevel level, const OutputContextContainer &context) const
Returns true if at least one of the output listeners will accept output with the given level and cont...
Definition: OutputManager.h:97
Definition: OutputManager.h:141
ConsoleWriter * consoleWriterInstance_
The main instance of ConsoleWriter, managed by OutputManager.
Definition: OutputManager.h:137
AdditionalContextListener is an interface which is used to notify OutputManager about additional cont...
Definition: AdditionalContextListener.h:49
OutputManager acts as the center of the output system and is implemented as a singleton.
Definition: OutputManager.h:65
MemoryWriter is a singleton which is derived from OutputListener and writes all output to a list...
Definition: MemoryWriter.h:54
virtual void updatedLevelMask(const OutputListener *listener) override
Definition: OutputManager.h:83
LogWriter * logWriterInstance_
The main instance of LogWriter, managed by OutputManager.
Definition: OutputManager.h:138
_UtilExport const OutputContextContainer & registerContext(const std::string &name, const std::string &subname="")
Registers a context.
Definition: OutputManager.cc:260
uint16_t OutputContextSubID
Used to store the IDs of sub-contexts. Each number except context::no_subcontext defines a sub-contex...
Definition: OutputDefinitions.h:109
const std::vector< OutputListener * > & getListeners() const
Definition: OutputManager.h:108
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
OutputLevel getCombinedLevelMask() const
Definition: OutputManager.h:111
MemoryWriter * getMemoryWriter()
Definition: OutputManager.h:74
Shared library macros, enums, constants and forward declarations for the util library ...
OutputListener is an interface which is used to receive output of a certain level and context from Ou...
Definition: OutputListener.h:51
OutputContextMask getCombinedAdditionalContextsMask() const
Definition: OutputManager.h:113
ConsoleWriter inherits from BaseWriter and writes output to the console.
Definition: ConsoleWriter.h:51
bool isInitialized_
Becomes true once the following instances were created.
Definition: OutputManager.h:135
OutputLevel getCombinedAdditionalContextsLevelMask() const
Definition: OutputManager.h:112
std::map< std::string, OutputContextMask > contextMasks_
Contains all main-contexts and their masks.
Definition: OutputManager.h:131
The LogWriter class inherits from BaseWriter and writes output to a log-file.
Definition: LogWriter.h:55
std::map< std::string, OutputContextContainer > contextContainers_
Contains all contexts including sub-contexts and their containers.
Definition: OutputManager.h:132
ConsoleWriter * getConsoleWriter()
Definition: OutputManager.h:75
MemoryWriter * memoryWriterInstance_
The main instance of MemoryWriter, managed by OutputManager.
Definition: OutputManager.h:136
uint64_t OutputContextMask
Used to store the context masks. Each bit defines a context.
Definition: OutputDefinitions.h:108
OutputLevel combinedAdditionalContextsLevelMask_
The combined mask of accepted additional contexts levels of all listeners.
Definition: OutputManager.h:128