summaryrefslogtreecommitdiff
path: root/sfntly/port/exception_type.h
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2013-11-28 11:56:15 +0000
committerTorne (Richard Coles) <torne@google.com>2013-11-28 11:56:15 +0000
commit58f132533b4126b00bc71fd9aed69ecf568cdf39 (patch)
tree3409a319b231317c63b0b3477c161c76822bcb92 /sfntly/port/exception_type.h
parent0232d0f400400568410e1f85e7aba28bcd2ac183 (diff)
parent4a8c3597eb72a7042ead9632e4c3e4fddb5ac695 (diff)
downloadsrc-58f132533b4126b00bc71fd9aed69ecf568cdf39.tar.gz
This commit was generated by merge_to_master.py. Change-Id: If4ff821474cc985d0bc16bc22c8180c8bec48014
Diffstat (limited to 'sfntly/port/exception_type.h')
-rw-r--r--sfntly/port/exception_type.h125
1 files changed, 125 insertions, 0 deletions
diff --git a/sfntly/port/exception_type.h b/sfntly/port/exception_type.h
new file mode 100644
index 0000000..b96efcb
--- /dev/null
+++ b/sfntly/port/exception_type.h
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2011 Google Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Exceptions used in sfntly
+
+#ifndef SFNTLY_CPP_SRC_SFNTLY_PORT_EXCEPTION_TYPE_H_
+#define SFNTLY_CPP_SRC_SFNTLY_PORT_EXCEPTION_TYPE_H_
+
+#if !defined (SFNTLY_NO_EXCEPTION)
+
+#include <exception>
+#include <string>
+#include <sstream>
+
+namespace sfntly {
+
+class Exception : public std::exception {
+ public:
+ Exception() : what_("Unknown exception") {}
+ explicit Exception(const char* message) throw() { SetMessage(message); }
+ virtual ~Exception() throw() {}
+ virtual const char* what() const throw() { return what_.c_str(); }
+
+ protected:
+ void SetMessage(const char* message) throw() {
+ try {
+ what_ = message;
+ } catch (...) {}
+ }
+
+ private:
+ std::string what_;
+};
+
+class IndexOutOfBoundException : public Exception {
+ public:
+ IndexOutOfBoundException() throw() : Exception("Index out of bound") {}
+ explicit IndexOutOfBoundException(const char* message) throw()
+ : Exception(message) {}
+ IndexOutOfBoundException(const char* message, int32_t index) throw() {
+ try {
+ std::ostringstream msg;
+ msg << message;
+ msg << ":";
+ msg << index;
+ SetMessage(msg.str().c_str());
+ } catch (...) {}
+ }
+ virtual ~IndexOutOfBoundException() throw() {}
+};
+
+class IOException : public Exception {
+ public:
+ IOException() throw() : Exception("I/O exception") {}
+ explicit IOException(const char* message) throw() : Exception(message) {}
+ virtual ~IOException() throw() {}
+};
+
+class ArithmeticException : public Exception {
+ public:
+ ArithmeticException() throw() : Exception("Arithmetic exception") {}
+ explicit ArithmeticException(const char* message) throw()
+ : Exception(message) {}
+ virtual ~ArithmeticException() throw() {}
+};
+
+class UnsupportedOperationException : public Exception {
+ public:
+ UnsupportedOperationException() throw() :
+ Exception("Operation not supported") {}
+ explicit UnsupportedOperationException(const char* message) throw()
+ : Exception(message) {}
+ virtual ~UnsupportedOperationException() throw() {}
+};
+
+class RuntimeException : public Exception {
+ public:
+ RuntimeException() throw() : Exception("Runtime exception") {}
+ explicit RuntimeException(const char* message) throw()
+ : Exception(message) {}
+ virtual ~RuntimeException() throw() {}
+};
+
+class NoSuchElementException : public Exception {
+ public:
+ NoSuchElementException() throw() : Exception("No such element") {}
+ explicit NoSuchElementException(const char* message) throw()
+ : Exception(message) {}
+ virtual ~NoSuchElementException() throw() {}
+};
+
+class IllegalArgumentException : public Exception {
+ public:
+ IllegalArgumentException() throw() : Exception("Illegal argument") {}
+ explicit IllegalArgumentException(const char* message) throw()
+ : Exception(message) {}
+ virtual ~IllegalArgumentException() throw() {}
+};
+
+class IllegalStateException : public Exception {
+ public:
+ IllegalStateException() throw() : Exception("Illegal state") {}
+ explicit IllegalStateException(const char* message) throw()
+ : Exception(message) {}
+ virtual ~IllegalStateException() throw() {}
+};
+
+} // namespace sfntly
+
+#endif // #if !defined (SFNTLY_NO_EXCEPTION)
+
+#endif // SFNTLY_CPP_SRC_SFNTLY_PORT_EXCEPTION_TYPE_H_