// This may look like C code, but it is really -*- C++ -*- // // Copyright Bob Friesenhahn, 1999, 2000, 2001, 2002, 2003 // // Implementation of Exception and derived classes // #define MAGICKCORE_IMPLEMENTATION 1 #define MAGICK_PLUSPLUS_IMPLEMENTATION 1 #include "Magick++/Include.h" #include #include #include using namespace std; #include "Magick++/Exception.h" // Construct with message string Magick::Exception::Exception( const std::string& what_ ) : std::exception(), _what(what_) { } // Copy constructor Magick::Exception::Exception( const Magick::Exception& original_ ) : exception(original_), _what(original_._what) { } // Assignment operator Magick::Exception& Magick::Exception::operator= (const Magick::Exception& original_ ) { if(this != &original_) { this->_what = original_._what; } return *this; } // Return message string /*virtual*/ const char* Magick::Exception::what( ) const throw() { return _what.c_str(); } /* Destructor */ /*virtual*/ Magick::Exception::~Exception ( ) throw () { } // // Warnings // Magick::Warning::Warning ( const std::string& what_ ) : Exception(what_) { } /*virtual*/ Magick::Warning::~Warning ( ) throw () { } Magick::WarningUndefined::WarningUndefined ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningUndefined::~WarningUndefined ( ) throw () { } Magick::WarningBlob::WarningBlob ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningBlob::~WarningBlob ( ) throw () { } Magick::WarningCache::WarningCache ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningCache::~WarningCache ( ) throw () { } Magick::WarningCoder::WarningCoder ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningCoder::~WarningCoder ( ) throw () { } Magick::WarningConfigure::WarningConfigure ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningConfigure::~WarningConfigure ( ) throw () { } Magick::WarningCorruptImage::WarningCorruptImage ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningCorruptImage::~WarningCorruptImage ( ) throw () { } Magick::WarningDelegate::WarningDelegate ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningDelegate::~WarningDelegate ( ) throw () { } Magick::WarningDraw::WarningDraw ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningDraw::~WarningDraw ( ) throw () { } Magick::WarningFileOpen::WarningFileOpen ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningFileOpen::~WarningFileOpen ( ) throw () { } Magick::WarningImage::WarningImage ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningImage::~WarningImage ( ) throw () { } Magick::WarningMissingDelegate::WarningMissingDelegate ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningMissingDelegate::~WarningMissingDelegate ( ) throw () { } Magick::WarningModule::WarningModule ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningModule::~WarningModule ( ) throw () { } Magick::WarningMonitor::WarningMonitor ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningMonitor::~WarningMonitor ( ) throw () { } Magick::WarningOption::WarningOption ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningOption::~WarningOption ( ) throw () { } Magick::WarningRegistry::WarningRegistry ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningRegistry::~WarningRegistry ( ) throw () { } Magick::WarningResourceLimit::WarningResourceLimit ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningResourceLimit::~WarningResourceLimit ( ) throw () { } Magick::WarningStream::WarningStream ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningStream::~WarningStream ( ) throw () { } Magick::WarningType::WarningType ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningType::~WarningType ( ) throw () { } Magick::WarningXServer::WarningXServer ( const std::string& what_ ) : Warning(what_) { } /*virtual*/ Magick::WarningXServer::~WarningXServer ( ) throw () { } // // Errors // Magick::Error::Error ( const std::string& what_ ) : Exception(what_) { } /*virtual*/ Magick::Error::~Error ( ) throw () { } Magick::ErrorUndefined::ErrorUndefined ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorUndefined::~ErrorUndefined ( ) throw () { } Magick::ErrorBlob::ErrorBlob ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorBlob::~ErrorBlob ( ) throw () { } Magick::ErrorCache::ErrorCache ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorCache::~ErrorCache ( ) throw () { } Magick::ErrorCoder::ErrorCoder ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorCoder::~ErrorCoder ( ) throw () { } Magick::ErrorConfigure::ErrorConfigure ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorConfigure::~ErrorConfigure ( ) throw () { } Magick::ErrorCorruptImage::ErrorCorruptImage ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorCorruptImage::~ErrorCorruptImage ( ) throw () { } Magick::ErrorDelegate::ErrorDelegate ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorDelegate::~ErrorDelegate ( ) throw () { } Magick::ErrorDraw::ErrorDraw ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorDraw::~ErrorDraw ( ) throw () { } Magick::ErrorFileOpen::ErrorFileOpen ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorFileOpen::~ErrorFileOpen ( ) throw () { } Magick::ErrorImage::ErrorImage ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorImage::~ErrorImage ( ) throw () { } Magick::ErrorMissingDelegate::ErrorMissingDelegate ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorMissingDelegate::~ErrorMissingDelegate ( ) throw () { } Magick::ErrorModule::ErrorModule ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorModule::~ErrorModule ( ) throw () { } Magick::ErrorMonitor::ErrorMonitor ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorMonitor::~ErrorMonitor ( ) throw () { } Magick::ErrorOption::ErrorOption ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorOption::~ErrorOption ( ) throw () { } Magick::ErrorRegistry::ErrorRegistry ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorRegistry::~ErrorRegistry ( ) throw () { } Magick::ErrorResourceLimit::ErrorResourceLimit ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorResourceLimit::~ErrorResourceLimit ( ) throw () { } Magick::ErrorStream::ErrorStream ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorStream::~ErrorStream ( ) throw () { } Magick::ErrorType::ErrorType ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorType::~ErrorType ( ) throw () { } Magick::ErrorXServer::ErrorXServer ( const std::string& what_ ) : Error(what_) { } /*virtual*/ Magick::ErrorXServer::~ErrorXServer ( ) throw () { } // Format and throw exception MagickPPExport void Magick::throwExceptionExplicit( const ExceptionType severity_, const char* reason_, const char* description_) { // Just return if there is no reported error if ( severity_ == UndefinedException ) return; ExceptionInfo exception; GetExceptionInfo( &exception ); ThrowException( &exception, severity_, reason_, description_ ); throwException( exception ); (void) DestroyExceptionInfo( &exception ); } // Throw C++ exception MagickPPExport void Magick::throwException( ExceptionInfo &exception_ ) { // Just return if there is no reported error if ( exception_.severity == UndefinedException ) return; // Format error message ImageMagick-style std::string message = SetClientName(0); if ( exception_.reason != 0 ) { message += std::string(": "); message += std::string(exception_.reason); } if ( exception_.description != 0 ) message += " (" + std::string(exception_.description) + ")"; ExceptionType severity = exception_.severity; MagickBooleanType relinquish = exception_.relinquish; DestroyExceptionInfo( &exception_ ); if (relinquish) GetExceptionInfo( &exception_ ); switch ( severity ) { // Warnings case ResourceLimitWarning : throw WarningResourceLimit( message ); case TypeWarning : throw WarningType( message ); case OptionWarning : throw WarningOption( message ); case DelegateWarning : throw WarningDelegate( message ); case MissingDelegateWarning : throw WarningMissingDelegate( message ); case CorruptImageWarning : throw WarningCorruptImage( message ); case FileOpenWarning : throw WarningFileOpen( message ); case BlobWarning : throw WarningBlob ( message ); case StreamWarning : throw WarningStream ( message ); case CacheWarning : throw WarningCache ( message ); case CoderWarning : throw WarningCoder ( message ); case ModuleWarning : throw WarningModule( message ); case DrawWarning : throw WarningDraw( message ); case ImageWarning : throw WarningImage( message ); case XServerWarning : throw WarningXServer( message ); case MonitorWarning : throw WarningMonitor( message ); case RegistryWarning : throw WarningRegistry( message ); case ConfigureWarning : throw WarningConfigure( message ); // Errors case ResourceLimitError : case ResourceLimitFatalError : throw ErrorResourceLimit( message ); case TypeError : case TypeFatalError : throw ErrorType( message ); case OptionError : case OptionFatalError : throw ErrorOption( message ); case DelegateError : case DelegateFatalError : throw ErrorDelegate( message ); case MissingDelegateError : case MissingDelegateFatalError : throw ErrorMissingDelegate( message ); case CorruptImageError : case CorruptImageFatalError : throw ErrorCorruptImage( message ); case FileOpenError : case FileOpenFatalError : throw ErrorFileOpen( message ); case BlobError : case BlobFatalError : throw ErrorBlob ( message ); case StreamError : case StreamFatalError : throw ErrorStream ( message ); case CacheError : case CacheFatalError : throw ErrorCache ( message ); case CoderError : case CoderFatalError : throw ErrorCoder ( message ); case ModuleError : case ModuleFatalError : throw ErrorModule ( message ); case DrawError : case DrawFatalError : throw ErrorDraw ( message ); case ImageError : case ImageFatalError : throw ErrorImage ( message ); case XServerError : case XServerFatalError : throw ErrorXServer ( message ); case MonitorError : case MonitorFatalError : throw ErrorMonitor ( message ); case RegistryError : case RegistryFatalError : throw ErrorRegistry ( message ); case ConfigureError : case ConfigureFatalError : throw ErrorConfigure ( message ); case UndefinedException : default : throw ErrorUndefined( message ); } }