diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /contrib/libs/poco/Foundation/include/Poco/Exception.h | |
download | ydb-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.h | 261 |
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 |