OpenGTA/util/m_exceptions.h
Anonymous Maarten 78c27f03c8 2006-12-10
2015-12-03 01:37:02 +01:00

87 lines
2.8 KiB
C++

#ifndef LOCAL_EXCEPTIONS_OH_WHAT_JOY
#define LOCAL_EXCEPTIONS_OH_WHAT_JOY
#include <exception>
#include <iostream>
namespace Util {
struct LocalException : public std::exception {
LocalException(const char *f, const size_t l, const char* n);
LocalException(const char *f, const size_t l, const char* n,
const std::string _msg);
virtual ~LocalException() throw() {}
const char * what() const throw();
std::string inFile;
std::string typeName;
std::string msg;
size_t inLine;
};
/* Actually I wouldn't make the derived destructors virtual,
* but g++ complains if I don't. No idea why.
*
* Anyway exceptions shouldn't happen that often and gcc is
* usually right about those things...
*/
struct FileNotFound : public LocalException {
FileNotFound(const char* f, const size_t l, const std::string _msg);
virtual ~FileNotFound() throw() {}
};
struct IOError : public LocalException {
IOError(const char* f, const size_t l, const std::string _msg);
virtual ~IOError() throw() {}
};
struct InvalidFormat : public LocalException {
InvalidFormat(const char* f, const size_t l, const std::string _msg);
virtual ~InvalidFormat() throw() {}
};
struct UnknownKey : public LocalException {
UnknownKey(const char* f, const size_t l, const std::string _msg);
virtual ~UnknownKey() throw() {}
};
struct OutOfRange : public LocalException {
OutOfRange(const char* f, const size_t l, const std::string _msg);
virtual ~OutOfRange() throw () {}
};
struct OutOfMemory : public LocalException {
OutOfMemory(const char* f, const size_t l, const std::string _msg);
virtual ~OutOfMemory() throw() {}
};
struct ScriptError : public LocalException {
ScriptError(const char* f, const size_t l, const std::string _msg);
virtual ~ScriptError() throw() {}
};
struct NotSupported : public LocalException {
NotSupported(const char* f, const size_t l, const std::string _msg);
virtual ~NotSupported() throw() {}
};
}
// to avoid the need for the namespace when writing catch-all blocks
typedef Util::LocalException Exception;
#ifdef WIN32
#undef E_OUTOFMEMORY
#endif
// to auto-fill line+file information where the exception was created
#define E_FILENOTFOUND(m) Util::FileNotFound(__FILE__, __LINE__, m)
#define E_IOERROR(m) Util::IOError(__FILE__, __LINE__, m)
#define E_INVALIDFORMAT(m) Util::InvalidFormat(__FILE__, __LINE__, m)
#define E_UNKNOWNKEY(m) Util::UnknownKey(__FILE__, __LINE__, m)
#define E_OUTOFRANGE(m) Util::OutOfRange(__FILE__, __LINE__, m)
#define E_OUTOFMEMORY(m) Util::OutOfMemory(__FILE__, __LINE__, m)
#define E_SCRIPTERROR(m) Util::ScriptError(__FILE__, __LINE__, m)
#define E_NOTSUPPORTED(m) Util::NotSupported(__FILE__, __LINE__, m)
#endif