commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r4037 - in gnuradio/branches/developers/jcorgan/hier/g


From: jcorgan
Subject: [Commit-gnuradio] r4037 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr
Date: Mon, 27 Nov 2006 23:23:20 -0700 (MST)

Author: jcorgan
Date: 2006-11-27 23:23:20 -0700 (Mon, 27 Nov 2006)
New Revision: 4037

Modified:
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.i
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_types.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
Log:
Work in progress, clean up.

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.cc
   2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.cc
   2006-11-28 06:23:20 UTC (rev 4037)
@@ -57,18 +57,3 @@
 {
     return shared_from_this();
 }
-
-/*
-bool
-gr_basic_block::validate()
-{
-    // Call my parent, get my assigned inputs and outputs, then call check 
topology,
-    // which may be overridden by descendent classes
-
-    int ninputs = 0, noutputs = 0;
-    if (d_parent)
-       d_parent->get_child_topology(shared_from_this(), &ninputs, &noutputs);
-
-    return check_topology(ninputs, noutputs);
-}
-*/

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
    2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_basic_block.h
    2006-11-28 06:23:20 UTC (rev 4037)
@@ -41,12 +41,12 @@
 class gr_basic_block : public boost::enable_shared_from_this<gr_basic_block>
 {
 protected:
-            
-    std::string                 d_name;
+    std::string          d_name;
     gr_io_signature_sptr d_input_signature;
     gr_io_signature_sptr d_output_signature;
-    long                d_unique_id;
+    long                 d_unique_id;
 
+    //! Protected constructor prevents instantiation by non-derived classes
     gr_basic_block(const std::string &name,
                    gr_io_signature_sptr input_signature,
                    gr_io_signature_sptr output_signature);

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.cc
 2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.cc
 2006-11-28 06:23:20 UTC (rev 4037)
@@ -29,8 +29,6 @@
 #include <stdexcept>
 #include <iostream>
 
-#define GR_BLOCK_DEBUG 1
-
 gr_block::gr_block (const std::string &name,
                    gr_io_signature_sptr input_signature,
                    gr_io_signature_sptr output_signature)

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
  2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.h
  2006-11-28 06:23:20 UTC (rev 4037)
@@ -189,19 +189,17 @@
 
  private:
 
-  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
-  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);
+            gr_io_signature_sptr input_signature,
+            gr_io_signature_sptr output_signature);
 
   void set_fixed_rate(bool fixed_rate){ d_fixed_rate = fixed_rate; }
 

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.i
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.i
  2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_block.i
  2006-11-28 06:23:20 UTC (rev 4037)
@@ -34,8 +34,8 @@
 class gr_block : public gr_basic_block {
  protected:
   gr_block (const std::string &name,
-            gr_io_signature_sptr input_signature,
-            gr_io_signature_sptr output_signature);
+            gr_io_signature_sptr input_signature,
+            gr_io_signature_sptr output_signature);
 
  public:
   

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   2006-11-28 06:23:20 UTC (rev 4037)
@@ -32,15 +32,15 @@
 #define GR_HIER_BLOCK2_DEBUG 1
 
 gr_hier_block2_sptr gr_make_hier_block2(const std::string &name, 
-                                       gr_io_signature_sptr input_signature,
-                                       gr_io_signature_sptr output_signature)
+                                        gr_io_signature_sptr input_signature,
+                                        gr_io_signature_sptr output_signature)
 {
     return gr_hier_block2_sptr(new gr_hier_block2(name, input_signature, 
output_signature));
 }
 
 gr_hier_block2::gr_hier_block2(const std::string &name,
-                              gr_io_signature_sptr input_signature,
-                              gr_io_signature_sptr output_signature)
+                               gr_io_signature_sptr input_signature,
+                               gr_io_signature_sptr output_signature)
   : gr_basic_block(name, input_signature, output_signature),
     d_detail(new gr_hier_block2_detail(this))
 {
@@ -63,22 +63,3 @@
 {
     d_detail->connect(src_name, src_port, dst_name, dst_port);
 }
-
-void
-gr_hier_block2::flatten(gr_simple_flowgraph_sptr sfg, const std::string 
&prefix)
-{
-    flatten_components(sfg, prefix);
-    flatten_edges(sfg, prefix);
-}
-
-void
-gr_hier_block2::flatten_components(gr_simple_flowgraph_sptr sfg, const 
std::string &prefix)
-{
-    d_detail->flatten_components(sfg, prefix);
-}
-
-void
-gr_hier_block2::flatten_edges(gr_simple_flowgraph_sptr sfg, const std::string 
&prefix)
-{
-    d_detail->flatten_edges(sfg, prefix);
-}

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
    2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.h
    2006-11-28 06:23:20 UTC (rev 4037)
@@ -28,8 +28,8 @@
  * \brief public constructor for gr_hier_block2
  */
 gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
-                                       gr_io_signature_sptr input_signature,
-                                       gr_io_signature_sptr output_signature);
+                                        gr_io_signature_sptr input_signature,
+                                        gr_io_signature_sptr output_signature);
 
 class gr_hier_block2_detail;
 
@@ -41,28 +41,27 @@
 {
 private:
     friend class gr_hier_block2_detail;
+    friend class gr_runtime_impl;
     friend gr_hier_block2_sptr gr_make_hier_block2(const std::string &name,
-                                                  gr_io_signature_sptr 
input_signature,
-                                                  gr_io_signature_sptr 
output_signature);
-    gr_hier_block2_detail *d_detail;
-    
-protected: 
+                                                   gr_io_signature_sptr 
input_signature,
+                                                   gr_io_signature_sptr 
output_signature);
+
     /*!
      * \brief Private implementation details of gr_hier_block2
      */
+    gr_hier_block2_detail *d_detail;
+    
+protected: 
     gr_hier_block2(const std::string &name,
-                  gr_io_signature_sptr input_signature,
-                  gr_io_signature_sptr output_signature);
+                   gr_io_signature_sptr input_signature,
+                   gr_io_signature_sptr output_signature);
 
 public:
-    ~gr_hier_block2();
+    virtual ~gr_hier_block2();
 
     void define_component(const std::string &name, gr_basic_block_sptr 
basic_block);
     void connect(const std::string &src_name, int src_port, 
                  const std::string &dst_name, int dst_port);
-    void flatten(gr_simple_flowgraph_sptr sfg, const std::string &prefix = "");
-    void flatten_components(gr_simple_flowgraph_sptr sfg, const std::string 
&prefix);
-    void flatten_edges(gr_simple_flowgraph_sptr sfg, const std::string 
&prefix);
 };
 
 #endif /* INCLUDED_GR_HIER_BLOCK2_H */

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
    2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.i
    2006-11-28 06:23:20 UTC (rev 4037)
@@ -30,26 +30,23 @@
 // that instantiates one of these and passes through calls
 %rename(hier_block2_swig) gr_make_hier_block2;
 gr_hier_block2_sptr gr_make_hier_block2(const std::string name,
-                                       gr_io_signature_sptr input_signature,
-                                       gr_io_signature_sptr output_signature);
+                                        gr_io_signature_sptr input_signature,
+                                        gr_io_signature_sptr output_signature);
 
-/*!
- * \brief gr_hier_block2 - Container class for tree of gr_block's
- *
- */
 class gr_hier_block2 : public gr_basic_block
 {
+private:
     gr_hier_block2(const std::string name,
-                  gr_io_signature_sptr input_signature,
-                  gr_io_signature_sptr output_signature);
+                   gr_io_signature_sptr input_signature,
+                   gr_io_signature_sptr output_signature);
 
 public:
     ~gr_hier_block2 ();
 
     // Add a named block to the container
     void define_component(const std::string &name, gr_basic_block_sptr 
basic_block)
-       throw (std::invalid_argument);
+        throw (std::invalid_argument);
     void connect(const std::string &src_name, int src_port,
-                const std::string &dst_name, int dst_port)
-       throw (std::invalid_argument);
+                 const std::string &dst_name, int dst_port)
+        throw (std::invalid_argument);
 };

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
    2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
    2006-11-28 06:23:20 UTC (rev 4037)
@@ -46,9 +46,9 @@
 {
     gr_hier_component_miter_t p = d_components.find(name);
     if (p != d_components.end())
-       return p->second;
+        return p->second;
     else
-       return gr_basic_block_sptr();
+        return gr_basic_block_sptr();
 }
 
 void 
@@ -58,28 +58,16 @@
        throw std::invalid_argument("null block passed");
 
     if (name == "self")
-       throw std::invalid_argument("name is reserved");
+        throw std::invalid_argument("name is reserved");
 
     // TODO: reject names with '.' inside
     
     if (!lookup_block(name))
-       d_components[name] = block;
+        d_components[name] = block;
     else
-       throw std::invalid_argument("name already in use");
+        throw std::invalid_argument("name already in use");
 }
 
-std::string 
-gr_hier_block2_detail::get_name_by_block(gr_basic_block_sptr block)
-{
-    for (gr_hier_component_miter_t p = d_components.begin();
-        p != d_components.end(); p++) {
-       if (block == p->second)
-           return p->first;
-    }
-
-    return std::string("");
-}
-
 void 
 gr_hier_block2_detail::connect(const std::string &src_name, int src_port, 
                                const std::string &dst_name, int dst_port)
@@ -89,22 +77,22 @@
     
     // Check against our *input_signature* if we're wiring from one of our 
external inputs
     if (src_name == "self") 
-       src_io_signature = d_owner->input_signature();
+        src_io_signature = d_owner->input_signature();
     else {
-       gr_basic_block_sptr src_block = lookup_block(src_name);
-       if (!src_block)
-           throw std::invalid_argument("undefined src name");
-       src_io_signature = src_block->output_signature();
+        gr_basic_block_sptr src_block = lookup_block(src_name);
+        if (!src_block)
+            throw std::invalid_argument("undefined src name");
+        src_io_signature = src_block->output_signature();
     }
     
     // Check against our *output_signature* if we're wiring to one of our 
external outputs
     if (dst_name == "self") 
        dst_io_signature = d_owner->output_signature();
     else {
-       gr_basic_block_sptr dst_block = lookup_block(dst_name);
-       if (!dst_block)
-           throw std::invalid_argument("undefined dst name");
-       dst_io_signature = dst_block->input_signature();
+        gr_basic_block_sptr dst_block = lookup_block(dst_name);
+        if (!dst_block)
+            throw std::invalid_argument("undefined dst name");
+        dst_io_signature = dst_block->input_signature();
     }
     
     // Check port numbers are valid
@@ -115,8 +103,7 @@
     check_dst_not_used(dst_name, dst_port);
 
     // Check endpoint types match
-    check_type_match(src_io_signature, src_port,
-                    dst_io_signature, dst_port);
+    check_type_match(src_io_signature, src_port, dst_io_signature, dst_port);
 
     d_edges.push_back(gr_make_edge(src_name, src_port, dst_name, dst_port));
 }
@@ -125,27 +112,26 @@
 gr_hier_block2_detail::check_valid_port(gr_io_signature_sptr sig, int port)
 {
     if (port < 0)
-       throw std::invalid_argument("port number must not be negative");
+        throw std::invalid_argument("port number must not be negative");
        
     if (sig->max_streams() >= 0 && port >= sig->max_streams())
-       throw std::invalid_argument("port number exceeds max streams");
+        throw std::invalid_argument("port number exceeds max streams");
 }
 
 void 
 gr_hier_block2_detail::check_dst_not_used(const std::string name, int port)
 {
     for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++)
-       if ((*p)->dst_name() == name && (*p)->dst_port() == port)
-           throw std::invalid_argument("destination port in use");
+        if ((*p)->dst_name() == name && (*p)->dst_port() == port)
+            throw std::invalid_argument("destination port in use");
 }
 
 void 
 gr_hier_block2_detail::check_type_match(gr_io_signature_sptr src_sig, int 
src_port,
-                                     gr_io_signature_sptr dst_sig, int 
dst_port)
+                                        gr_io_signature_sptr dst_sig, int 
dst_port)
 {
-    if (src_sig->sizeof_stream_item(src_port) !=
-        dst_sig->sizeof_stream_item(dst_port))
-       throw std::invalid_argument("type mismatch");
+    if (src_sig->sizeof_stream_item(src_port) != 
dst_sig->sizeof_stream_item(dst_port))
+        throw std::invalid_argument("type mismatch");
 }
 
 std::string
@@ -157,18 +143,15 @@
 gr_endpoint
 gr_hier_block2_detail::match_endpoint(const std::string &name, int port, bool 
is_input)
 {
-    std::string match_name;
-    int match_port;
-
     for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
-       if (is_input) {
-           if ((*p)->src_name() == name && (*p)->src_port() == port)
-               return resolve_endpoint((*p)->dst_name(), (*p)->dst_port(), "", 
!is_input);
-       }
-       else {
-           if ((*p)->dst_name() == name && (*p)->dst_port() == port)
-               return resolve_endpoint((*p)->src_name(), (*p)->src_port(), "", 
!is_input);
-       }
+        if (is_input) {
+            if ((*p)->src_name() == name && (*p)->src_port() == port)
+                return resolve_endpoint((*p)->dst_name(), (*p)->dst_port(), 
"", !is_input);
+           }
+        else {
+            if ((*p)->dst_name() == name && (*p)->dst_port() == port)
+                return resolve_endpoint((*p)->src_name(), (*p)->src_port(), 
"", !is_input);
+        }
     }
 
     // Should never get here
@@ -177,7 +160,7 @@
 
 gr_endpoint
 gr_hier_block2_detail::resolve_endpoint(const std::string &name, int port, 
-                                       const std::string &prefix, bool 
is_input)
+                                        const std::string &prefix, bool 
is_input)
 {
     gr_basic_block_sptr basic_block = lookup_block(name);
 
@@ -189,9 +172,9 @@
     // Check if 'name' points to hierarchical block
     gr_hier_block2_sptr 
hier_block2(boost::dynamic_pointer_cast<gr_hier_block2, 
gr_basic_block>(basic_block));
     if (hier_block2) {
-       std::string child_prefix = prepend_prefix(prefix, name);
-       gr_endpoint match(hier_block2->d_detail->match_endpoint("self", port, 
!is_input));
-       return gr_endpoint(prepend_prefix(child_prefix, match.name()), 
match.port());
+        std::string child_prefix = prepend_prefix(prefix, name);
+        gr_endpoint match(hier_block2->d_detail->match_endpoint("self", port, 
!is_input));
+        return gr_endpoint(prepend_prefix(child_prefix, match.name()), 
match.port());
     }
 
     // Shouldn't ever get here
@@ -199,20 +182,27 @@
 }
 
 void
+gr_hier_block2_detail::flatten(gr_simple_flowgraph_sptr sfg, const std::string 
&prefix)
+{
+    flatten_components(sfg, prefix);
+    flatten_edges(sfg, prefix);
+}
+
+void
 gr_hier_block2_detail::flatten_components(gr_simple_flowgraph_sptr sfg, const 
std::string &prefix)
 {
     // Add my non-hierarchical components to the simple flowgraph, then recurse
     for (gr_hier_component_miter_t p = d_components.begin(); p != 
d_components.end(); p++) {
-       std::string name = prepend_prefix(prefix, p->first);
+        std::string name = prepend_prefix(prefix, p->first);
 
-       gr_basic_block_sptr basic_block = p->second;
-       gr_block_sptr block(boost::dynamic_pointer_cast<gr_block, 
gr_basic_block>(basic_block));
-       if (block)      
-           sfg->define_component(name, block);
+        gr_basic_block_sptr basic_block = p->second;
+        gr_block_sptr block(boost::dynamic_pointer_cast<gr_block, 
gr_basic_block>(basic_block));
+        if (block)     
+            sfg->define_component(name, block);
 
-       gr_hier_block2_sptr 
hier_block2(boost::dynamic_pointer_cast<gr_hier_block2, 
gr_basic_block>(basic_block));
-       if (hier_block2)
-           hier_block2->flatten_components(sfg, name);
+        gr_hier_block2_sptr 
hier_block2(boost::dynamic_pointer_cast<gr_hier_block2, 
gr_basic_block>(basic_block));
+        if (hier_block2)
+            hier_block2->d_detail->flatten_components(sfg, name);
     }
 }
 
@@ -221,21 +211,19 @@
 {
     // Add my edges to the flow graph, resolving references to actual endpoints
     for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
+       // Connections to self get resolved/added by parent if actually 
connected
+        if ((*p)->src_name() == "self" || (*p)->dst_name() == "self")
+            continue;
 
-       // Connections to self get resolved/added by parent
-       if ((*p)->src_name() == "self" ||
-           (*p)->dst_name() == "self")
-           continue;
-
-       gr_endpoint src_endp = resolve_endpoint((*p)->src_name(), 
(*p)->src_port(), prefix, true);
-       gr_endpoint dst_endp = resolve_endpoint((*p)->dst_name(), 
(*p)->dst_port(), prefix, false);
-       sfg->connect(src_endp.name(), src_endp.port(), dst_endp.name(), 
dst_endp.port());
+        gr_endpoint src_endp = resolve_endpoint((*p)->src_name(), 
(*p)->src_port(), prefix, true);
+        gr_endpoint dst_endp = resolve_endpoint((*p)->dst_name(), 
(*p)->dst_port(), prefix, false);
+        sfg->connect(src_endp.name(), src_endp.port(), dst_endp.name(), 
dst_endp.port());
     }
 
     // Recurse hierarchical children
     for (gr_hier_component_miter_t p = d_components.begin(); p != 
d_components.end(); p++) {
-       gr_hier_block2_sptr 
hier_block2(boost::dynamic_pointer_cast<gr_hier_block2, 
gr_basic_block>(p->second));
-       if (hier_block2)
-           hier_block2->flatten_edges(sfg, prepend_prefix(prefix, p->first));
+        gr_hier_block2_sptr 
hier_block2(boost::dynamic_pointer_cast<gr_hier_block2, 
gr_basic_block>(p->second));
+        if (hier_block2)
+            hier_block2->d_detail->flatten_edges(sfg, prepend_prefix(prefix, 
p->first));
     }
 }

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
     2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
     2006-11-28 06:23:20 UTC (rev 4037)
@@ -32,7 +32,8 @@
 {
 private:
     friend class gr_hier_block2;
-
+    friend class gr_runtime_impl;
+    
     // Constructor--it's private, only friends can instantiate
     gr_hier_block2_detail(gr_hier_block2 *owner);
 
@@ -44,20 +45,19 @@
     // Private implementation methods
     void define_component(const std::string &name, gr_basic_block_sptr block);
     gr_basic_block_sptr lookup_block(const std::string &name);
-    std::string get_name_by_block(gr_basic_block_sptr block);
-
     void connect(const std::string &src_name, int src_port, 
                  const std::string &dst_name, int dst_port);
     void check_valid_port(gr_io_signature_sptr sig, int port);
     void check_dst_not_used(const std::string name, int port);
     void check_type_match(gr_io_signature_sptr src_sig, int src_port,
-                         gr_io_signature_sptr dst_sig, int dst_port);
+                          gr_io_signature_sptr dst_sig, int dst_port);
     std::string prepend_prefix(const std::string &prefix, const std::string 
&str);
+    void flatten(gr_simple_flowgraph_sptr sfg, const std::string &prefix = "");
     void flatten_components(gr_simple_flowgraph_sptr sfg, const std::string 
&prefix);
     void flatten_edges(gr_simple_flowgraph_sptr sfg, const std::string 
&prefix);
     gr_endpoint match_endpoint(const std::string &name, int port, bool 
is_input);
     gr_endpoint resolve_endpoint(const std::string &name, int port, 
-                                const std::string &prefix, bool is_input);
+                                 const std::string &prefix, bool is_input);
     
 public:
     ~gr_hier_block2_detail();

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
        2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime.i
        2006-11-28 06:23:20 UTC (rev 4037)
@@ -33,9 +33,10 @@
     gr_runtime(gr_hier_block2_sptr top_block);
 
 public:
-    void start();
+    void start()
+        throw (std::runtime_error);
     void stop();
     void wait();
     void run()
-       throw (std::runtime_error);
+        throw (std::runtime_error);
 };

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
  2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.cc
  2006-11-28 06:23:20 UTC (rev 4037)
@@ -29,6 +29,7 @@
 #include <gr_runtime_impl.h>
 #include <gr_simple_flowgraph.h>
 #include <gr_hier_block2.h>
+#include <gr_hier_block2_detail.h>
 #include <stdexcept>
 #include <iostream>
 
@@ -47,25 +48,25 @@
 gr_runtime_impl::start()
 {
     if (GR_RUNTIME_IMPL_DEBUG)
-       std::cout << "gr_runtime_impl::start()" << std::endl;
+        std::cout << "gr_runtime_impl::start()" << std::endl;
 
     if (d_running)
-       throw std::runtime_error("already running");
+        throw std::runtime_error("already running");
     else
-       d_running = true;
+        d_running = true;
 
-    d_top_block->flatten(d_sfg);
-    d_sfg->validate();
-    d_sfg->setup_connections();
+    d_top_block->d_detail->flatten(d_sfg);
+    d_sfg->d_detail->validate();
+    d_sfg->d_detail->setup_connections();
 }
 
 void 
 gr_runtime_impl::stop()
 {
     if (GR_RUNTIME_IMPL_DEBUG)
-       std::cout << "gr_runtime_impl::stop()" << std::endl;
+        std::cout << "gr_runtime_impl::stop()" << std::endl;
     if (!d_running)
-       return;
+        return;
 
     // Stop
     
@@ -76,5 +77,5 @@
 gr_runtime_impl::wait()
 {
     if (GR_RUNTIME_IMPL_DEBUG)
-       std::cout << "gr_runtime_impl::wait()" << std::endl;
+        std::cout << "gr_runtime_impl::wait()" << std::endl;
 }

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
   2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_impl.h
   2006-11-28 06:23:20 UTC (rev 4037)
@@ -31,8 +31,8 @@
     gr_runtime_impl(gr_hier_block2_sptr top_block);
     friend class gr_runtime;
     
-    bool d_running;
-    gr_hier_block2_sptr d_top_block;
+    bool                     d_running;
+    gr_hier_block2_sptr      d_top_block;
     gr_simple_flowgraph_sptr d_sfg;
     
     void start();

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_types.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_types.h
  2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_runtime_types.h
  2006-11-28 06:23:20 UTC (rev 4037)
@@ -39,14 +39,14 @@
 class gr_simple_flowgraph;
 class gr_runtime;
 
-typedef boost::shared_ptr<gr_basic_block>      gr_basic_block_sptr;
-typedef boost::shared_ptr<gr_block>            gr_block_sptr;
-typedef boost::shared_ptr<gr_block_detail>     gr_block_detail_sptr;
-typedef boost::shared_ptr<gr_hier_block2>      gr_hier_block2_sptr;
-typedef boost::shared_ptr<gr_io_signature>     gr_io_signature_sptr;
-typedef boost::shared_ptr<gr_buffer>           gr_buffer_sptr;
-typedef boost::shared_ptr<gr_buffer_reader>    gr_buffer_reader_sptr;
-typedef boost::shared_ptr<gr_runtime>          gr_runtime_sptr;
+typedef boost::shared_ptr<gr_basic_block>       gr_basic_block_sptr;
+typedef boost::shared_ptr<gr_block>             gr_block_sptr;
+typedef boost::shared_ptr<gr_block_detail>         gr_block_detail_sptr;
+typedef boost::shared_ptr<gr_hier_block2>          gr_hier_block2_sptr;
+typedef boost::shared_ptr<gr_io_signature>      gr_io_signature_sptr;
+typedef boost::shared_ptr<gr_buffer>               gr_buffer_sptr;
+typedef boost::shared_ptr<gr_buffer_reader>        gr_buffer_reader_sptr;
+typedef boost::shared_ptr<gr_runtime>              gr_runtime_sptr;
 typedef boost::shared_ptr<gr_simple_flowgraph>  gr_simple_flowgraph_sptr;
 
 #endif /* INCLUDED_GR_RUNTIME_TYPES_H */

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
      2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.cc
      2006-11-28 06:23:20 UTC (rev 4037)
@@ -49,13 +49,13 @@
 gr_simple_flowgraph::define_component(const std::string &name, gr_block_sptr 
block)
 {
     if (GR_SIMPLE_FLOWGRAPH_DEBUG)
-       std::cout << "Defining block " << block << " as " << name << std::endl;
+        std::cout << "Defining block " << block << " as " << name << std::endl;
     d_detail->define_component(name, block);
 }
 
 void
 gr_simple_flowgraph::connect(const std::string &src_name, int src_port,
-                            const std::string &dst_name, int dst_port)
+                             const std::string &dst_name, int dst_port)
 {
     d_detail->connect(src_name, src_port, dst_name, dst_port);
 }
@@ -65,9 +65,3 @@
 {
     d_detail->validate();
 }
-
-void
-gr_simple_flowgraph::setup_connections()
-{
-    d_detail->setup_connections();
-}

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
       2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
       2006-11-28 06:23:20 UTC (rev 4037)
@@ -34,6 +34,7 @@
 class gr_simple_flowgraph
 {
 private:
+    friend class gr_runtime_impl;
     friend gr_simple_flowgraph_sptr gr_make_simple_flowgraph();
     gr_simple_flowgraph();
 
@@ -44,9 +45,8 @@
 
     void define_component(const std::string &name, gr_block_sptr block);    
     void connect(const std::string &src, int src_port, 
-                const std::string &dst, int dst_port);
+                 const std::string &dst, int dst_port);
     void validate();
-    void setup_connections();
 };
 
 #endif /* INCLUDED_GR_SIMPLE_FLOWGRAPH_H */

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
       2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.i
       2006-11-28 06:23:20 UTC (rev 4037)
@@ -36,12 +36,10 @@
 public:
     ~gr_simple_flowgraph();
     void define_component(const std::string name, gr_block_sptr block)
-       throw (std::invalid_argument);
+        throw (std::invalid_argument);
     void connect(const std::string &src, int src_port,
-                const std::string &dst, int dst_port)
-       throw (std::invalid_argument);
+                 const std::string &dst, int dst_port)
+        throw (std::invalid_argument);
     void validate()
-       throw (std::runtime_error);
-    void setup_connections()
-       throw (std::runtime_error);
+        throw (std::runtime_error);
 };

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
       2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
       2006-11-28 06:23:20 UTC (rev 4037)
@@ -66,38 +66,38 @@
 {
     gr_component_miter_t p = d_components.find(name);
     if (p != d_components.end())
-       return p->second;
+        return p->second;
     else
-       return gr_block_sptr();
+        return gr_block_sptr();
 }
 
 void
 gr_simple_flowgraph_detail::define_component(const std::string &name, 
gr_block_sptr block)
 {
     if (!block)
-       throw std::invalid_argument("null block passed");
+        throw std::invalid_argument("null block passed");
 
     if (!lookup_block(name))
-       d_components[name] = block;
+        d_components[name] = block;
     else
-       throw std::invalid_argument("name already in use");
+        throw std::invalid_argument("name already in use");
 }
 
 void
 gr_simple_flowgraph_detail::connect(const std::string &src_name, int src_port,
-                                   const std::string &dst_name, int dst_port)
+                                    const std::string &dst_name, int dst_port)
 {
     gr_block_sptr src_block = lookup_block(src_name);
     gr_block_sptr dst_block = lookup_block(dst_name);
 
     if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
        std::cout << "Connecting " << src_name << ":" << src_port << "->"
-                 << dst_name << ":" << dst_port << std::endl;
+              << dst_name << ":" << dst_port << std::endl;
                          
     if (!src_block)
-       throw std::invalid_argument("unknown src name");
+        throw std::invalid_argument("unknown src name");
     if (!dst_block)
-       throw std::invalid_argument("unknown dst name");
+        throw std::invalid_argument("unknown dst name");
 
     check_valid_port(src_block->output_signature(), src_port);
     check_valid_port(dst_block->input_signature(), dst_port);
@@ -111,9 +111,9 @@
 gr_simple_flowgraph_detail::check_valid_port(gr_io_signature_sptr sig, int 
port)
 {
     if (port < 0)
-       throw std::invalid_argument("negative port number");
+        throw std::invalid_argument("negative port number");
     if (sig->max_streams() >= 0 && port >= sig->max_streams())
-       throw std::invalid_argument("port number exceeds max");
+        throw std::invalid_argument("port number exceeds max");
 }
 
 void
@@ -126,13 +126,13 @@
 
 void
 gr_simple_flowgraph_detail::check_type_match(gr_block_sptr src_block, int 
src_port,
-                                            gr_block_sptr dst_block, int 
dst_port)
+                                             gr_block_sptr dst_block, int 
dst_port)
 {
     int src_size = src_block->output_signature()->sizeof_stream_item(src_port);
     int dst_size = dst_block->input_signature()->sizeof_stream_item(dst_port);
 
     if (src_size != dst_size)
-       throw std::invalid_argument("type size mismatch");
+        throw std::invalid_argument("type size mismatch");
 }
 
 void
@@ -140,22 +140,22 @@
 {
     for (gr_component_miter_t p = d_components.begin(); p != 
d_components.end(); p++) {
         if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-           std::cout << "Validating block named " << p->first << ", which is "
-                     << p->second << std::endl;
+            std::cout << "Validating block named " << p->first << ", which is "
+                      << p->second << std::endl;
 
-       std::vector<int> used_ports;
-       int ninputs, noutputs;
-       
-       used_ports = calc_used_ports(p->first, true); // inputs
-       ninputs = used_ports.size();
-       check_contiguity(p->second, used_ports, true); // inputs
+       std::vector<int> used_ports;
+       int ninputs, noutputs;
 
-       used_ports = calc_used_ports(p->first, false); // outputs
-       noutputs = used_ports.size();
-       check_contiguity(p->second, used_ports, false); // outputs
+        used_ports = calc_used_ports(p->first, true); // inputs
+       ninputs = used_ports.size();
+       check_contiguity(p->second, used_ports, true); // inputs
+
+       used_ports = calc_used_ports(p->first, false); // outputs
+       noutputs = used_ports.size();
+       check_contiguity(p->second, used_ports, false); // outputs
        
-       if (!(p->second->check_topology(ninputs, noutputs)))
-           throw std::runtime_error("check topology failed");
+       if (!(p->second->check_topology(ninputs, noutputs)))
+           throw std::runtime_error("check topology failed");
     }
 }
 
@@ -163,8 +163,8 @@
 gr_simple_flowgraph_detail::calc_used_ports(const std::string &name, bool 
check_inputs)
 {
     if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-       std::cout << "Calculating used " << (check_inputs ? "input " : "output 
")
-                 << "ports...";
+        std::cout << "Calculating used " << (check_inputs ? "input " : "output 
")
+                  << "ports...";
 
     std::vector<int> tmp, result;
     std::insert_iterator<std::vector<int> > inserter(result, result.begin());
@@ -172,10 +172,10 @@
     gr_edge_vector_t edges = calc_connections(name, check_inputs);
 
     for (gr_edge_viter_t p = edges.begin(); p != edges.end(); p++) {
-       if (check_inputs == true)
-           tmp.push_back((*p)->dst_port());
-       else
-           tmp.push_back((*p)->src_port());
+        if (check_inputs == true)
+            tmp.push_back((*p)->dst_port());
+        else
+            tmp.push_back((*p)->src_port());
     }
     
     // remove duplicates
@@ -183,26 +183,25 @@
     std::unique_copy(tmp.begin(), tmp.end(), inserter);
 
     if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-       std::cout << result.size() << std::endl;
+        std::cout << result.size() << std::endl;
     
     return result;
 }
 
 gr_edge_vector_t
-gr_simple_flowgraph_detail::calc_connections(const std::string &name,
-                                            bool check_inputs)
+gr_simple_flowgraph_detail::calc_connections(const std::string &name, bool 
check_inputs)
 {
     gr_edge_vector_t result;
 
     for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++) {
-       if (check_inputs) {
-           if ((*p)->dst_name() == name)
-               result.push_back(*p);
-       }
-       else {
-           if ((*p)->src_name() == name)
-               result.push_back(*p);
-       }
+        if (check_inputs) {
+            if ((*p)->dst_name() == name)
+                result.push_back(*p);
+        }
+        else {
+            if ((*p)->src_name() == name)
+                result.push_back(*p);
+        }
     }
 
     return result;    // assumes no duplicates
@@ -210,48 +209,48 @@
 
 void
 gr_simple_flowgraph_detail::check_contiguity(gr_block_sptr block,
-                                            const std::vector<int> &used_ports,
-                                            bool check_inputs)
+                                             const std::vector<int> 
&used_ports,
+                                             bool check_inputs)
 {
     if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-       std::cout << "Checking " << (check_inputs ? "input " : "output ")
-                 << "contiguity...";
+        std::cout << "Checking " << (check_inputs ? "input " : "output ")
+                  << "contiguity...";
 
     gr_io_signature_sptr sig = 
-       check_inputs ? block->input_signature() : block->output_signature();
+        check_inputs ? block->input_signature() : block->output_signature();
 
     int nports = used_ports.size();
     int min_ports = sig->min_streams();
     
     if (nports == 0) {
-       if (min_ports == 0) {
-           if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-               std::cout << "ok." << std::endl;
-           return;
-       }
-       else {
-           if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-               std::cout << "needs " << min_ports << ", only has " 
-                         << nports << std::endl;
+        if (min_ports == 0) {
+            if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
+                std::cout << "ok." << std::endl;
+            return;
+        }
+        else {
+            if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
+                std::cout << "needs " << min_ports << ", only has " 
+                          << nports << std::endl;
            
-           throw std::runtime_error("insufficient ports");
-       }
+            throw std::runtime_error("insufficient ports");
+        }
     }
 
     if (used_ports[nports-1]+1 != nports) {
-       for (int i = 0; i < nports; i++) {
-           if (used_ports[i] != i) {
-               if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-                   std::cout << "missing " << (check_inputs ? "input ":"output 
")
-                             << i << std::endl;
+        for (int i = 0; i < nports; i++) {
+            if (used_ports[i] != i) {
+                if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
+                       std::cout << "missing " << (check_inputs ? "input 
":"output ")
+                              << i << std::endl;
 
-               throw std::runtime_error("missing input assignment");
+                throw std::runtime_error("missing input assignment");
+               }
            }
-       }
     }
 
     if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-       std::cout << "ok." << std::endl;
+        std::cout << "ok." << std::endl;
 }
 
 void
@@ -260,40 +259,40 @@
     // Assign block details to component blocks
     for (gr_component_miter_t p = d_components.begin(); p != 
d_components.end(); p++) {
         if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-           std::cout << "Allocating output buffers for " << p->first << "..." 
<< std::endl;
+            std::cout << "Allocating output buffers for " << p->first << "..." 
<< std::endl;
 
-       int ninputs = calc_used_ports(p->first, true).size();
-       int noutputs = calc_used_ports(p->first, false).size();
-       gr_block_detail_sptr detail = gr_make_block_detail(ninputs, noutputs);
-       for (int i = 0; i < noutputs; i++)
-           detail->set_output(i, allocate_buffer(p->first, i));
-       p->second->set_detail(detail);
+        int ninputs = calc_used_ports(p->first, true).size();
+        int noutputs = calc_used_ports(p->first, false).size();
+        gr_block_detail_sptr detail = gr_make_block_detail(ninputs, noutputs);
+        for (int i = 0; i < noutputs; i++)
+            detail->set_output(i, allocate_buffer(p->first, i));
+        p->second->set_detail(detail);
     }
 
     // Connect inputs to outputs for each block
     for(gr_component_miter_t p = d_components.begin(); p != 
d_components.end(); p++) {
         if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-           std::cout << "Connecting inputs to " << p->first << "..." << 
std::endl;
+            std::cout << "Connecting inputs to " << p->first << "..." << 
std::endl;
 
-       // Get its detail and edges that feed into it
-       gr_block_detail_sptr detail = p->second->detail();
-       gr_edge_vector_t in_edges = calc_upstream_edges(p->first);
+        // Get its detail and edges that feed into it
+        gr_block_detail_sptr detail = p->second->detail();
+        gr_edge_vector_t in_edges = calc_upstream_edges(p->first);
                        
-       // For each edge that feeds into it
-       for (gr_edge_viter_t e = in_edges.begin(); e != in_edges.end(); e++) {
-           // Set the input buffer on the destination port to the output
-           // buffer on the source port
-           int dst_port = (*e)->dst_port();
-           int src_port = (*e)->src_port();
-           gr_block_sptr src_block = lookup_block((*e)->src_name());
-           gr_buffer_sptr src_buffer = src_block->detail()->output(src_port);
+        // For each edge that feeds into it
+        for (gr_edge_viter_t e = in_edges.begin(); e != in_edges.end(); e++) {
+            // Set the input buffer on the destination port to the output
+            // buffer on the source port
+            int dst_port = (*e)->dst_port();
+            int src_port = (*e)->src_port();
+            gr_block_sptr src_block = lookup_block((*e)->src_name());
+            gr_buffer_sptr src_buffer = src_block->detail()->output(src_port);
 
-           if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-               std::cout << "Setting input on " << (*e)->dst_name()
-                         << ":" << dst_port << std::endl;
+            if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
+                std::cout << "Setting input on " << (*e)->dst_name()
+                          << ":" << dst_port << std::endl;
                             
-           detail->set_input(dst_port, gr_buffer_add_reader(src_buffer, 
p->second->history()-1));
-       }
+            detail->set_input(dst_port, gr_buffer_add_reader(src_buffer, 
p->second->history()-1));
+        }
     }
 }
 
@@ -306,21 +305,21 @@
     
     // Make sure there are at least twice the output_multiple no. of items
     if (nitems < 2*block->output_multiple())   // Note: this means 
output_multiple()
-       nitems = 2*block->output_multiple();    // can't be changed by block 
dynamically
+        nitems = 2*block->output_multiple();   // can't be changed by block 
dynamically
 
     // If any downstream blocks are decimators and/or have a large 
output_multiple,
     // ensure we have a buffer at least twice their decimation 
factor*output_multiple
     gr_block_vector_t blocks = calc_downstream_blocks(name, port);
     for (gr_block_viter_t p = blocks.begin(); p != blocks.end(); p++) {
-       int decimation = (int)(1.0/(*p)->relative_rate());
-       int multiple   = (*p)->output_multiple();
-       int history    = (*p)->history();
-       nitems = std::max(nitems, 2*(decimation*multiple+history));
+        int decimation = (int)(1.0/(*p)->relative_rate());
+        int multiple   = (*p)->output_multiple();
+        int history    = (*p)->history();
+        nitems = std::max(nitems, 2*(decimation*multiple+history));
     }
                                            
     if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-       std::cout << "Allocating buffer for port " << port << " with "
-                 << nitems << " items of size " << item_size << std::endl;
+        std::cout << "Allocating buffer for port " << port << " with "
+                  << nitems << " items of size " << item_size << std::endl;
         
     return gr_make_buffer(nitems, item_size);
 }
@@ -332,8 +331,8 @@
     std::insert_iterator<gr_block_vector_t> inserter(result, result.begin());
                
     for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++)
-       if ((*p)->src_name() == name && (*p)->src_port() == port)
-           tmp.push_back(lookup_block((*p)->dst_name()));
+        if ((*p)->src_name() == name && (*p)->src_port() == port)
+            tmp.push_back(lookup_block((*p)->dst_name()));
                                    
     // Remove duplicates
     sort(tmp.begin(), tmp.end());
@@ -347,8 +346,8 @@
     gr_edge_vector_t result;
                
     for (gr_edge_viter_t p = d_edges.begin(); p != d_edges.end(); p++)
-       if ((*p)->dst_name() == name)
-           result.push_back(*p);
+        if ((*p)->dst_name() == name)
+            result.push_back(*p);
 
     return result; // Assume no duplicates
 }

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
        2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
        2006-11-28 06:23:20 UTC (rev 4037)
@@ -52,7 +52,7 @@
 {
 private:
     friend gr_edge_sptr gr_make_edge(const std::string &src_name, int src_port,
-                                    const std::string &dst_name, int dst_port);
+                                     const std::string &dst_name, int 
dst_port);
     gr_edge(const std::string &name, int src_port,
             const std::string &name, int dst_port);
 
@@ -74,6 +74,8 @@
 {
 private:
     friend class gr_simple_flowgraph;
+    friend class gr_runtime_impl;
+    
     gr_simple_flowgraph_detail();
 
     gr_component_map_t d_components;
@@ -82,19 +84,16 @@
     
     void define_component(const std::string &name, gr_block_sptr block);    
     void connect(const std::string &src, int src_port, 
-                const std::string &dst, int dst_port);
+                 const std::string &dst, int dst_port);
     gr_block_sptr lookup_block(const std::string &name);
     void check_valid_port(gr_io_signature_sptr sig, int port);
     void check_dst_not_used(const std::string &name, int port);
     void check_type_match(gr_block_sptr src_block, int src_port,
-                         gr_block_sptr dst_block, int dst_port);
+                          gr_block_sptr dst_block, int dst_port);
     void validate();
-    gr_edge_vector_t calc_connections(const std::string &name, 
-                                      bool check_inputs); // false=use outputs
-    std::vector<int> calc_used_ports(const std::string &name, 
-                                     bool check_inputs); 
-    void check_contiguity(gr_block_sptr block, 
-                          const std::vector<int> &used_ports, 
+    gr_edge_vector_t calc_connections(const std::string &name, bool 
check_inputs); // false=use outputs
+    std::vector<int> calc_used_ports(const std::string &name, bool 
check_inputs); 
+    void check_contiguity(gr_block_sptr block, const std::vector<int> 
&used_ports, 
                           bool check_inputs);
     void setup_connections();
     gr_buffer_sptr allocate_buffer(const std::string &name, int port);

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
    2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
    2006-11-28 06:23:20 UTC (rev 4037)
@@ -42,17 +42,6 @@
        self.assertRaises(ValueError, 
            lambda: hblock.define_component("src", gr.null_sink(gr.sizeof_int)))
 
-    """ This is probably not going to stay 
-    def test_005_define_component_block_in_use(self):
-       hblock = gr.hier_block2("test_block", 
-                               gr.io_signature(1,1,gr.sizeof_int), 
-                               gr.io_signature(1,1,gr.sizeof_int))
-       nop = gr.nop(gr.sizeof_int)
-       hblock.define_component("nop1", nop)
-       self.assertRaises(ValueError, 
-           lambda: hblock.define_component("nop2", nop))
-    """
-
     def test_006_connect_internal(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
       2006-11-28 00:03:58 UTC (rev 4036)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
       2006-11-28 06:23:20 UTC (rev 4037)
@@ -138,35 +138,5 @@
        self.assertRaises(RuntimeError,
            lambda: sfg.validate ())
                                                                                
       
-    def test_017_validate(self):
-       sfg = gr.simple_flowgraph()
-       sfg.define_component("src1", gr.null_source (gr.sizeof_int))
-       sfg.define_component("nop1", gr.nop (gr.sizeof_int))
-       sfg.define_component("dst1", gr.null_sink (gr.sizeof_int))
-       sfg.define_component("dst2", gr.null_sink (gr.sizeof_int))
-       sfg.connect("src1", 0, "nop1", 0)
-       sfg.connect("src1", 0, "nop1", 1)
-       sfg.connect("nop1", 0, "dst1", 0)
-       sfg.connect("nop1", 1, "dst2", 0)
-       sfg.validate()
-       # pending implementation of disconnect
-       #sfg.disconnect("src1", 0, "nop1", 1)
-       #sfg.validate
-       #self.assertRaises(RuntimeError,
-       #    lambda: sfg.disconnect("src1", 0, "nop1", 1))
-                                                                               
       
-    def test_018_setup(self):
-       sfg = gr.simple_flowgraph()
-       sfg.define_component("src1", gr.null_source (gr.sizeof_int))
-       sfg.define_component("nop1", gr.nop (gr.sizeof_int))
-       sfg.define_component("dst1", gr.null_sink (gr.sizeof_int))
-       sfg.define_component("dst2", gr.null_sink (gr.sizeof_int))
-       sfg.connect("src1", 0, "nop1", 0)
-       sfg.connect("src1", 0, "nop1", 1)
-       sfg.connect("nop1", 0, "dst1", 0)
-       sfg.connect("nop1", 1, "dst2", 0)
-       sfg.validate ()
-       sfg.setup_connections()
-           
 if __name__ == "__main__":
     gr_unittest.main()





reply via email to

[Prev in Thread] Current Thread [Next in Thread]