/* * Exception.h * * Copyright (C) 2008 Matthias Schiffer * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by the * Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along * with this program. If not, see . */ #ifndef MAD_CORE_EXCEPTION_H_ #define MAD_CORE_EXCEPTION_H_ #include "export.h" #include "String.h" #include #include namespace Mad { namespace Core { class MAD_CORE_EXPORT Exception : public std::exception { public: enum ErrorCode { SUCCESS = 0x0000, UNEXPECTED_PACKET = 0x0001, INVALID_ACTION = 0x0002, NOT_AVAILABLE = 0x0003, NOT_FINISHED = 0x0004, NOT_IMPLEMENTED = 0x0005, NOT_FOUND = 0x0006, INVALID_INPUT = 0x0007, PERMISSION = 0x0008, INTERNAL_ERRNO = 0x0010, INVALID_ADDRESS = 0x0020, ALREADY_IDENTIFIED = 0x0030, UNKNOWN_DAEMON = 0x0031, DUPLICATE_ENTRY = 0x0040, AUTHENTICATION = 0x0050, }; private: Core::String where; ErrorCode errorCode; long subCode; long subSubCode; Core::String errorStr; std::string whatStr; void updateWhatStr(); public: Exception(const Core::String &where0, ErrorCode errorCode0 = SUCCESS, long subCode0 = 0, long subSubCode0 = 0) : where(where0), errorCode(errorCode0), subCode(subCode0), subSubCode(subSubCode0) { updateWhatStr(); } Exception(ErrorCode errorCode0 = SUCCESS, long subCode0 = 0, long subSubCode0 = 0) : errorCode(errorCode0), subCode(subCode0), subSubCode(subSubCode0) { updateWhatStr(); } virtual ~Exception() throw () {} const Core::String& getWhere() const {return where;} ErrorCode getErrorCode() const {return errorCode;} long getSubCode() const {return subCode;} long getSubSubCode() const {return subSubCode;} virtual const char* what() const throw () { return whatStr.c_str(); } const Core::String& toString() const throw () { return errorStr; } operator bool() const throw () { return (errorCode != SUCCESS); } }; template std::basic_ostream& operator<<(std::basic_ostream &stream, const Exception &exception) { stream << exception.toString(); return stream; } } } #endif /* MAD_CORE_EXCEPTION_H_ */