$search
00001 00013 /***************************************************************************** 00014 ** Includes 00015 *****************************************************************************/ 00016 00017 #include <cstdio> // fopen 00018 #include <iostream> 00019 #include <ecl/config/ecl.hpp> 00020 #include "../../include/ecl/exceptions/exception.hpp" 00021 #include "../../include/ecl/exceptions/data_exception.hpp" 00022 #include "../../include/ecl/exceptions/macros.hpp" 00023 #include "../../include/ecl/exceptions/standard_exception.hpp" 00024 00025 /***************************************************************************** 00026 ** Disable check 00027 *****************************************************************************/ 00028 00029 #include <ecl/config/ecl.hpp> 00030 #ifndef ECL_DISABLE_EXCEPTIONS 00031 00032 /***************************************************************************** 00033 ** Using 00034 *****************************************************************************/ 00035 00036 using namespace ecl; 00037 00038 /***************************************************************************** 00039 ** Functions 00040 *****************************************************************************/ 00041 00042 void f(int i) ecl_debug_throw_decl(StandardException) 00043 { 00044 if ( i > 5 ) { 00045 ecl_debug_throw(StandardException(LOC,InvalidInputError,"Debug throw test failed, input integer exceeded.")); 00046 } else { 00047 // cout << "Valid integer supplied." << endl; 00048 } 00049 } 00050 00051 /***************************************************************************** 00052 ** Main 00053 *****************************************************************************/ 00054 00055 int main(int argc, char **argv) { 00056 00057 std::cout << std::endl; 00058 std::cout << "***********************************************************" << std::endl; 00059 std::cout << " Standard Exceptions" << std::endl; 00060 std::cout << "***********************************************************" << std::endl; 00061 std::cout << std::endl; 00062 00063 try { 00064 throw StandardException(LOC, NoError); 00065 } catch ( StandardException &e ) { 00066 std::cout << e.what() << std::endl; 00067 } 00068 try { 00069 throw StandardException(LOC, UnknownError); 00070 } catch ( StandardException &e ) { 00071 std::cout << e.what() << std::endl; 00072 } 00073 try { 00074 throw StandardException(LOC, OutOfRangeError); 00075 } catch ( StandardException &e ) { 00076 std::cout << e.what() << std::endl; 00077 } 00078 try { 00079 throw StandardException(LOC, ConstructorError); 00080 } catch ( StandardException &e ) { 00081 std::cout << e.what() << std::endl; 00082 } 00083 try { 00084 throw StandardException(LOC, DestructorError); 00085 } catch ( StandardException &e ) { 00086 std::cout << e.what() << std::endl; 00087 } 00088 try { 00089 throw StandardException(LOC, ConversionError); 00090 } catch ( StandardException &e ) { 00091 std::cout << e.what() << std::endl; 00092 } 00093 try { 00094 throw StandardException(LOC, OpenError); 00095 } catch ( StandardException &e ) { 00096 std::cout << e.what() << std::endl; 00097 } 00098 try { 00099 throw StandardException(LOC, CloseError); 00100 } catch ( StandardException &e ) { 00101 std::cout << e.what() << std::endl; 00102 } 00103 try { 00104 throw StandardException(LOC, InvalidArgError); 00105 } catch ( StandardException &e ) { 00106 std::cout << e.what() << std::endl; 00107 } 00108 try { 00109 throw StandardException(LOC, ConfigurationError); 00110 } catch ( StandardException &e ) { 00111 std::cout << e.what() << std::endl; 00112 } 00113 try { 00114 throw StandardException(LOC, ConnectionError); 00115 } catch ( StandardException &e ) { 00116 std::cout << e.what() << std::endl; 00117 } 00118 try { 00119 throw StandardException(LOC, ReadError); 00120 } catch ( StandardException &e ) { 00121 std::cout << e.what() << std::endl; 00122 } 00123 try { 00124 throw StandardException(LOC, WriteError); 00125 } catch ( StandardException &e ) { 00126 std::cout << e.what() << std::endl; 00127 } 00128 try { 00129 throw StandardException(LOC, NotInitialisedError); 00130 } catch ( StandardException &e ) { 00131 std::cout << e.what() << std::endl; 00132 } 00133 try { 00134 throw StandardException(LOC, PermissionsError); 00135 } catch ( StandardException &e ) { 00136 std::cout << e.what() << std::endl; 00137 } 00138 try { 00139 throw StandardException(LOC, MemoryError); 00140 } catch ( StandardException &e ) { 00141 std::cout << e.what() << std::endl; 00142 } 00143 try { 00144 throw StandardException(LOC, UsageError); 00145 } catch ( StandardException &e ) { 00146 std::cout << e.what() << std::endl; 00147 } 00148 try { 00149 throw StandardException(LOC, RaiiError); 00150 } catch ( StandardException &e ) { 00151 std::cout << e.what() << std::endl; 00152 } 00153 try { 00154 throw StandardException(LOC, ArgNotSupportedError); 00155 } catch ( StandardException &e ) { 00156 std::cout << e.what() << std::endl; 00157 } 00158 try { 00159 throw StandardException(LOC, NotSupportedError); 00160 } catch ( StandardException &e ) { 00161 std::cout << e.what() << std::endl; 00162 } 00163 try { 00164 throw StandardException(LOC, BusyError); 00165 } catch ( StandardException &e ) { 00166 std::cout << e.what() << std::endl; 00167 } 00168 try { 00169 throw StandardException(LOC, OutOfResourcesError); 00170 } catch ( StandardException &e ) { 00171 std::cout << e.what() << std::endl; 00172 } 00173 try { 00174 throw StandardException(LOC, InterruptedError); 00175 } catch ( StandardException &e ) { 00176 std::cout << e.what() << std::endl; 00177 } 00178 00179 std::cout << std::endl; 00180 std::cout << "***********************************************************" << std::endl; 00181 std::cout << " Standard Exceptions - Custom Message" << std::endl; 00182 std::cout << "***********************************************************" << std::endl; 00183 std::cout << std::endl; 00184 00185 try { 00186 throw StandardException(LOC, OutOfRangeError,"Custom detailed message."); 00187 } catch ( StandardException &e ) { 00188 std::cout << e.what() << std::endl; 00189 } 00190 00191 std::cout << std::endl; 00192 std::cout << "***********************************************************" << std::endl; 00193 std::cout << " Standard Exceptions - Custom Message" << std::endl; 00194 std::cout << "***********************************************************" << std::endl; 00195 std::cout << std::endl; 00196 try { 00197 throw StandardException(LOC, OutOfRangeError,"Custom detailed message."); 00198 } catch ( StandardException &e ) { 00199 std::cout << e.what() << std::endl; 00200 } 00201 00202 std::cout << std::endl; 00203 std::cout << "***********************************************************" << std::endl; 00204 std::cout << " Assert Exception Macro" << std::endl; 00205 std::cout << "***********************************************************" << std::endl; 00206 std::cout << std::endl; 00207 00208 try { 00209 ecl_assert_throw(2<1, StandardException(LOC, InvalidInputError,"Two is not smaller than one!")); 00210 } catch ( StandardException &e ) { 00211 std::cout << e.what() << std::endl; 00212 } 00213 00214 std::cout << std::endl; 00215 std::cout << "***********************************************************" << std::endl; 00216 std::cout << " Debug Throw Macro" << std::endl; 00217 std::cout << "***********************************************************" << std::endl; 00218 std::cout << std::endl; 00219 00220 try { 00221 f(7); 00222 } catch ( StandardException &e ) { 00223 std::cout << e.what() << std::endl; 00224 } 00225 00226 std::cout << std::endl; 00227 std::cout << "***********************************************************" << std::endl; 00228 std::cout << " Rethrowing" << std::endl; 00229 std::cout << "***********************************************************" << std::endl; 00230 std::cout << std::endl; 00231 00232 try { 00233 throw StandardException(LOC, ConfigurationError,"Starting spot for a rethrow."); 00234 } catch ( StandardException &e1 ) { 00235 try { 00236 throw StandardException(LOC, e1); 00237 } catch ( StandardException &e2 ) { 00238 std::cout << e2.what() << std::endl; 00239 } 00240 } 00241 00242 std::cout << std::endl; 00243 std::cout << "***********************************************************" << std::endl; 00244 std::cout << " Try Catch" << std::endl; 00245 std::cout << "***********************************************************" << std::endl; 00246 std::cout << std::endl; 00247 00248 00249 std::cout << "An ecl try-catch block." << std::endl; 00250 std::cout << std::endl; 00251 StandardException e_original(LOC,UnknownError); 00252 ecl_try { 00253 std::cout << "Try" << std::endl; 00254 ecl_throw(StandardException(LOC,e_original)); 00255 } ecl_catch( StandardException &e ) { 00256 std::cout << "Catch" << std::endl; 00257 std::cout << e.what() << std::endl; 00258 } 00259 std::cout << "An debug try-catch block." << std::endl; 00260 std::cout << std::endl; 00261 ecl_debug_try { 00262 std::cout << "Try" << std::endl; 00263 ecl_debug_throw(StandardException(LOC,e_original)); 00264 } ecl_debug_catch( StandardException &e ) { 00265 std::cout << "Catch" << std::endl; 00266 std::cout << e.what() << std::endl; 00267 } 00268 00269 00270 std::cout << std::endl; 00271 std::cout << "***********************************************************" << std::endl; 00272 std::cout << " Data Exception" << std::endl; 00273 std::cout << "***********************************************************" << std::endl; 00274 std::cout << std::endl; 00275 00276 try { 00277 throw DataException<int>(LOC, ConfigurationError,"Throwing a data exception with an int.", 7); 00278 } catch ( DataException<int> &e ) { 00279 std::cout << "Data: " << e.data() << std::endl; 00280 std::cout << e.what() << std::endl; 00281 } 00282 00283 std::cout << std::endl; 00284 std::cout << "***********************************************************" << std::endl; 00285 std::cout << " Passed" << std::endl; 00286 std::cout << "***********************************************************" << std::endl; 00287 std::cout << std::endl; 00288 00289 return 0; 00290 } 00291 00292 #else 00293 /***************************************************************************** 00294 ** Main 00295 *****************************************************************************/ 00296 00297 int main(int argc, char **argv) { 00298 std::cout << "Ecl exceptions are unavailable (ecl was compiled with ECL_DISABLE_EXCEPTIONS)." << std::endl; 00299 00300 return 0; 00301 } 00302 00303 #endif /* ECL_DISABLE_EXCEPTIONS */