Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/tutorial6/src/libraries/util/output/BaseWriter.h @ 12029

Last change on this file since 12029 was 11071, checked in by landauf, 9 years ago

merged branch cpp11_v3 back to trunk

  • Property svn:eol-style set to native
File size: 5.5 KB
Line 
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
29/**
30    @file
31    @ingroup Output
32    @brief Declaration of the BaseWriter class, the base of all output writers.
33*/
34
35#ifndef _BaseWriter_H__
36#define _BaseWriter_H__
37
38#include "util/UtilPrereqs.h"
39#include "SubcontextOutputListener.h"
40
41namespace orxonox
42{
43    /**
44        @brief BaseWriter is an output listener and makes the accepted output levels and contexts configurable.
45
46        All output writers like ConsoleWriter and LogWriter are inherited from
47        this class. BaseWriter itself inherits from SubcontextOutputListener.
48        It adds helper functions to configure the accepted levels and contexts.
49
50        The levels are not fully configurable, only the "max" form is allowed
51        (which means that it's only possible to define a maximum level, not
52        the full mask).
53
54        Contexts are defined by a vector of strings, each context is defined
55        by it's name. Sub-contexts have the form \a "main-name::sub-name", i.e.
56        their name is concatenated with :: in between.
57
58        Each instance of BaseWriter needs a name to generate distinguishable
59        config values.
60
61        Received output messages are split into lines and sent line by line to
62        the virtual printLine() function. Each line has a prepended prefix
63        which describes the level and context of the output.
64    */
65    class _UtilExport BaseWriter : public SubcontextOutputListener
66    {
67        public:
68            BaseWriter(const std::string& name, bool bRegister = true);
69            virtual ~BaseWriter();
70
71            void setLevelMax(OutputLevel max);
72            void setAdditionalContextsLevelMax(OutputLevel max);
73
74            /// @brief Returns the name of this instance.
75            const std::string& getName() const
76                { return this->name_; }
77
78            /// Config value, used to define the maximum output level (independent of contexts)
79            int configurableMaxLevel_;
80            /// @brief Returns the name of the config value which defines the maximum output level (independent of contexts).
81            inline std::string getConfigurableMaxLevelName() const
82                { return this->name_ + "Level"; }
83
84            /// Config value, used to define the maximum output level of additional context
85            int configurableAdditionalContextsMaxLevel_;
86            /// @brief Returns the name of the config value which defines the maximum output level of additional context.
87            inline std::string getConfigurableAdditionalContextsMaxLevelName() const
88                { return this->name_ + "AdditionalContextsLevel"; }
89
90            /// Config vector, used to define the additional contexts (and sub-contexts)
91            std::vector<std::string> configurableAdditionalContexts_;
92            /// @brief Returns the name of the config vector which defines the additional contexts (and sub-contexts)
93            inline std::string getConfigurableAdditionalContextsName() const
94                { return this->name_ + "AdditionalContexts"; }
95
96            void changedConfigurableLevel();
97            void changedConfigurableAdditionalContextsLevel();
98            void changedConfigurableAdditionalContexts();
99
100            /// Returns the (static) name of the section wherein the config-values are defined.
101            static inline std::string getConfigurableSectionName()
102                { return "Output"; }
103
104        protected:
105            virtual void output(OutputLevel level, const OutputContextContainer& context, const std::vector<std::string>& lines) override;
106
107        private:
108            virtual void printLine(const std::string& line, OutputLevel level) = 0; ///< Pure virtual function, gets called for each line of output together with a prefix which describes level and context of the output.
109
110            void setLevelRange(OutputLevel min, OutputLevel max);                   ///< Inherited function, overwritten as private because it is not supported by the config-value
111            void setLevelMask(OutputLevel mask);                                    ///< Inherited function, overwritten as private because it is not supported by the config-value
112
113            void setAdditionalContextsLevelRange(OutputLevel min, OutputLevel max); ///< Inherited function, overwritten as private because it is not supported by the config-value
114            void setAdditionalContextsLevelMask(OutputLevel mask);                  ///< Inherited function, overwritten as private because it is not supported by the config-value
115
116            std::string name_; ///< The name of this instance, used to generate unique config-values
117    };
118}
119
120#endif /* _BaseWriter_H__ */
Note: See TracBrowser for help on using the repository browser.