FIFE  2008.0
 All Classes Namespaces Functions Variables Enumerations Enumerator
exception.h
00001 /***************************************************************************
00002  *   Copyright (C) 2005-2010 by the FIFE team                              *
00003  *   http://www.fifengine.net                                               *
00004  *   This file is part of FIFE.                                            *
00005  *                                                                         *
00006  *   FIFE is free software; you can redistribute it and/or                 *
00007  *   modify it under the terms of the GNU Lesser General Public            *
00008  *   License as published by the Free Software Foundation; either          *
00009  *   version 2.1 of the License, or (at your option) any later version.    *
00010  *                                                                         *
00011  *   This library is distributed in the hope that it will be useful,       *
00012  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00013  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00014  *   Lesser General Public License for more details.                       *
00015  *                                                                         *
00016  *   You should have received a copy of the GNU Lesser General Public      *
00017  *   License along with this library; if not, write to the                 *
00018  *   Free Software Foundation, Inc.,                                       *
00019  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
00020  ***************************************************************************/
00021 
00022 #ifndef FIFE_EXCEPTION_H
00023 #define FIFE_EXCEPTION_H
00024 
00025 // Standard C++ library includes
00026 #include <string>
00027 #include <stdexcept>
00028 
00029 // 3rd party library includes
00030 
00031 // FIFE includes
00032 // These includes are split up in two parts, separated by one empty line
00033 // First block: files included from the FIFE root src directory
00034 // Second block: files included from the same folder
00035 
00036 namespace FIFE {
00037 
00042     class Exception : public std::runtime_error {
00043     public:
00047         Exception(const std::string& msg);
00048 
00051         virtual ~Exception() throw();
00052 
00056         virtual const char* what() const throw();
00057 
00058         virtual const std::string& getTypeStr() const { static const std::string s = "Exception"; return s; }
00059         virtual const std::string& getDescription() const { static const std::string s = "Generic FIFE exception"; return s; }
00060     };
00061 
00062     #define FIFE_EXCEPTION_DECL(_name, _description) \
00063     class _name : public Exception { \
00064     public: \
00065         _name(const std::string& msg) : Exception(msg) {} \
00066         const std::string& getTypeStr() const { static const std::string s = #_name; return s; } \
00067         const std::string& getDescription() const { static const std::string s = _description; return s; } \
00068     }
00069 
00070     FIFE_EXCEPTION_DECL(SDLException, "SDL reported something bad");
00071     FIFE_EXCEPTION_DECL(NotFound, "Something was searched, but not found");
00072     FIFE_EXCEPTION_DECL(NotSet, "Something was not set correctly");
00073     FIFE_EXCEPTION_DECL(IndexOverflow, "Someone tried to access a non-existing element");
00074     FIFE_EXCEPTION_DECL(InvalidFormat, "Found invalid data");
00075     FIFE_EXCEPTION_DECL(CannotOpenFile, "File couldn't be opened");
00076     FIFE_EXCEPTION_DECL(InvalidConversion, "Tried an invalid conversion");
00077     FIFE_EXCEPTION_DECL(NotSupported, "This action was not supported");
00078     FIFE_EXCEPTION_DECL(NameClash, "A name or identifier is already in use");
00079     FIFE_EXCEPTION_DECL(Duplicate, "A duplicate item was added, where this is not allowed");
00080     FIFE_EXCEPTION_DECL(ScriptException, "Error related to scripting functionality");
00081     FIFE_EXCEPTION_DECL(EventException, "Error related to event functionality");
00082     FIFE_EXCEPTION_DECL(GuiException, "Error related to gui functionality");
00083     FIFE_EXCEPTION_DECL(InconsistencyDetected, "An inconsistency in FIFE internals was detected. Please report this is a FIFE Bug.");
00084 
00086     FIFE_EXCEPTION_DECL(OutOfMemory, "Buy more ram ;)");
00087 
00088 
00089 }//FIFE
00090 
00091 #endif