Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef ZORBA_ZORBA_EXCEPTION_API_H
00018 #define ZORBA_ZORBA_EXCEPTION_API_H
00019
00020 #include <iostream>
00021 #include <exception>
00022 #include <string>
00023
00024 #include <zorba/config.h>
00025 #include <zorba/internal/unique_ptr.h>
00026 #include <zorba/error.h>
00027
00028 namespace zorba {
00029
00030 class ZorbaException;
00031
00032 namespace serialization {
00033 class Archiver;
00034 void operator&( Archiver&, ZorbaException*& );
00035 }
00036
00037
00038
00039
00040
00041
00042 class ZORBA_DLL_PUBLIC ZorbaException : public std::exception {
00043 public:
00044 typedef internal::diagnostic::location::line_type line_type;
00045
00046
00047
00048
00049
00050
00051 ZorbaException( ZorbaException const &from );
00052
00053
00054
00055
00056 ~ZorbaException() throw();
00057
00058
00059
00060
00061
00062
00063
00064 ZorbaException& operator=( ZorbaException const &from );
00065
00066
00067
00068
00069
00070
00071 Diagnostic const& diagnostic() const throw() {
00072 return *diagnostic_;
00073 }
00074
00075
00076
00077
00078
00079 virtual void polymorphic_throw() const;
00080
00081
00082
00083
00084
00085
00086 void set_diagnostic( Diagnostic const &diagnostic ) throw() {
00087 diagnostic_ = &diagnostic;
00088 }
00089
00090
00091
00092
00093
00094
00095 char const* raise_file() const throw() {
00096 return raise_file_.c_str();
00097 }
00098
00099
00100
00101
00102
00103
00104 line_type raise_line() const throw() {
00105 return raise_line_;
00106 }
00107
00108
00109 char const* what() const throw();
00110
00111 protected:
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122 ZorbaException( Diagnostic const &diagnostic, char const *raise_file,
00123 line_type raise_line, char const *message );
00124
00125
00126
00127
00128
00129
00130 virtual std::unique_ptr<ZorbaException> clone() const;
00131
00132
00133
00134
00135
00136
00137
00138 virtual std::ostream& print( std::ostream &o ) const;
00139
00140 friend std::ostream& operator<<( std::ostream&, ZorbaException const& );
00141
00142 private:
00143 Diagnostic const *diagnostic_;
00144 std::string raise_file_;
00145 line_type raise_line_;
00146 std::string message_;
00147
00148 friend std::unique_ptr<ZorbaException> clone( ZorbaException const& );
00149
00150 friend ZorbaException make_zorba_exception(
00151 char const*, line_type, Diagnostic const&,
00152 internal::diagnostic::parameters const&
00153 );
00154
00155 friend ZorbaException* new_zorba_exception(
00156 char const*, line_type, Diagnostic const&,
00157 internal::diagnostic::parameters const&
00158 );
00159
00160 protected:
00161
00162 ZorbaException( serialization::Archiver& );
00163 friend void serialization::operator&( serialization::Archiver&,
00164 ZorbaException*& );
00165 };
00166
00167
00168
00169
00170
00171
00172
00173
00174 inline std::ostream& operator<<( std::ostream &o, ZorbaException const &e ) {
00175 return e.print( o );
00176 }
00177
00178
00179
00180 }
00181 #endif
00182