Merge commit 'v3.3.1' into try-3.3.1
[debian/gnuradio] / gnuradio-core / src / lib / general / gr_feval.h
index 51817230ab8338e3ce88861f139b8da91f469d70..cc4209af0330fd1d93ef95290d7d1d62091a8dfd 100644 (file)
@@ -6,7 +6,7 @@
  * 
  * 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)
+ * 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,
 
 /*!
  * \brief base class for evaluating a function: double -> double
+ * \ingroup misc
  *
  * 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.
+ *
+ * Override eval to define the behavior.
+ * Use calleval to invoke eval (this kludge is required to allow a
+ * python specific "shim" to be inserted.
  */
 class gr_feval_dd
 {
-public:
-  gr_feval_dd() {}
-  virtual ~gr_feval_dd();
-
+protected:
   /*!
    * \brief override this to define the function
    */
   virtual double eval(double x);
+
+public:
+  gr_feval_dd() {}
+  virtual ~gr_feval_dd();
+
+  virtual double calleval(double x);   // invoke "eval"
 };
 
 /*!
- * \brief base class for evaluating a function: float -> float
+ * \brief base class for evaluating a function: complex -> complex
+ * \ingroup misc
  *
  * 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.
+ *
+ * Override eval to define the behavior.
+ * Use calleval to invoke eval (this kludge is required to allow a
+ * python specific "shim" to be inserted.
  */
-class gr_feval_ff
+class gr_feval_cc
 {
-public:
-  gr_feval_ff() {}
-  virtual ~gr_feval_ff();
-
+protected:
   /*!
    * \brief override this to define the function
    */
-  virtual float eval(float x);
+  virtual gr_complex eval(gr_complex x);
+  
+public:
+  gr_feval_cc() {}
+  virtual ~gr_feval_cc();
+
+  virtual gr_complex calleval(gr_complex x);   // invoke "eval"
 };
 
 /*!
- * \brief base class for evaluating a function: complex -> complex
+ * \brief base class for evaluating a function: long -> long
+ * \ingroup misc
  *
  * 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.
+ *
+ * Override eval to define the behavior.
+ * Use calleval to invoke eval (this kludge is required to allow a
+ * python specific "shim" to be inserted.
  */
-class gr_feval_cc
+class gr_feval_ll
 {
-public:
-  gr_feval_cc() {}
-  virtual ~gr_feval_cc();
-
+protected:
   /*!
    * \brief override this to define the function
    */
-  virtual gr_complex eval(gr_complex x);
+  virtual long eval(long x);
+
+public:
+  gr_feval_ll() {}
+  virtual ~gr_feval_ll();
+
+  virtual long calleval(long x);       // invoke "eval"
 };
 
 /*!
- * \brief base class for evaluating a function: long -> long
+ * \brief base class for evaluating a function: void -> void
+ * \ingroup misc
  *
  * 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.
+ *
+ * Override eval to define the behavior.
+ * Use calleval to invoke eval (this kludge is required to allow a
+ * python specific "shim" to be inserted.
  */
-class gr_feval_ll
+class gr_feval
 {
-public:
-  gr_feval_ll() {}
-  virtual ~gr_feval_ll();
-
+protected:
   /*!
    * \brief override this to define the function
    */
-  virtual long eval(long x);
+  virtual void eval();
+
+public:
+  gr_feval() {}
+  virtual ~gr_feval();
+
+  virtual void calleval();     // invoke "eval"
 };
 
 /*!
  * \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);
-
+void       gr_feval_example(gr_feval *f);
 
 #endif /* INCLUDED_GR_FEVAL_H */