⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gr_feval.i

📁 这是用python语言写的一个数字广播的信号处理工具包。利用它
💻 I
字号:
/* -*- c++ -*- *//* * Copyright 2006 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. *//* * N.B., this is a _very_ non-standard SWIG .i file * * It contains a bunch of magic that is required to ensure that when * these classes are used as base classes for python code, * everything works when calling back from C++ into Python. * * The gist of the problem is that our C++ code is usually not holding * the Python Global Interpreter Lock (GIL).  Thus if we invoke a * "director" method from C++, we'll end up in Python not holding the * GIL.  Disaster (SIGSEGV) will result.  To avoid this we insert a * "shim" that grabs and releases the GIL. * * If you don't understand SWIG "directors" or the Python GIL, * don't bother trying to understand what's going on in here. * * [We could eliminate a bunch of this hair by requiring SWIG 1.3.29 * or later and some additional magic declarations, but many systems * aren't shipping that version yet.  Thus we kludge...] */// Enable SWIG directors for these classes%feature("director") gr_py_feval_dd;%feature("director") gr_py_feval_cc;%feature("director") gr_py_feval_ll;%feature("director") gr_py_feval;%feature("nodirector") gr_py_feval_dd::calleval;%feature("nodirector") gr_py_feval_cc::calleval;%feature("nodirector") gr_py_feval_ll::calleval;%feature("nodirector") gr_py_feval::calleval;%rename(feval_dd) gr_py_feval_dd;%rename(feval_cc) gr_py_feval_cc;%rename(feval_ll) gr_py_feval_ll;%rename(feval)    gr_py_feval;//%exception {//  try { $action }//  catch (Swig::DirectorException &e) { std::cerr << e.getMessage();  SWIG_fail; }//}%{// class that ensures we acquire and release the Python GILclass ensure_py_gil_state {  PyGILState_STATE	d_gstate;public:  ensure_py_gil_state()  { d_gstate = PyGILState_Ensure(); }  ~ensure_py_gil_state() { PyGILState_Release(d_gstate); }};%}/* * These are the real C++ base classes, however we don't want these exposed. */%ignore gr_feval_dd;class gr_feval_dd{protected:  virtual double eval(double x);public:  gr_feval_dd() {}  virtual ~gr_feval_dd();  virtual double calleval(double x);};%ignore gr_feval_cc;class gr_feval_cc{protected:  virtual gr_complex eval(gr_complex x);public:  gr_feval_cc() {}  virtual ~gr_feval_cc();  virtual gr_complex calleval(gr_complex x);};%ignore gr_feval_ll;class gr_feval_ll{protected:  virtual long eval(long x);  public:  gr_feval_ll() {}  virtual ~gr_feval_ll();  virtual long calleval(long x);};%ignore gr_feval;class gr_feval{protected:  virtual void eval();  public:  gr_feval() {}  virtual ~gr_feval();  virtual void calleval();};/* * These are the ones to derive from in Python.  They have the magic shim * that ensures that we're holding the Python GIL when we enter Python land... */%inline %{class gr_py_feval_dd : public gr_feval_dd{ public:  double calleval(double x)  {    ensure_py_gil_state _lock;    return eval(x);  }};class gr_py_feval_cc : public gr_feval_cc{ public:  gr_complex calleval(gr_complex x)  {    ensure_py_gil_state _lock;    return eval(x);  }};class gr_py_feval_ll : public gr_feval_ll{ public:  long calleval(long x)  {    ensure_py_gil_state _lock;    return eval(x);  }};class gr_py_feval : public gr_feval{ public:  void calleval()  {    ensure_py_gil_state _lock;    eval();  }};%}// examples / test cases%rename(feval_dd_example) gr_feval_dd_example;double gr_feval_dd_example(gr_feval_dd *f, double x);%rename(feval_cc_example) gr_feval_cc_example;gr_complex gr_feval_cc_example(gr_feval_cc *f, gr_complex x);%rename(feval_ll_example) gr_feval_ll_example;long gr_feval_ll_example(gr_feval_ll *f, long x);%rename(feval_example) gr_feval_example;void gr_feval_example(gr_feval *f);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -