commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r4013 - gnuradio/branches/developers/jcorgan/hier/gnur


From: jcorgan
Subject: [Commit-gnuradio] r4013 - gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime
Date: Tue, 21 Nov 2006 16:12:42 -0700 (MST)

Author: jcorgan
Date: 2006-11-21 16:12:42 -0700 (Tue, 21 Nov 2006)
New Revision: 4013

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.h
Log:
Work in progress.

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-21 20:22:13 UTC (rev 4012)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
       2006-11-21 23:12:42 UTC (rev 4013)
@@ -258,7 +258,7 @@
     // 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 << "Assigning details to " << 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();
@@ -268,7 +268,31 @@
        p->second->set_detail(detail);
     }
 
-    // Connect inputs to outputs
+    // 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;
+
+       // 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);
+
+           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));
+       }
+    }
 }
 
 gr_buffer_sptr
@@ -314,3 +338,15 @@
     unique_copy(tmp.begin(), tmp.end(), inserter);
     return result;
 }
+
+gr_edge_vector_t
+gr_simple_flowgraph_detail::calc_upstream_edges(const std::string &name)
+{
+    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);
+
+    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-21 20:22:13 UTC (rev 4012)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
        2006-11-21 23:12:42 UTC (rev 4013)
@@ -89,6 +89,7 @@
     void setup_connections();
     gr_buffer_sptr allocate_buffer(const std::string &name, int port);
     gr_block_vector_t calc_downstream_blocks(const std::string &name, int 
port);
+    gr_edge_vector_t calc_upstream_edges(const std::string &name);
     
 public:
     ~gr_simple_flowgraph_detail();





reply via email to

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