diff options
Diffstat (limited to 'gnuradio-core/src/lib/general/gr_feval.h')
-rw-r--r-- | gnuradio-core/src/lib/general/gr_feval.h | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/gnuradio-core/src/lib/general/gr_feval.h b/gnuradio-core/src/lib/general/gr_feval.h new file mode 100644 index 0000000000..e9f3ae3506 --- /dev/null +++ b/gnuradio-core/src/lib/general/gr_feval.h @@ -0,0 +1,116 @@ +/* -*- 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 2, 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#ifndef INCLUDED_GR_FEVAL_H +#define INCLUDED_GR_FEVAL_H + +#include <gr_complex.h> + +/*! + * \brief base class for evaluating a function: double -> double + * + * This class is designed to be subclassed in Python or C++ + * and is callable from both places. It uses SWIG's + * "director" feature to implement the magic. + * It's slow. Don't use it in a performance critical path. + */ +class gr_feval_dd +{ +public: + gr_feval_dd() {} + virtual ~gr_feval_dd(); + + /*! + * \brief override this to define the function + */ + virtual double eval(double x); +}; + +/*! + * \brief base class for evaluating a function: float -> float + * + * This class is designed to be subclassed in Python or C++ + * and is callable from both places. It uses SWIG's + * "director" feature to implement the magic. + * It's slow. Don't use it in a performance critical path. + */ +class gr_feval_ff +{ +public: + gr_feval_ff() {} + virtual ~gr_feval_ff(); + + /*! + * \brief override this to define the function + */ + virtual float eval(float x); +}; + +/*! + * \brief base class for evaluating a function: complex -> complex + * + * This class is designed to be subclassed in Python or C++ + * and is callable from both places. It uses SWIG's + * "director" feature to implement the magic. + * It's slow. Don't use it in a performance critical path. + */ +class gr_feval_cc +{ +public: + gr_feval_cc() {} + virtual ~gr_feval_cc(); + + /*! + * \brief override this to define the function + */ + virtual gr_complex eval(gr_complex x); +}; + +/*! + * \brief base class for evaluating a function: long -> long + * + * This class is designed to be subclassed in Python or C++ + * and is callable from both places. It uses SWIG's + * "director" feature to implement the magic. + * It's slow. Don't use it in a performance critical path. + */ +class gr_feval_ll +{ +public: + gr_feval_ll() {} + virtual ~gr_feval_ll(); + + /*! + * \brief override this to define the function + */ + virtual long eval(long x); +}; + +/*! + * \brief trivial examples / test cases showing C++ calling Python code + */ +double gr_feval_dd_example(gr_feval_dd *f, double x); +float gr_feval_ff_example(gr_feval_ff *f, float x); +gr_complex gr_feval_cc_example(gr_feval_cc *f, gr_complex x); +long gr_feval_ll_example(gr_feval_ll *f, long x); + + +#endif /* INCLUDED_GR_FEVAL_H */ |