diff options
author | Josh Blum | 2012-03-16 13:09:23 -0700 |
---|---|---|
committer | Josh Blum | 2012-03-16 13:09:23 -0700 |
commit | f9a07338b9c7c0af19d64d24c47eaa9f7fe1ba38 (patch) | |
tree | eb2a0911c73c193cb0af6bff2bd2b9c9bdf8e84f /gruel/src/swig/gruel_common.i | |
parent | 7e1ac13d5558eaca2233c4be4c41307b5e61b8f5 (diff) | |
download | gnuradio-f9a07338b9c7c0af19d64d24c47eaa9f7fe1ba38.tar.gz gnuradio-f9a07338b9c7c0af19d64d24c47eaa9f7fe1ba38.tar.bz2 gnuradio-f9a07338b9c7c0af19d64d24c47eaa9f7fe1ba38.zip |
gruel: created common swig include file
This work taken from gruel_work_squashed
Common swig file includes:
* Language independent exception handler
* Wrapper for python calls that may block
Benefits:
* More common swig code, less copy pasta
* Wrapper for blocking python calls handles
the case where the call throws,
python is not left in a bad state
Diffstat (limited to 'gruel/src/swig/gruel_common.i')
-rw-r--r-- | gruel/src/swig/gruel_common.i | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/gruel/src/swig/gruel_common.i b/gruel/src/swig/gruel_common.i new file mode 100644 index 000000000..e4261cbfa --- /dev/null +++ b/gruel/src/swig/gruel_common.i @@ -0,0 +1,66 @@ +/* + * Copyright 2011 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * GNU Radio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef GRUEL_COMMON_I +#define GRUEL_COMMON_I + +//////////////////////////////////////////////////////////////////////// +// Language independent exception handler +//////////////////////////////////////////////////////////////////////// +%include exception.i + +%exception { + try { + $action + } + catch(std::exception &e) { + SWIG_exception(SWIG_RuntimeError, e.what()); + } + catch(...) { + SWIG_exception(SWIG_RuntimeError, "Unknown exception"); + } + +} + +//////////////////////////////////////////////////////////////////////// +// Wrapper for python calls that may block +//////////////////////////////////////////////////////////////////////// + +/*! + * Use GR_PYTHON_BLOCKING_CODE when calling code that blocks. + * + * The try/catch is to save us from boost::thread::interrupt: + * If a thread from the scheduler (or any other boost thread) + * is blocking the routine and throws an interrupt exception. + */ +%{ + +#define GR_PYTHON_BLOCKING_CODE(code) { \ + PyThreadState *_save; \ + _save = PyEval_SaveThread(); \ + try{code} \ + catch(...){PyEval_RestoreThread(_save); throw;} \ + PyEval_RestoreThread(_save); \ +} + +%} + +#endif /*GRUEL_COMMON_I*/ |