From 76ed4c2fea5f59bfe02bbbb17754ef7eda44feca Mon Sep 17 00:00:00 2001
From: jcorgan <jcorgan@221aa14e-8319-0410-a670-987f0aec2ac5>
Date: Tue, 12 Dec 2006 20:00:39 +0000
Subject: Merge jcorgan/hier developer branch into trunk.  Enables creation of
 true hierarchical blocks, from either C++ or Python, as well as creating pure
 C++ gnuradio applications. EXPERIMENTAL.

git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@4070 221aa14e-8319-0410-a670-987f0aec2ac5
---
 gnuradio-core/src/lib/runtime/gr_block.h | 66 +++++++++-----------------------
 1 file changed, 18 insertions(+), 48 deletions(-)

(limited to 'gnuradio-core/src/lib/runtime/gr_block.h')

diff --git a/gnuradio-core/src/lib/runtime/gr_block.h b/gnuradio-core/src/lib/runtime/gr_block.h
index 9723be1085..247238bb0a 100644
--- a/gnuradio-core/src/lib/runtime/gr_block.h
+++ b/gnuradio-core/src/lib/runtime/gr_block.h
@@ -23,13 +23,17 @@
 #ifndef INCLUDED_GR_BLOCK_H
 #define INCLUDED_GR_BLOCK_H
 
-#include <gr_runtime_types.h>
-#include <string>
+#include <gr_basic_block.h>
 
 /*!
- * \brief The abstract base class for all signal processing blocks.
+ * \brief The abstract base class for all 'terminal' processing blocks.
  * \ingroup block
  *
+ * A signal processing flow is constructed by creating a tree of 
+ * hierarchical blocks, which at any level may also contain terminal nodes
+ * that actually implement signal processing functions. This is the base
+ * class for all such leaf nodes.
+ 
  * Blocks have a set of input streams and output streams.  The
  * input_signature and output_signature define the number of input
  * streams and output streams respectively, and the type of the data
@@ -49,16 +53,11 @@
  * It reads the input items and writes the output items.
  */
 
-class gr_block {
+class gr_block : public gr_basic_block {
 
  public:
   
   virtual ~gr_block ();
-  
-  std::string name () const { return d_name; }
-  gr_io_signature_sptr input_signature () const  { return d_input_signature; }
-  gr_io_signature_sptr output_signature () const { return d_output_signature; }
-  long unique_id () const { return d_unique_id; }
 
   /*!
    * Assume block computes y_i = f(x_i, x_i-1, x_i-2, x_i-3...)
@@ -113,21 +112,6 @@ class gr_block {
 			    gr_vector_const_void_star &input_items,
 			    gr_vector_void_star &output_items) = 0;
 
-  /*!
-   * \brief Confirm that ninputs and noutputs is an acceptable combination.
-   *
-   * \param ninputs	number of input streams connected
-   * \param noutputs	number of output streams connected
-   *
-   * \returns true if this is a valid configuration for this block.
-   *
-   * This function is called by the runtime system whenever the
-   * topology changes.  Most classes do not need to override this.
-   * This check is in addition to the constraints specified by the input
-   * and output gr_io_signatures.
-   */
-  virtual bool check_topology (int ninputs, int noutputs);
-
   /*!
    * \brief Called to enable drivers, etc for i/o devices.
    *
@@ -205,32 +189,17 @@ class gr_block {
 
  private:
 
-  std::string		d_name;
-  gr_io_signature_sptr	d_input_signature;
-  gr_io_signature_sptr	d_output_signature;
-  int			d_output_multiple;
-  double		d_relative_rate;	// approx output_rate / input_rate
-  gr_block_detail_sptr	d_detail;		// implementation details
-  long			d_unique_id;		// convenient for debugging
-  unsigned		d_history;
-  bool			d_fixed_rate;
-
-  
+  int                   d_output_multiple;
+  double                d_relative_rate;	// approx output_rate / input_rate
+  gr_block_detail_sptr	d_detail;		    // implementation details
+  unsigned              d_history;
+  bool                  d_fixed_rate;
+    
  protected:
 
   gr_block (const std::string &name,
-	    gr_io_signature_sptr input_signature,
-	    gr_io_signature_sptr output_signature);
-
-  //! may only be called during constructor
-  void set_input_signature (gr_io_signature_sptr iosig){
-    d_input_signature = iosig;
-  }
-
-  //! may only be called during constructor
-  void set_output_signature (gr_io_signature_sptr iosig){
-    d_output_signature = iosig;
-  }
+            gr_io_signature_sptr input_signature,
+            gr_io_signature_sptr output_signature);
 
   void set_fixed_rate(bool fixed_rate){ d_fixed_rate = fixed_rate; }
 
@@ -242,6 +211,7 @@ class gr_block {
   void set_detail (gr_block_detail_sptr detail) { d_detail = detail; }
 };
 
-long gr_block_ncurrently_allocated ();
+typedef std::vector<gr_block_sptr> gr_block_vector_t;
+typedef std::vector<gr_block_sptr>::iterator gr_block_viter_t;
 
 #endif /* INCLUDED_GR_BLOCK_H */
-- 
cgit v1.2.3