00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00037 #if !defined( _OESS_1__DEFS__EX_HPP_ )
00038 #define _OESS_1__DEFS__EX_HPP_
00039
00040 #include <oess_1/defs/h/declspec.hpp>
00041
00042 #include <sstream>
00043 #include <exception>
00044
00045 #include <oess_1/defs/h/err_code.hpp>
00046
00047 namespace oess_1 {
00048
00049
00050
00051
00052
00056 class OESS_1__DEFS__TYPE ex_t :
00057 public std::exception
00058 {
00059 public :
00060 ex_t( const err_code_t & err );
00061 ex_t( const ex_t & x );
00062 virtual ~ex_t() throw();
00063
00064 ex_t &
00065 operator=( const ex_t & x );
00066
00067 const err_code_t &
00068 query_err_code() const;
00069
00072 virtual const char *
00073 what() const throw();
00074
00075 private :
00076 err_code_t m_err;
00077
00079 std::string m_text_representation;
00080
00082 void
00083 make_text_representation() throw();
00084 };
00085
00086
00087
00088
00089
00094 class OESS_1__DEFS__TYPE logic_ex_t : public ex_t {
00095 public :
00096 logic_ex_t( const err_code_t & err );
00097 logic_ex_t( const logic_ex_t & x );
00098 virtual ~logic_ex_t() throw();
00099
00100 logic_ex_t &
00101 operator=( const logic_ex_t & x );
00102 };
00103
00104
00105
00106
00107
00112 class OESS_1__DEFS__TYPE physic_ex_t : public ex_t {
00113 public :
00114 physic_ex_t( const err_code_t & err );
00115 physic_ex_t( const physic_ex_t & x );
00116 virtual ~physic_ex_t() throw();
00117
00118 physic_ex_t &
00119 operator=( const physic_ex_t & x );
00120 };
00121
00122
00123
00124
00125
00134 #define OESS_THROW_LOGIC( c, m )\
00135 { \
00136 std::ostringstream msg; \
00137 msg << m; \
00138 throw oess_1::logic_ex_t( oess_1_make_err( c, msg.str() ) ); \
00139 }
00140
00149 #define OESS_THROW_PHYSIC( c, m )\
00150 { \
00151 std::ostringstream msg; \
00152 msg << m; \
00153 throw oess_1::physic_ex_t( oess_1_make_err( c, msg.str() ) ); \
00154 }
00155
00156 }
00157
00158 #endif