123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- #ifndef _FEXCEPTION_H_
- #define _FEXCEPTION_H_
- #include <exception>
- #include <string>
- #include <iostream>
- #include <sstream>
- namespace NICE {
- #define fthrow(type, stream) \
- { \
- std::stringstream sneudfgiaenuiae; \
- sneudfgiaenuiae << stream; \
- throw type((__FILE__), (__LINE__), sneudfgiaenuiae.str()); \
- };
- #define fthrowc(type, stream, cause) \
- {using namespace NICE; \
- std::stringstream sneudfgiaenuiae; \
- sneudfgiaenuiae << stream; \
- throw type((__FILE__), (__LINE__), sneudfgiaenuiae.str(), (cause)); \
- };
- #define fthrowstream(type, m) \
- fthrow(type, m)
- #define fthrowstreamc(type, m, cause) \
- fthrowc(type, m, cause)
- class Exception : public std::exception {
- public:
-
- inline Exception(const std::string& _message)
- : filename("unknown"), line(0), message(_message) {}
-
- Exception(const std::string& _message, const exception& _cause);
-
- inline Exception(const char* _filename, const int _line,
- const std::string& _message)
- : filename(_filename), line(_line), message(_message) {}
-
- Exception(const char* _filename, const int _line,
- const std::string& _message, const exception& _cause);
- inline Exception(const Exception& e) throw()
- : std::exception(e) {
- *this = e;
- }
- Exception& operator=(const Exception& e) throw() {
- filename = e.filename;
- line = e.line;
- message = e.message;
- cause = e.cause;
- return *this;
- }
- virtual ~Exception() throw();
-
- virtual const char* what() const throw();
-
- virtual const char* name() const throw();
- protected:
-
- std::string filename;
-
- int line;
-
- std::string message;
-
- std::string cause;
-
-
- mutable std::string whatBuffer;
- };
- }
- #define DEFINE_NICE_EXCEPTION(ename) \
- class ename : public NICE::Exception { \
- public: \
- inline ename(const std::string& _message) : Exception(_message) {} \
- inline ename(const std::string& _message, const exception& _cause) \
- : Exception(_message, _cause) {} \
- inline ename(const char* _filename, const int _line, \
- const std::string& _message) \
- : Exception(_filename, _line, _message) {} \
- inline ename(const char* _filename, const int _line, \
- const std::string& _message, const exception& _cause) \
- : Exception(_filename, _line, _message, _cause) {} \
- inline ename(const ename& orig) throw() : NICE::Exception(orig) {} \
- inline ename& operator=(const ename& orig) throw() { \
- *this = orig; \
- return *this; \
- } \
- virtual ~ename() throw() {} \
- const char* name() const throw() { return #ename; } \
- };
- #define DEFINE_LIMUN_EXCEPTION(ename) DEFINE_NICE_EXCEPTION(ename)
- #endif
|