commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r5158 - gnuradio/branches/developers/jcorgan/hb/gnurad


From: jcorgan
Subject: [Commit-gnuradio] r5158 - gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime
Date: Fri, 27 Apr 2007 14:30:47 -0600 (MDT)

Author: jcorgan
Date: 2007-04-27 14:30:46 -0600 (Fri, 27 Apr 2007)
New Revision: 5158

Modified:
   
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
   
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
Log:
Work in progress.

Modified: 
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
      2007-04-27 19:00:11 UTC (rev 5157)
+++ 
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
      2007-04-27 20:30:46 UTC (rev 5158)
@@ -66,33 +66,15 @@
 gr_hier_block2_detail::disconnect(gr_basic_block_sptr src, int src_port, 
                                   gr_basic_block_sptr dst, int dst_port)
 {
+  // Handle disconnecting inputs and outputs
+
   d_fg->disconnect(src, src_port, dst, dst_port);
 }
 
-gr_endpoint
-gr_hier_block2_detail::match_endpoint(const gr_endpoint &endp, bool is_input)
-{
-  for (gr_edge_viter_t p = d_fg->d_detail->d_edges.begin(); p != 
d_fg->d_detail->d_edges.end(); p++) {
-    if (is_input) {
-      if ((*p)->src().block().get() == (gr_hier_block2 *)d_owner && 
-         (*p)->src().port() == endp.port())
-       return resolve_endpoint((*p)->dst(), !is_input);
-    }
-    else {
-      if ((*p)->dst().block().get() == (gr_hier_block2 *)d_owner && 
-         (*p)->dst().port() == endp.port())
-       return resolve_endpoint((*p)->src(), !is_input);
-    }
-  }
-
-  // Should never get here
-  throw std::runtime_error("unable to match endpoint");
-}
-
 void
 gr_hier_block2_detail::assign_input(int my_port, int port, gr_basic_block_sptr 
block)
 {
-  if (port < 0 || port >= (signed)d_inputs.size())
+  if (my_port < 0 || my_port >= (signed)d_inputs.size())
     throw std::invalid_argument("input port number out of range");
 
   d_inputs[my_port] = gr_endpoint(block, port);
@@ -101,13 +83,28 @@
 void
 gr_hier_block2_detail::assign_output(int my_port, int port, 
gr_basic_block_sptr block)
 {
-  if (port < 0 || port >= (signed)d_outputs.size())
+  if (my_port < 0 || my_port >= (signed)d_outputs.size())
     throw std::invalid_argument("output port number out of range");
 
   d_outputs[my_port] = gr_endpoint(block, port);
 }
 
 gr_endpoint
+gr_hier_block2_detail::resolve_port(int port, bool is_input)
+{
+  if (is_input) {
+    if (port < 0 || port >= d_inputs.size())
+      throw std::runtime_error("input port number out of range");
+    return resolve_endpoint(d_inputs[port], true);
+  }
+  else {
+    if (port < 0 || port >= d_outputs.size())
+      throw std::runtime_error("output port number out of range");
+    return resolve_endpoint(d_outputs[port], false);
+  }
+}
+
+gr_endpoint
 gr_hier_block2_detail::resolve_endpoint(const gr_endpoint &endp, bool is_input)
 {
   // Check if endpoint is a leaf node
@@ -117,7 +114,7 @@
   // Check if endpoint is a hierarchical block
   gr_hier_block2_sptr hier_block2(boost::dynamic_pointer_cast<gr_hier_block2, 
gr_basic_block>(endp.block()));
   if (hier_block2)
-    return hier_block2->d_detail->match_endpoint(endp, !is_input);
+    return hier_block2->d_detail->resolve_port(endp.port(), is_input);
 
   // Shouldn't ever get here
   throw std::runtime_error("unable to resolve endpoint");
@@ -128,15 +125,8 @@
 {
   // Add my edges to the flow graph, resolving references to actual endpoints
   for (gr_edge_viter_t p = d_fg->d_detail->d_edges.begin(); p != 
d_fg->d_detail->d_edges.end(); p++) {
-    // Connections to self get resolved/added by parent if actually connected
-    if ((*p)->src().block().get() == (gr_hier_block2 *)d_owner || 
-       (*p)->dst().block().get() == (gr_hier_block2 *)d_owner)
-      continue;
-
-    // TODO: Silently ignore connections to "NC" (not implemented yed)
-
-    gr_endpoint src_endp = resolve_endpoint((*p)->src(), true);
-    gr_endpoint dst_endp = resolve_endpoint((*p)->dst(), false);
+    gr_endpoint src_endp = resolve_endpoint((*p)->src(), false);
+    gr_endpoint dst_endp = resolve_endpoint((*p)->dst(), true);
     sfg->connect(src_endp, dst_endp);
   }
 

Modified: 
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
       2007-04-27 19:00:11 UTC (rev 5157)
+++ 
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
       2007-04-27 20:30:46 UTC (rev 5158)
@@ -48,7 +48,7 @@
     void assign_input(int my_port, int port, gr_basic_block_sptr block);
     void assign_output(int my_port, int port, gr_basic_block_sptr block);
     void flatten(gr_simple_flowgraph_sptr sfg);
-    gr_endpoint match_endpoint(const gr_endpoint &endp, bool is_input);
+    gr_endpoint resolve_port(int port, bool is_input);
     gr_endpoint resolve_endpoint(const gr_endpoint &endp, bool is_input);
 
 public:





reply via email to

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