summaryrefslogtreecommitdiffstats
path: root/src/2geom/exception.h
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2007-11-17 23:06:41 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2007-11-17 23:06:41 +0000
commitbd06562677b313a9a4dc1706c63655bbaef0e681 (patch)
treefb1f84c776797767b4c608becfa4c36b5f14fd82 /src/2geom/exception.h
parentfix compile warning with C++ style cast (diff)
downloadinkscape-bd06562677b313a9a4dc1706c63655bbaef0e681.tar.gz
inkscape-bd06562677b313a9a4dc1706c63655bbaef0e681.zip
2geom: splice exceptions code from utils.h into exception.h
(bzr r4097)
Diffstat (limited to 'src/2geom/exception.h')
-rw-r--r--src/2geom/exception.h119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/2geom/exception.h b/src/2geom/exception.h
new file mode 100644
index 000000000..bd950726f
--- /dev/null
+++ b/src/2geom/exception.h
@@ -0,0 +1,119 @@
+#ifndef LIB2GEOM_EXCEPTION_HEADER
+#define LIB2GEOM_EXCEPTION_HEADER
+
+/** Defines the different types of exceptions that 2geom can throw.
+ *
+ * Copyright 2007 Johan Engelen <goejendaagh@zonnet.nl>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ */
+
+#include <exception>
+#include <string>
+
+namespace Geom {
+
+// Base exception class, all 2geom exceptions should be derrived from this one.
+class Exception : public std::exception {
+public:
+ Exception(const char * message, const char *file, const int line)
+ : msgstr("Exception thrown: ")
+ {
+ msgstr += message;
+ msgstr += " (";
+ msgstr += file;
+ msgstr += ":";
+ msgstr += line;
+ msgstr += ")";
+ }
+
+ virtual ~Exception() throw() {} // necessary to destroy the string object!!!
+
+ virtual const char * what() const throw (){
+ return msgstr.c_str();
+ }
+protected:
+ std::string msgstr;
+};
+
+//-----------------------------------------------------------------------
+// Two main exception classes: LogicalError and RangeError.
+// Logical errors are 2geom faults/bugs, RangeErrors are 'user' faults.
+// This way, the 'user' can distinguish between groups of exceptions
+// ('user' is the coder that uses lib2geom)
+class LogicalError : public Exception {
+public:
+ LogicalError(const char * message, const char *file, const int line)
+ : Exception(message, file, line) {}
+};
+#define throwLogicalError(message) throw(LogicalError(message, __FILE__, __LINE__))
+
+class RangeError : public Exception {
+public:
+ RangeError(const char * message, const char *file, const int line)
+ : Exception(message, file, line) {}
+};
+#define throwRangeError(message) throw(RangeError(message, __FILE__, __LINE__))
+
+//-----------------------------------------------------------------------
+// Special case exceptions. Best used with the defines :)
+
+class NotImplemented : public LogicalError {
+public:
+ NotImplemented(const char *file, const int line)
+ : LogicalError("Method not implemented", file, line) {}
+};
+#define throwNotImplemented(i) throw(NotImplemented(__FILE__, __LINE__))
+
+class InvariantsViolation : public LogicalError {
+public:
+ InvariantsViolation(const char *file, const int line)
+ : LogicalError("Invariants violation", file, line) {}
+};
+#define throwInvariantsViolation(i) throw(InvariantsViolation(__FILE__, __LINE__))
+#define assert_invariants(e) ((e) ? (void)0 : throwInvariantsViolation())
+
+class NotInvertible : public RangeError {
+public:
+ NotInvertible(const char *file, const int line)
+ : RangeError("Function does not have a unique inverse", file, line) {}
+};
+#define throwNotInvertible(i) throw(NotInvertible(__FILE__, __LINE__))
+
+class ContinuityError : public RangeError {
+public:
+ ContinuityError(const char *file, const int line)
+ : RangeError("Non-contiguous path", file, line) {}
+};
+#define throwContinuityError(i) throw(ContinuityError(__FILE__, __LINE__))
+
+struct SVGPathParseError : public std::exception {
+ char const *what() const throw() { return "parse error"; }
+};
+
+
+} // namespace Geom
+
+#endif