/* * $Revision: 2564 $ * * last checkin: * $Author: gutwenger $ * $Date: 2012-07-07 00:03:48 +0200 (Sa, 07. Jul 2012) $ ***************************************************************/ /** \file * \brief Definition of exception classes * * \author Carsten Gutwenger, Markus Chimani * * \par License: * This file is part of the Open Graph Drawing Framework (OGDF). * * \par * Copyright (C)
* See README.txt in the root directory of the OGDF installation for details. * * \par * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * Version 2 or 3 as published by the Free Software Foundation; * see the file LICENSE.txt included in the packaging of this file * for details. * * \par * 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 General Public License for more details. * * \par * You should have received a copy of the GNU General Public * License along with this program; if not, write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * * \see http://www.gnu.org/copyleft/gpl.html ***************************************************************/ #ifdef _MSC_VER #pragma once #endif #include #include "basic.h" #ifndef OGDF_EXCEPTIONS_H #define OGDF_EXCEPTIONS_H namespace ogdf { #ifdef OGDF_DEBUG /** * If this flag is set the #OGDF_THROW macros pass the location where the * exception is thrown (file name and line number) to the exception * constructor, otherwise not. */ #define OGDF_THROW_WITH_INFO #endif #ifdef OGDF_THROW #undef OGDF_THROW #endif #ifndef OGDF_THROW_WITH_INFO #define OGDF_THROW_PARAM(CLASS, PARAM) throw CLASS ( PARAM ) #define OGDF_THROW(CLASS) throw CLASS ( ) #else //! Replacement for \c throw. /** * This macro is used to throw an exception and pass the file name * and line number of the location in the source file. * @param CLASS is the name of the exception class. * @param PARAM is an additional parameter (like the error code) required * by the exception calls. */ #define OGDF_THROW_PARAM(CLASS, PARAM) throw CLASS ( PARAM , __FILE__ , __LINE__ ) //! Replacement for \c throw. /** * This macro is used to throw an exception and pass the file name * and line number of the location in the source file. * @param CLASS is the name of the exception class. */ #define OGDF_THROW(CLASS) throw CLASS ( __FILE__ , __LINE__ ) #endif //! Error code for a violated precondition. /** * \see PreconditionViolatedException */ enum PreconditionViolatedCode { pvcUnknown, pvcSelfLoop, //!< graph contains a self-loop pvcTreeHierarchies, //!< hierarchies are not only trees pvcAcyclicHierarchies,//!< hierarchies are not acyclic pvcSingleSource, //!< graph has not a single source pvcUpwardPlanar, //!< graph is not upward planar pvcTree, //!< graph is not a rooted tree pvcForest, //!< graph is not a rooted forest pvcOrthogonal, //!< layout is not orthogonal pvcPlanar, //!< graph is not planar pvcClusterPlanar, //!< graph is not c-planar pvcNoCopy, //!< graph is not a copy of the corresponding graph pvcConnected, //!< graph is not connected pvcBiconnected, //!< graph is not twoconnected pvcSTOP // INSERT NEW CODES BEFORE pvcSTOP! }; // enum PreconditionViolatedCode //! Code for an internal failure condition /** * \see AlgorithmFailureException */ enum AlgorithmFailureCode { afcUnknown, afcIllegalParameter, //!< function parameter is illegal afcNoFlow, //!< min-cost flow could not find a legal flow afcSort, //!< sequence not sorted afcLabel, //!< labelling failed afcExternalFace, //!< external face not correct afcForbiddenCrossing,//!< crossing forbidden but necessary afcTimelimitExceeded,//!< it took too long afcNoSolutionFound, //!< couldn't solve the problem afcSTOP // INSERT NEW CODES BEFORE afcSTOP! }; // enum AlgorithmFailureCode //! Code for the library which was intended to get used, but its use is not supported. /** * \see LibraryNotSupportedException */ enum LibraryNotSupportedCode { lnscUnknown, lnscCoin, //!< COIN not supported lnscAbacus, //!< ABACUS not supported lnscFunctionNotImplemented, //!< the used library doesn't support that function lnscMissingCallbackImplementation, // lnscSTOP // INSERT NEW CODES BEFORE nscSTOP! }; // enum AlgorithmFailureCode //! Base class of all ogdf exceptions. class OGDF_EXPORT Exception { private: const char *m_file; //!< Source file where exception occurred. int m_line; //!< Line number where exception occurred. public: //! Constructs an exception. /** * @param file is the name of the source file where exception was thrown. * @param line is the line number in the source file where the exception was thrown. */ Exception(const char *file = NULL, int line = -1) : m_file(file), m_line(line) { } //! Returns the name of the source file where exception was thrown. /** * Returns a null pointer if the name of the source file is unknown. */ const char *file() { return m_file; } //! Returns the line number where the exception was thrown. /** * Returns -1 if the line number is unknown. */ int line() { return m_line; } }; //! %Exception thrown when result of cast is 0. class OGDF_EXPORT DynamicCastFailedException : public Exception { public: //! Constructs a dynamic cast failed exception. DynamicCastFailedException(const char *file = NULL, int line = -1) : Exception(file, line) {} }; //! %Exception thrown when not enough memory is available to execute an algorithm. class OGDF_EXPORT InsufficientMemoryException : public Exception { public: //! Constructs an insufficient memory exception. InsufficientMemoryException(const char *file = NULL, int line = -1) : Exception(file, line) {} }; //! %Exception thrown when a required standard comparer has not been specialized. /** * The default implementation of StdComparer throws this exception, since it * provides no meaningful implementation of comparer methods. You need to specialize * this class for the types you want to use with sorting and searching methods (like * quicksort and binary search). */ class OGDF_EXPORT NoStdComparerException : public Exception { public: //! Constructs a no standard comparer available exception. NoStdComparerException(const char *file = NULL, int line = -1) : Exception(file, line) {} }; //! %Exception thrown when preconditions are violated. class OGDF_EXPORT PreconditionViolatedException : public Exception { public: //! Constructs a precondition violated exception. PreconditionViolatedException(PreconditionViolatedCode code, const char *file = NULL, int line = -1) : Exception(file, line), m_exceptionCode(code) {} //! Constructs a precondition violated exception. PreconditionViolatedException( const char *file = NULL, int line = -1) : Exception(file, line), m_exceptionCode(pvcUnknown) {} //! Returns the error code of the exception. PreconditionViolatedCode exceptionCode() const { return m_exceptionCode; } private: PreconditionViolatedCode m_exceptionCode; //!< The error code specifying the exception. }; // class PreconditionViolatedException //! %Exception thrown when an algorithm realizes an internal bug that prevents it from continuing. class OGDF_EXPORT AlgorithmFailureException : public Exception { public: //! Constructs an algorithm failure exception. AlgorithmFailureException(AlgorithmFailureCode code, const char *file = NULL, int line = -1) : Exception(file, line), m_exceptionCode(code) {} //! Constructs an algorithm failure exception. AlgorithmFailureException( const char *file = NULL, int line = -1) : Exception(file, line), m_exceptionCode(afcUnknown) {} //! Returns the error code of the exception. AlgorithmFailureCode exceptionCode() const { return m_exceptionCode; } private: AlgorithmFailureCode m_exceptionCode; //!< The error code specifying the exception. }; // class AlgorithmFailureException //! %Exception thrown when an external library shall be used which is not supported. class OGDF_EXPORT LibraryNotSupportedException : public Exception { public: //! Constructs a library not supported exception. LibraryNotSupportedException(LibraryNotSupportedCode code, const char *file = NULL, int line = -1) : Exception(file, line), m_exceptionCode(code) {} //! Constructs a library not supported exception. LibraryNotSupportedException( const char *file = NULL, int line = -1) : Exception(file, line), m_exceptionCode(lnscUnknown) {} //! Returns the error code of the exception. LibraryNotSupportedCode exceptionCode() const { return m_exceptionCode; } private: LibraryNotSupportedCode m_exceptionCode; //!< The error code specifying the exception. }; // class LibraryNotSupportedException } // end namespace ogdf #endif