Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/libraries/util/Exception.cc @ 12170

Last change on this file since 12170 was 9675, checked in by landauf, 11 years ago

merged branch 'libs' back to trunk. orxonox now compiles and runs with ogre 1.8 and it compiles (but doesn't run) with cegui 0.8

  • Property svn:eol-style set to native
File size: 3.3 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 *      Reto Grieder
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
30@file
31@brief
32    Implementation of the Exception class.
33*/
34
35#include "Exception.h"
36
37#include <cstddef>
38
39#if CEGUI_VERSION >= 0x000800
40#   include <CEGUI/Exceptions.h>
41#else
42#   include <CEGUIExceptions.h>
43#endif
44
45#include "Output.h"
46
47namespace orxonox
48{
49    Exception::Exception(const std::string& description, unsigned int lineNumber,
50                         const char* filename, const char* functionName)
51        : description_(description)
52        , lineNumber_(lineNumber)
53        , functionName_(functionName)
54        , filename_(filename)
55    { }
56
57    Exception::Exception(const std::string& description)
58        : description_(description)
59        , lineNumber_(0)
60    { }
61
62    const std::string& Exception::getFullDescription() const
63    {
64        if (fullDescription_.empty())
65        {
66            std::ostringstream fullDesc;
67
68            fullDesc << this->getTypeName() << "Exception";
69
70            if (!this->filename_.empty())
71            {
72                fullDesc << " in " << this->filename_;
73                if (this->lineNumber_)
74                    fullDesc << '(' << this->lineNumber_ << ')';
75            }
76
77            if (!this->functionName_.empty())
78                fullDesc << " in function '" << this->functionName_ << '\'';
79
80            fullDesc << ": ";
81            if (!this->description_.empty())
82                fullDesc << this->description_;
83            else
84                fullDesc << "No description available.";
85
86            this->fullDescription_ = fullDesc.str();
87        }
88
89        return fullDescription_;
90    }
91
92    const char* Exception::what() const throw()
93    {
94        return getDescription().c_str();
95    }
96
97    /*static*/ std::string Exception::handleMessage()
98    {
99        try
100        {
101            // rethrow
102            throw;
103        }
104        catch (const CEGUI::Exception& ex)
105        {
106            return GeneralException(ex.getMessage().c_str(), ex.getLine(),
107                ex.getFileName().c_str(), ex.getName().c_str()).getDescription();
108        }
109        catch (const std::exception& ex)
110        {
111            return ex.what();
112        }
113        catch (const char* ex)
114        {
115            return ex;
116        }
117        catch (...)
118        {
119            orxout(user_error) << "BIG WARNING: Unknown exception type encountered."
120                               << " Rethrowing" << endl;
121            throw;
122        }
123    }
124}
Note: See TracBrowser for help on using the repository browser.