1/* ----------------------------------------------------------------------------- 2 * See the LICENSE file for information on copyright, usage and redistribution 3 * of SWIG, and the README file for authors - http://www.swig.org/release.html. 4 * 5 * std_except.i 6 * 7 * SWIG library file with typemaps to handle and throw STD exceptions in a 8 * language and STL independent way, i.e., the target language doesn't 9 * require to support STL but only the 'exception.i' mechanism. 10 * 11 * These typemaps are used when methods are declared with an STD 12 * exception specification, such as 13 * 14 * size_t at() const throw (std::out_of_range); 15 * 16 * The typemaps here are based on the language independent 17 * 'exception.i' library. If that is working in your target language, 18 * this file will work. 19 * 20 * If the target language doesn't implement a robust 'exception.i' 21 * mechanism, or you prefer other ways to map the STD exceptions, write 22 * a new std_except.i file in the target library directory. 23 * ----------------------------------------------------------------------------- */ 24 25#if defined(SWIGJAVA) || defined(SWIGCSHARP) || defined(SWIGGUILE) || defined(SWIGUTL) 26#error "This version of std_except.i should not be used" 27#endif 28 29%{ 30#include <stdexcept> 31%} 32 33%include <exception.i> 34 35 36%define %std_exception_map(Exception, Code) 37 %typemap(throws,noblock=1) Exception { 38 SWIG_exception(Code, $1.what()); 39 } 40 %ignore Exception; 41 struct Exception { 42 }; 43%enddef 44 45namespace std { 46 %std_exception_map(bad_exception, SWIG_SystemError); 47 %std_exception_map(domain_error, SWIG_ValueError); 48 %std_exception_map(exception, SWIG_SystemError); 49 %std_exception_map(invalid_argument, SWIG_ValueError); 50 %std_exception_map(length_error, SWIG_IndexError); 51 %std_exception_map(logic_error, SWIG_RuntimeError); 52 %std_exception_map(out_of_range, SWIG_IndexError); 53 %std_exception_map(overflow_error, SWIG_OverflowError); 54 %std_exception_map(range_error, SWIG_OverflowError); 55 %std_exception_map(runtime_error, SWIG_RuntimeError); 56 %std_exception_map(underflow_error, SWIG_OverflowError); 57} 58 59