00001
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef XAPIAN_INCLUDED_ERROR_H
00023 #define XAPIAN_INCLUDED_ERROR_H
00024
00025 #include <string>
00026 #include <xapian/visibility.h>
00027
00028 namespace Xapian {
00029
00030 class ErrorHandler;
00031
00037 class XAPIAN_VISIBILITY_DEFAULT Error {
00038
00039 friend class ErrorHandler;
00040
00042 std::string msg;
00043
00051 std::string context;
00052
00054 const char * type;
00055
00069 int my_errno;
00070
00075 mutable std::string error_string;
00076
00078 bool already_handled;
00079
00081 void operator=(const Error &o);
00082
00083 protected:
00087 Error(const std::string &msg_, const std::string &context_,
00088 const char * type_, const char * error_string_);
00089
00093 Error(const std::string &msg_, const std::string &context_,
00094 const char * type_, int errno_)
00095 : msg(msg_), context(context_), type(type_), my_errno(errno_),
00096 error_string(), already_handled(false) { }
00097
00098 public:
00100 const char * get_type() const { return type; }
00101
00103 const std::string & get_msg() const { return msg; }
00104
00112 const std::string & get_context() const { return context; }
00113
00120 const char * get_error_string() const;
00121
00123 std::string get_description() const;
00124 };
00125
00131 class XAPIAN_VISIBILITY_DEFAULT LogicError : public Error {
00132 protected:
00136 LogicError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00137 : Error(msg_, context_, type_, error_string_) {}
00138
00142 LogicError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00143 : Error(msg_, context_, type_, errno_) {}
00144 };
00145
00153 class XAPIAN_VISIBILITY_DEFAULT RuntimeError : public Error {
00154 protected:
00158 RuntimeError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00159 : Error(msg_, context_, type_, error_string_) {}
00160
00164 RuntimeError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00165 : Error(msg_, context_, type_, errno_) {}
00166 };
00167
00176 class XAPIAN_VISIBILITY_DEFAULT AssertionError : public LogicError {
00177 public:
00183 AssertionError(const std::string &msg_, const std::string &context_, const char * error_string_)
00184 : LogicError(msg_, context_, "AssertionError", error_string_) {}
00192 explicit AssertionError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00193 : LogicError(msg_, context_, "AssertionError", errno_) {}
00200 AssertionError(const std::string &msg_, int errno_)
00201 : LogicError(msg_, std::string(), "AssertionError", errno_) {}
00202 protected:
00206 AssertionError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00207 : LogicError(msg_, context_, type_, error_string_) {}
00208
00212 AssertionError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00213 : LogicError(msg_, context_, type_, errno_) {}
00214 };
00215
00218 class XAPIAN_VISIBILITY_DEFAULT InvalidArgumentError : public LogicError {
00219 public:
00225 InvalidArgumentError(const std::string &msg_, const std::string &context_, const char * error_string_)
00226 : LogicError(msg_, context_, "InvalidArgumentError", error_string_) {}
00234 explicit InvalidArgumentError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00235 : LogicError(msg_, context_, "InvalidArgumentError", errno_) {}
00242 InvalidArgumentError(const std::string &msg_, int errno_)
00243 : LogicError(msg_, std::string(), "InvalidArgumentError", errno_) {}
00244 protected:
00248 InvalidArgumentError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00249 : LogicError(msg_, context_, type_, error_string_) {}
00250
00254 InvalidArgumentError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00255 : LogicError(msg_, context_, type_, errno_) {}
00256 };
00257
00260 class XAPIAN_VISIBILITY_DEFAULT InvalidOperationError : public LogicError {
00261 public:
00267 InvalidOperationError(const std::string &msg_, const std::string &context_, const char * error_string_)
00268 : LogicError(msg_, context_, "InvalidOperationError", error_string_) {}
00276 explicit InvalidOperationError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00277 : LogicError(msg_, context_, "InvalidOperationError", errno_) {}
00284 InvalidOperationError(const std::string &msg_, int errno_)
00285 : LogicError(msg_, std::string(), "InvalidOperationError", errno_) {}
00286 protected:
00290 InvalidOperationError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00291 : LogicError(msg_, context_, type_, error_string_) {}
00292
00296 InvalidOperationError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00297 : LogicError(msg_, context_, type_, errno_) {}
00298 };
00299
00301 class XAPIAN_VISIBILITY_DEFAULT UnimplementedError : public LogicError {
00302 public:
00308 UnimplementedError(const std::string &msg_, const std::string &context_, const char * error_string_)
00309 : LogicError(msg_, context_, "UnimplementedError", error_string_) {}
00317 explicit UnimplementedError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00318 : LogicError(msg_, context_, "UnimplementedError", errno_) {}
00325 UnimplementedError(const std::string &msg_, int errno_)
00326 : LogicError(msg_, std::string(), "UnimplementedError", errno_) {}
00327 protected:
00331 UnimplementedError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00332 : LogicError(msg_, context_, type_, error_string_) {}
00333
00337 UnimplementedError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00338 : LogicError(msg_, context_, type_, errno_) {}
00339 };
00340
00342 class XAPIAN_VISIBILITY_DEFAULT DatabaseError : public RuntimeError {
00343 public:
00349 DatabaseError(const std::string &msg_, const std::string &context_, const char * error_string_)
00350 : RuntimeError(msg_, context_, "DatabaseError", error_string_) {}
00358 explicit DatabaseError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00359 : RuntimeError(msg_, context_, "DatabaseError", errno_) {}
00366 DatabaseError(const std::string &msg_, int errno_)
00367 : RuntimeError(msg_, std::string(), "DatabaseError", errno_) {}
00368 protected:
00372 DatabaseError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00373 : RuntimeError(msg_, context_, type_, error_string_) {}
00374
00378 DatabaseError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00379 : RuntimeError(msg_, context_, type_, errno_) {}
00380 };
00381
00383 class XAPIAN_VISIBILITY_DEFAULT DatabaseCorruptError : public DatabaseError {
00384 public:
00390 DatabaseCorruptError(const std::string &msg_, const std::string &context_, const char * error_string_)
00391 : DatabaseError(msg_, context_, "DatabaseCorruptError", error_string_) {}
00399 explicit DatabaseCorruptError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00400 : DatabaseError(msg_, context_, "DatabaseCorruptError", errno_) {}
00407 DatabaseCorruptError(const std::string &msg_, int errno_)
00408 : DatabaseError(msg_, std::string(), "DatabaseCorruptError", errno_) {}
00409 protected:
00413 DatabaseCorruptError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00414 : DatabaseError(msg_, context_, type_, error_string_) {}
00415
00419 DatabaseCorruptError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00420 : DatabaseError(msg_, context_, type_, errno_) {}
00421 };
00422
00424 class XAPIAN_VISIBILITY_DEFAULT DatabaseCreateError : public DatabaseError {
00425 public:
00431 DatabaseCreateError(const std::string &msg_, const std::string &context_, const char * error_string_)
00432 : DatabaseError(msg_, context_, "DatabaseCreateError", error_string_) {}
00440 explicit DatabaseCreateError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00441 : DatabaseError(msg_, context_, "DatabaseCreateError", errno_) {}
00448 DatabaseCreateError(const std::string &msg_, int errno_)
00449 : DatabaseError(msg_, std::string(), "DatabaseCreateError", errno_) {}
00450 protected:
00454 DatabaseCreateError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00455 : DatabaseError(msg_, context_, type_, error_string_) {}
00456
00460 DatabaseCreateError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00461 : DatabaseError(msg_, context_, type_, errno_) {}
00462 };
00463
00465 class XAPIAN_VISIBILITY_DEFAULT DatabaseLockError : public DatabaseError {
00466 public:
00472 DatabaseLockError(const std::string &msg_, const std::string &context_, const char * error_string_)
00473 : DatabaseError(msg_, context_, "DatabaseLockError", error_string_) {}
00481 explicit DatabaseLockError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00482 : DatabaseError(msg_, context_, "DatabaseLockError", errno_) {}
00489 DatabaseLockError(const std::string &msg_, int errno_)
00490 : DatabaseError(msg_, std::string(), "DatabaseLockError", errno_) {}
00491 protected:
00495 DatabaseLockError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00496 : DatabaseError(msg_, context_, type_, error_string_) {}
00497
00501 DatabaseLockError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00502 : DatabaseError(msg_, context_, type_, errno_) {}
00503 };
00504
00511 class XAPIAN_VISIBILITY_DEFAULT DatabaseModifiedError : public DatabaseError {
00512 public:
00518 DatabaseModifiedError(const std::string &msg_, const std::string &context_, const char * error_string_)
00519 : DatabaseError(msg_, context_, "DatabaseModifiedError", error_string_) {}
00527 explicit DatabaseModifiedError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00528 : DatabaseError(msg_, context_, "DatabaseModifiedError", errno_) {}
00535 DatabaseModifiedError(const std::string &msg_, int errno_)
00536 : DatabaseError(msg_, std::string(), "DatabaseModifiedError", errno_) {}
00537 protected:
00541 DatabaseModifiedError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00542 : DatabaseError(msg_, context_, type_, error_string_) {}
00543
00547 DatabaseModifiedError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00548 : DatabaseError(msg_, context_, type_, errno_) {}
00549 };
00550
00552 class XAPIAN_VISIBILITY_DEFAULT DatabaseOpeningError : public DatabaseError {
00553 public:
00559 DatabaseOpeningError(const std::string &msg_, const std::string &context_, const char * error_string_)
00560 : DatabaseError(msg_, context_, "DatabaseOpeningError", error_string_) {}
00568 explicit DatabaseOpeningError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00569 : DatabaseError(msg_, context_, "DatabaseOpeningError", errno_) {}
00576 DatabaseOpeningError(const std::string &msg_, int errno_)
00577 : DatabaseError(msg_, std::string(), "DatabaseOpeningError", errno_) {}
00578 protected:
00582 DatabaseOpeningError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00583 : DatabaseError(msg_, context_, type_, error_string_) {}
00584
00588 DatabaseOpeningError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00589 : DatabaseError(msg_, context_, type_, errno_) {}
00590 };
00591
00603 class XAPIAN_VISIBILITY_DEFAULT DatabaseVersionError : public DatabaseOpeningError {
00604 public:
00610 DatabaseVersionError(const std::string &msg_, const std::string &context_, const char * error_string_)
00611 : DatabaseOpeningError(msg_, context_, "DatabaseVersionError", error_string_) {}
00619 explicit DatabaseVersionError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00620 : DatabaseOpeningError(msg_, context_, "DatabaseVersionError", errno_) {}
00627 DatabaseVersionError(const std::string &msg_, int errno_)
00628 : DatabaseOpeningError(msg_, std::string(), "DatabaseVersionError", errno_) {}
00629 protected:
00633 DatabaseVersionError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00634 : DatabaseOpeningError(msg_, context_, type_, error_string_) {}
00635
00639 DatabaseVersionError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00640 : DatabaseOpeningError(msg_, context_, type_, errno_) {}
00641 };
00642
00644 class XAPIAN_VISIBILITY_DEFAULT DocNotFoundError : public RuntimeError {
00645 public:
00651 DocNotFoundError(const std::string &msg_, const std::string &context_, const char * error_string_)
00652 : RuntimeError(msg_, context_, "DocNotFoundError", error_string_) {}
00660 explicit DocNotFoundError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00661 : RuntimeError(msg_, context_, "DocNotFoundError", errno_) {}
00668 DocNotFoundError(const std::string &msg_, int errno_)
00669 : RuntimeError(msg_, std::string(), "DocNotFoundError", errno_) {}
00670 protected:
00674 DocNotFoundError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00675 : RuntimeError(msg_, context_, type_, error_string_) {}
00676
00680 DocNotFoundError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00681 : RuntimeError(msg_, context_, type_, errno_) {}
00682 };
00683
00689 class XAPIAN_VISIBILITY_DEFAULT FeatureUnavailableError : public RuntimeError {
00690 public:
00696 FeatureUnavailableError(const std::string &msg_, const std::string &context_, const char * error_string_)
00697 : RuntimeError(msg_, context_, "FeatureUnavailableError", error_string_) {}
00705 explicit FeatureUnavailableError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00706 : RuntimeError(msg_, context_, "FeatureUnavailableError", errno_) {}
00713 FeatureUnavailableError(const std::string &msg_, int errno_)
00714 : RuntimeError(msg_, std::string(), "FeatureUnavailableError", errno_) {}
00715 protected:
00719 FeatureUnavailableError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00720 : RuntimeError(msg_, context_, type_, error_string_) {}
00721
00725 FeatureUnavailableError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00726 : RuntimeError(msg_, context_, type_, errno_) {}
00727 };
00728
00730 class XAPIAN_VISIBILITY_DEFAULT InternalError : public RuntimeError {
00731 public:
00737 InternalError(const std::string &msg_, const std::string &context_, const char * error_string_)
00738 : RuntimeError(msg_, context_, "InternalError", error_string_) {}
00746 explicit InternalError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00747 : RuntimeError(msg_, context_, "InternalError", errno_) {}
00754 InternalError(const std::string &msg_, int errno_)
00755 : RuntimeError(msg_, std::string(), "InternalError", errno_) {}
00756 protected:
00760 InternalError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00761 : RuntimeError(msg_, context_, type_, error_string_) {}
00762
00766 InternalError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00767 : RuntimeError(msg_, context_, type_, errno_) {}
00768 };
00769
00771 class XAPIAN_VISIBILITY_DEFAULT NetworkError : public RuntimeError {
00772 public:
00778 NetworkError(const std::string &msg_, const std::string &context_, const char * error_string_)
00779 : RuntimeError(msg_, context_, "NetworkError", error_string_) {}
00787 explicit NetworkError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00788 : RuntimeError(msg_, context_, "NetworkError", errno_) {}
00795 NetworkError(const std::string &msg_, int errno_)
00796 : RuntimeError(msg_, std::string(), "NetworkError", errno_) {}
00797 protected:
00801 NetworkError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00802 : RuntimeError(msg_, context_, type_, error_string_) {}
00803
00807 NetworkError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00808 : RuntimeError(msg_, context_, type_, errno_) {}
00809 };
00810
00812 class XAPIAN_VISIBILITY_DEFAULT NetworkTimeoutError : public NetworkError {
00813 public:
00819 NetworkTimeoutError(const std::string &msg_, const std::string &context_, const char * error_string_)
00820 : NetworkError(msg_, context_, "NetworkTimeoutError", error_string_) {}
00828 explicit NetworkTimeoutError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00829 : NetworkError(msg_, context_, "NetworkTimeoutError", errno_) {}
00836 NetworkTimeoutError(const std::string &msg_, int errno_)
00837 : NetworkError(msg_, std::string(), "NetworkTimeoutError", errno_) {}
00838 protected:
00842 NetworkTimeoutError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00843 : NetworkError(msg_, context_, type_, error_string_) {}
00844
00848 NetworkTimeoutError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00849 : NetworkError(msg_, context_, type_, errno_) {}
00850 };
00851
00853 class XAPIAN_VISIBILITY_DEFAULT QueryParserError : public RuntimeError {
00854 public:
00860 QueryParserError(const std::string &msg_, const std::string &context_, const char * error_string_)
00861 : RuntimeError(msg_, context_, "QueryParserError", error_string_) {}
00869 explicit QueryParserError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00870 : RuntimeError(msg_, context_, "QueryParserError", errno_) {}
00877 QueryParserError(const std::string &msg_, int errno_)
00878 : RuntimeError(msg_, std::string(), "QueryParserError", errno_) {}
00879 protected:
00883 QueryParserError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00884 : RuntimeError(msg_, context_, type_, error_string_) {}
00885
00889 QueryParserError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00890 : RuntimeError(msg_, context_, type_, errno_) {}
00891 };
00892
00894 class XAPIAN_VISIBILITY_DEFAULT SerialisationError : public RuntimeError {
00895 public:
00901 SerialisationError(const std::string &msg_, const std::string &context_, const char * error_string_)
00902 : RuntimeError(msg_, context_, "SerialisationError", error_string_) {}
00910 explicit SerialisationError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00911 : RuntimeError(msg_, context_, "SerialisationError", errno_) {}
00918 SerialisationError(const std::string &msg_, int errno_)
00919 : RuntimeError(msg_, std::string(), "SerialisationError", errno_) {}
00920 protected:
00924 SerialisationError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00925 : RuntimeError(msg_, context_, type_, error_string_) {}
00926
00930 SerialisationError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00931 : RuntimeError(msg_, context_, type_, errno_) {}
00932 };
00933
00936 class XAPIAN_VISIBILITY_DEFAULT RangeError : public RuntimeError {
00937 public:
00943 RangeError(const std::string &msg_, const std::string &context_, const char * error_string_)
00944 : RuntimeError(msg_, context_, "RangeError", error_string_) {}
00952 explicit RangeError(const std::string &msg_, const std::string &context_ = std::string(), int errno_ = 0)
00953 : RuntimeError(msg_, context_, "RangeError", errno_) {}
00960 RangeError(const std::string &msg_, int errno_)
00961 : RuntimeError(msg_, std::string(), "RangeError", errno_) {}
00962 protected:
00966 RangeError(const std::string &msg_, const std::string &context_, const char * type_, const char * error_string_)
00967 : RuntimeError(msg_, context_, type_, error_string_) {}
00968
00972 RangeError(const std::string &msg_, const std::string &context_, const char * type_, int errno_)
00973 : RuntimeError(msg_, context_, type_, errno_) {}
00974 };
00975
00976 }
00977
00978 #endif