Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core/src/orxonox/core/DebugLevel.cc @ 852

Last change on this file since 852 was 852, checked in by landauf, 16 years ago

removed some includes of CoreIncludes.h from other .h files (included in .cc only)

File size: 4.2 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *
4 *
5 *   License notice:
6 *
7 *   This program is free software; you can redistribute it and/or
8 *   modify it under the terms of the GNU General Public License
9 *   as published by the Free Software Foundation; either version 2
10 *   of the License, or (at your option) any later version.
11 *
12 *   This program is distributed in the hope that it will be useful,
13 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 *   GNU General Public License for more details.
16 *
17 *   You should have received a copy of the GNU General Public License
18 *   along with this program; if not, write to the Free Software
19 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20 *
21 *   Author:
22 *      Fabian 'x3n' Landau
23 *   Co-authors:
24 *      ...
25 *
26 */
27
28/**
29    @file DebugLevel.cc
30    @brief Implementation of the DebugLevel class.
31*/
32
33#include "DebugLevel.h"
34#include "CoreIncludes.h"
35
36namespace orxonox
37{
38    /**
39        @brief Constructor: Registers the object and sets the debug level.
40        @param A reference to a global variable, used to avoid an infinite recursion in getSoftDebugLevel()
41    */
42    DebugLevel::DebugLevel(bool& bReturnSoftDebugLevel)
43    {
44        RegisterRootObject(DebugLevel);
45        this->setConfigValues();
46        bReturnSoftDebugLevel = true;
47    }
48
49    /**
50        @brief Function to collect the SetConfigValue-macro calls.
51    */
52    void DebugLevel::setConfigValues()
53    {
54        SetConfigValue(softDebugLevelConsole_, 3).description("The maximal level of debug output shown in the console");
55        SetConfigValue(softDebugLevelLogfile_, 3).description("The maximal level of debug output shown in the logfile");
56        SetConfigValue(softDebugLevelShell_, 1).description("The maximal level of debug output shown in the ingame shell");
57
58        // softDebugLevel_ is the maximum of the 3 variables
59        this->softDebugLevel_ = this->softDebugLevelConsole_;
60        if (this->softDebugLevelLogfile_ > this->softDebugLevel_)
61            this->softDebugLevel_ = this->softDebugLevelLogfile_;
62        if (this->softDebugLevelShell_ > this->softDebugLevel_)
63            this->softDebugLevel_ = this->softDebugLevelShell_;
64    }
65
66    /**
67        @brief Static function that holds the singleton.
68    */
69    int DebugLevel::getSoftDebugLevel(OutputHandler::OutputDevice device)
70    {
71        static bool bCreatingSoftDebugLevelObject = true;   // Static variable - used to enhance the performance
72        static bool bReturnSoftDebugLevel = false;          // Static variable - used to avoid an infinite recursion
73        static DebugLevel* theOnlyDebugLevelObject = 0;     // Static variable - will contain a pointer to the only instance of the DebugLevel class
74
75        // If bReturnSoftDebugLevel is true, the instance of DebugLevel was created (it's set to true at the end of the constructor, call by reference)
76        if (bReturnSoftDebugLevel)
77        {
78            if (device == OutputHandler::LD_All)
79                return theOnlyDebugLevelObject->softDebugLevel_;
80            else if (device == OutputHandler::LD_Console)
81                return theOnlyDebugLevelObject->softDebugLevelConsole_;
82            else if (device == OutputHandler::LD_Logfile)
83                return theOnlyDebugLevelObject->softDebugLevelLogfile_;
84            else if (device == OutputHandler::LD_Shell)
85                return theOnlyDebugLevelObject->softDebugLevelShell_;
86        }
87
88        // If bCreatingSoftDebugLevelObject is true, we're just about to create an instance of the DebugLevel class
89        if (bCreatingSoftDebugLevelObject)
90        {
91            bCreatingSoftDebugLevelObject = false;
92            theOnlyDebugLevelObject = new DebugLevel(bReturnSoftDebugLevel);
93            return getSoftDebugLevel(device);
94        }
95
96        // Return a constant value while we're creating the object
97        return 4;
98    }
99}
100
101/**
102    @brief Returns the soft debug level, stored in the only existing instance of the DebugLevel class, configured in the config-file.
103    @return The soft debug level
104*/
105int getSoftDebugLevel()
106{
107    return orxonox::DebugLevel::getSoftDebugLevel();
108}
Note: See TracBrowser for help on using the repository browser.