/* Copyright 2009 Andreas Biegert This file is part of the CS-BLAST package. The CS-BLAST package is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. The CS-BLAST package 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef CS_EXCEPTION_H_ #define CS_EXCEPTION_H_ #include #include #include // This is a simple but useful class for construction of standard exceptions // The constructor is implemented to take variadic arguments // in the style of printf for simple message construction class Exception : public std::exception { public: Exception(const std::string &m) : msg(m), c(0) {} Exception(const char *str, ...) : c(0) { char *buffer = new char[1024]; va_list ap; va_start(ap, str); vsprintf(buffer, str, ap); va_end(ap); msg = buffer; delete [] buffer; } Exception(const int type, const char *str, ...) : c(type) { char *buffer = new char[1024]; va_list ap; va_start(ap, str); vsprintf(buffer, str, ap); va_end(ap); msg = buffer; delete [] buffer; } virtual ~Exception() throw() {}; virtual const char* what() const throw() { return msg.c_str(); } virtual int code() const { return c; } private: std::string msg; int c; }; #endif // CS_EXCEPTION_H_