source: nrEngine/src/Exception.cpp @ 1

Revision 1, 4.7 KB checked in by art, 13 years ago (diff)
RevLine 
[1]1/***************************************************************************
2 *                                                                         *
3 *   (c) Art Tevs, MPI Informatik Saarbruecken                             *
4 *       mailto: <tevs@mpi-sb.mpg.de>                                      *
5 *                                                                         *
6 *   This program is free software; you can redistribute it and/or modify  *
7 *   it under the terms of the GNU General Public License as published by  *
8 *   the Free Software Foundation; either version 2 of the License, or     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 ***************************************************************************/
12
13//----------------------------------------------------------------------------------
14// Includes
15//----------------------------------------------------------------------------------
16#include "Exception.h"
17#include "Engine.h"
18
19namespace nrEngine{
20
21        //-------------------------------------------------------------------------
22        Exception::Exception( Result number, const ::std::string& description, const ::std::string& source )
23        {
24                this->number = number;
25                this->description = description;
26                this->source = source;
27        }
28
29        //-------------------------------------------------------------------------
30        Exception::Exception( Result number, const ::std::string& description, const ::std::string& source, char* file, long line )
31        {
32                this->number = number;
33                this->description = description;
34                this->source = source;
35                this->lineNumber = line;
36                this->file = file;
37
38                // log the exception
39                _log(description.c_str(), file, source.c_str(), line, "Exception thrown!");
40        }
41
42        //-------------------------------------------------------------------------
43        Exception::Exception(const Exception& rhs)
44        {
45                this->number = rhs.number;
46                this->description = rhs.description;
47                this->source = rhs.source;
48                this->lineNumber = rhs.lineNumber;
49                this->file = rhs.file;
50        }
51
52        //-------------------------------------------------------------------------
53        void Exception::_log(const char *szExp, const char *szFilename, const char* szFuncName, int iLineNum, const char* msg)
54        {
55                #if NR_PLATFORM != NR_PLATFORM_WIN32
56
57                        // Give message on the console
58                        fprintf(stderr,"================================================\n");
59                        fprintf(stderr,"%s!\n", msg);
60                        if (strlen(szFuncName)) fprintf(stderr,"Func: %s\n)", szFuncName);
61                        if (strlen(szExp))              fprintf(stderr,"Expr: %s\n", szExp);
62                        if (strlen(szFilename)) fprintf(stderr,"File: %s\n", szFilename);
63                        if (iLineNum)                   fprintf(stderr,"Line: %d\n", iLineNum);
64                        fprintf(stderr,"================================================\n");
65
66                #endif
67               
68                // give message to log engine
69                if (Engine::valid())
70                {
71                        NR_Log(Log::LOG_ENGINE, Log::LL_ERROR, "================================================");
72                        NR_Log(Log::LOG_ENGINE, Log::LL_ERROR, "%s", msg);
73                        if (strlen(szFuncName)) NR_Log(Log::LOG_ENGINE, Log::LL_ERROR, "Func: %s", szFuncName);
74                        if (strlen(szExp))              NR_Log(Log::LOG_ENGINE, Log::LL_ERROR, "Expr: %s", szExp);
75                        if (strlen(szFilename)) NR_Log(Log::LOG_ENGINE, Log::LL_ERROR, "File: %s", szFilename);
76                        if (iLineNum)                   NR_Log(Log::LOG_ENGINE, Log::LL_ERROR, "Line: %d", iLineNum);
77                        NR_Log(Log::LOG_ENGINE, Log::LL_ERROR, "================================================");
78                }
79       
80
81        }
82
83        //-------------------------------------------------------------------------
84        void Exception::Assert(bool exp, const char *szExp, const char *szFilename, const char* szFuncName, int iLineNum)
85        {
86                if (!exp) _assertMsg(szExp, szFilename, szFuncName, iLineNum);
87        }
88
89        //-------------------------------------------------------------------------
90        void Exception::_assertMsg(const char *szExp, const char *szFilename, const char* szFuncName, int iLineNum){
91
92                // give some log information
93                _log(szExp, szFilename, szFuncName, iLineNum, "Assertion failed!");
94
95                // Try now to delete the engine
96                if (Engine::valid())
97                {
98                        Engine::instance()->stopEngine();
99                        Engine::release();
100                }
101
102                // if wondows, so show a message box
103                #if NR_PLATFORM == NR_PLATFORM_WIN32
104                        std::string msg;
105                        msg += std::string("Assertion Failed!\n");
106                        if (strlen(szFuncName)) msg += std::string("Func: ") +  std::string(szFuncName) + "\n";
107                        if (strlen(szExp))              msg += "Expr: " + std::string(szExp) + "\n";
108                        if (strlen(szFilename)) msg += "File: " + std::string(szFilename) + "\n";
109                        if (iLineNum)                   msg += "Line: " + boost::lexical_cast<std::string>(iLineNum)+ "\n";
110                        MessageBox(NULL, msg.c_str(), (std::string("nrEngine v")  + std::string(" ") + NR_VERSION_NAME).c_str(), MB_OK | MB_ICONERROR);
111                #endif
112
113                // Now exit the application
114                exit(1);
115        }
116
117}; // end namespace
118
Note: See TracBrowser for help on using the repository browser.