aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/include/Poco/Exception.h
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/poco/Foundation/include/Poco/Exception.h
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'contrib/libs/poco/Foundation/include/Poco/Exception.h')
-rw-r--r--contrib/libs/poco/Foundation/include/Poco/Exception.h261
1 files changed, 261 insertions, 0 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/Exception.h b/contrib/libs/poco/Foundation/include/Poco/Exception.h
new file mode 100644
index 0000000000..b2ad47ce89
--- /dev/null
+++ b/contrib/libs/poco/Foundation/include/Poco/Exception.h
@@ -0,0 +1,261 @@
+//
+// Exception.h
+//
+// Library: Foundation
+// Package: Core
+// Module: Exception
+//
+// Definition of various Poco exception classes.
+//
+// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
+// and Contributors.
+//
+// SPDX-License-Identifier: BSL-1.0
+//
+
+
+#ifndef Foundation_Exception_INCLUDED
+#define Foundation_Exception_INCLUDED
+
+
+#include "Poco/Foundation.h"
+#include <stdexcept>
+
+
+namespace Poco {
+
+
+class Foundation_API Exception: public std::exception
+ /// This is the base class for all exceptions defined
+ /// in the Poco class library.
+{
+public:
+ Exception(const std::string& msg, int code = 0);
+ /// Creates an exception.
+
+ Exception(const std::string& msg, const std::string& arg, int code = 0);
+ /// Creates an exception.
+
+ Exception(const std::string& msg, const Exception& nested, int code = 0);
+ /// Creates an exception and stores a clone
+ /// of the nested exception.
+
+ Exception(const Exception& exc);
+ /// Copy constructor.
+
+ ~Exception() noexcept;
+ /// Destroys the exception and deletes the nested exception.
+
+ Exception& operator = (const Exception& exc);
+ /// Assignment operator.
+
+ virtual const char* name() const noexcept;
+ /// Returns a static string describing the exception.
+
+ virtual const char* className() const noexcept;
+ /// Returns the name of the exception class.
+
+ virtual const char* what() const noexcept;
+ /// Returns a static string describing the exception.
+ ///
+ /// Same as name(), but for compatibility with std::exception.
+
+ const Exception* nested() const;
+ /// Returns a pointer to the nested exception, or
+ /// null if no nested exception exists.
+
+ const std::string& message() const;
+ /// Returns the message text.
+
+ int code() const;
+ /// Returns the exception code if defined.
+
+ virtual std::string displayText() const;
+ /// Returns a string consisting of the
+ /// message name and the message text.
+
+ virtual Exception* clone() const;
+ /// Creates an exact copy of the exception.
+ ///
+ /// The copy can later be thrown again by
+ /// invoking rethrow() on it.
+
+ virtual void rethrow() const;
+ /// (Re)Throws the exception.
+ ///
+ /// This is useful for temporarily storing a
+ /// copy of an exception (see clone()), then
+ /// throwing it again.
+
+protected:
+ Exception(int code = 0);
+ /// Standard constructor.
+
+ void message(const std::string& msg);
+ /// Sets the message for the exception.
+
+ void extendedMessage(const std::string& arg);
+ /// Sets the extended message for the exception.
+
+private:
+ std::string _msg;
+ Exception* _pNested;
+ int _code;
+};
+
+
+//
+// inlines
+//
+inline const Exception* Exception::nested() const
+{
+ return _pNested;
+}
+
+
+inline const std::string& Exception::message() const
+{
+ return _msg;
+}
+
+
+inline void Exception::message(const std::string& msg)
+{
+ _msg = msg;
+}
+
+
+inline int Exception::code() const
+{
+ return _code;
+}
+
+
+//
+// Macros for quickly declaring and implementing exception classes.
+// Unfortunately, we cannot use a template here because character
+// pointers (which we need for specifying the exception name)
+// are not allowed as template arguments.
+//
+#define POCO_DECLARE_EXCEPTION_CODE(API, CLS, BASE, CODE) \
+ class API CLS: public BASE \
+ { \
+ public: \
+ CLS(int code = CODE); \
+ CLS(const std::string& msg, int code = CODE); \
+ CLS(const std::string& msg, const std::string& arg, int code = CODE); \
+ CLS(const std::string& msg, const Poco::Exception& exc, int code = CODE); \
+ CLS(const CLS& exc); \
+ ~CLS() noexcept; \
+ CLS& operator = (const CLS& exc); \
+ const char* name() const noexcept; \
+ const char* className() const noexcept; \
+ Poco::Exception* clone() const; \
+ void rethrow() const; \
+ };
+
+#define POCO_DECLARE_EXCEPTION(API, CLS, BASE) \
+ POCO_DECLARE_EXCEPTION_CODE(API, CLS, BASE, 0)
+
+#define POCO_IMPLEMENT_EXCEPTION(CLS, BASE, NAME) \
+ CLS::CLS(int otherCode): BASE(otherCode) \
+ { \
+ } \
+ CLS::CLS(const std::string& msg, int otherCode): BASE(msg, otherCode) \
+ { \
+ } \
+ CLS::CLS(const std::string& msg, const std::string& arg, int otherCode): BASE(msg, arg, otherCode) \
+ { \
+ } \
+ CLS::CLS(const std::string& msg, const Poco::Exception& exc, int otherCode): BASE(msg, exc, otherCode) \
+ { \
+ } \
+ CLS::CLS(const CLS& exc): BASE(exc) \
+ { \
+ } \
+ CLS::~CLS() noexcept \
+ { \
+ } \
+ CLS& CLS::operator = (const CLS& exc) \
+ { \
+ BASE::operator = (exc); \
+ return *this; \
+ } \
+ const char* CLS::name() const noexcept \
+ { \
+ return NAME; \
+ } \
+ const char* CLS::className() const noexcept \
+ { \
+ return typeid(*this).name(); \
+ } \
+ Poco::Exception* CLS::clone() const \
+ { \
+ return new CLS(*this); \
+ } \
+ void CLS::rethrow() const \
+ { \
+ throw *this; \
+ }
+
+
+//
+// Standard exception classes
+//
+POCO_DECLARE_EXCEPTION(Foundation_API, LogicException, Exception)
+POCO_DECLARE_EXCEPTION(Foundation_API, AssertionViolationException, LogicException)
+POCO_DECLARE_EXCEPTION(Foundation_API, NullPointerException, LogicException)
+POCO_DECLARE_EXCEPTION(Foundation_API, NullValueException, LogicException)
+POCO_DECLARE_EXCEPTION(Foundation_API, BugcheckException, LogicException)
+POCO_DECLARE_EXCEPTION(Foundation_API, InvalidArgumentException, LogicException)
+POCO_DECLARE_EXCEPTION(Foundation_API, NotImplementedException, LogicException)
+POCO_DECLARE_EXCEPTION(Foundation_API, RangeException, LogicException)
+POCO_DECLARE_EXCEPTION(Foundation_API, IllegalStateException, LogicException)
+POCO_DECLARE_EXCEPTION(Foundation_API, InvalidAccessException, LogicException)
+POCO_DECLARE_EXCEPTION(Foundation_API, SignalException, LogicException)
+POCO_DECLARE_EXCEPTION(Foundation_API, UnhandledException, LogicException)
+
+POCO_DECLARE_EXCEPTION(Foundation_API, RuntimeException, Exception)
+POCO_DECLARE_EXCEPTION(Foundation_API, NotFoundException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, ExistsException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, TimeoutException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, SystemException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, RegularExpressionException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, LibraryLoadException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, LibraryAlreadyLoadedException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, NoThreadAvailableException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, PropertyNotSupportedException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, PoolOverflowException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, NoPermissionException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, OutOfMemoryException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, DataException, RuntimeException)
+
+POCO_DECLARE_EXCEPTION(Foundation_API, DataFormatException, DataException)
+POCO_DECLARE_EXCEPTION(Foundation_API, SyntaxException, DataException)
+POCO_DECLARE_EXCEPTION(Foundation_API, CircularReferenceException, DataException)
+POCO_DECLARE_EXCEPTION(Foundation_API, PathSyntaxException, SyntaxException)
+POCO_DECLARE_EXCEPTION(Foundation_API, IOException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, ProtocolException, IOException)
+POCO_DECLARE_EXCEPTION(Foundation_API, FileException, IOException)
+POCO_DECLARE_EXCEPTION(Foundation_API, FileExistsException, FileException)
+POCO_DECLARE_EXCEPTION(Foundation_API, FileNotFoundException, FileException)
+POCO_DECLARE_EXCEPTION(Foundation_API, PathNotFoundException, FileException)
+POCO_DECLARE_EXCEPTION(Foundation_API, FileReadOnlyException, FileException)
+POCO_DECLARE_EXCEPTION(Foundation_API, FileAccessDeniedException, FileException)
+POCO_DECLARE_EXCEPTION(Foundation_API, CreateFileException, FileException)
+POCO_DECLARE_EXCEPTION(Foundation_API, OpenFileException, FileException)
+POCO_DECLARE_EXCEPTION(Foundation_API, WriteFileException, FileException)
+POCO_DECLARE_EXCEPTION(Foundation_API, ReadFileException, FileException)
+POCO_DECLARE_EXCEPTION(Foundation_API, DirectoryNotEmptyException, FileException)
+POCO_DECLARE_EXCEPTION(Foundation_API, UnknownURISchemeException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, TooManyURIRedirectsException, RuntimeException)
+POCO_DECLARE_EXCEPTION(Foundation_API, URISyntaxException, SyntaxException)
+
+POCO_DECLARE_EXCEPTION(Foundation_API, ApplicationException, Exception)
+POCO_DECLARE_EXCEPTION(Foundation_API, BadCastException, RuntimeException)
+
+
+} // namespace Poco
+
+
+#endif // Foundation_Exception_INCLUDED