commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r3767 - gnuradio/branches/developers/jcorgan/cppwrap/g


From: jcorgan
Subject: [Commit-gnuradio] r3767 - gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native
Date: Tue, 10 Oct 2006 14:06:34 -0600 (MDT)

Author: jcorgan
Date: 2006-10-10 14:06:34 -0600 (Tue, 10 Oct 2006)
New Revision: 3767

Modified:
   
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.cc
   
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.h
Log:
Work in progress.

Code reorganization and consolidation.  In Python, loops over list
members are cheap and easy.  In C++, they aren't, so several individual
methods which do so are now consolidated into one processing loop.


Modified: 
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.cc
      2006-10-10 19:35:52 UTC (rev 3766)
+++ 
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.cc
      2006-10-10 20:06:34 UTC (rev 3767)
@@ -74,13 +74,8 @@
 {
     gr_edge_vector_iterator_t edge_iter;
     for(edge_iter = d_edges.begin(); edge_iter != d_edges.end(); edge_iter++) {
-       // For readability
-       gr_block_sptr dst_block = dst.first;
-       gr_block_sptr edge_block = edge_iter->second.first;
-       int dst_port = dst.second;
-       int edge_port = edge_iter->second.second;
-       
-       if (dst_block == edge_block && dst_port == edge_port)
+       gr_endpoint_t endp = edge_iter->second;
+       if (endp == dst)
            throw std::invalid_argument("gr_flow_graph::check_dst_not_used");
     }
 }
@@ -121,15 +116,6 @@
     d_edges.clear();
 }
 
-void gr_flow_graph::setup_connections()
-{
-    create_block_list();
-    validate();
-    assign_details();
-    assign_buffers();
-    connect_inputs();
-}
-
 void gr_flow_graph::create_block_list()
 {
     gr_block_vector_iterator_t block_iter;
@@ -150,63 +136,68 @@
     }
 }
 
-void gr_flow_graph::validate()
+void gr_flow_graph::connect_blocks()
 {
     gr_block_vector_iterator_t block_iter;
     for(block_iter = d_blocks.begin(); block_iter != d_blocks.end(); 
block_iter++) {
-       std::vector<int> used_inputs = calc_used_inputs(*block_iter);
-       std::vector<int> used_outputs = calc_used_outputs(*block_iter);
+       std::vector<int> used_inputs = calc_used_ports(*block_iter, false);
+       std::vector<int> used_outputs = calc_used_ports(*block_iter, true);
 
-       int ninputs = check_contiguity(*block_iter, 
(*block_iter)->input_signature(), used_inputs);
-       int noutputs = check_contiguity(*block_iter, 
(*block_iter)->output_signature(), used_outputs);
+       check_contiguity(*block_iter, (*block_iter)->input_signature(), 
used_inputs);
+       check_contiguity(*block_iter, (*block_iter)->output_signature(), 
used_outputs);
        
+       int ninputs = used_inputs.size();
+       int noutputs = used_outputs.size();
+
        if (!(*block_iter)->check_topology(ninputs, noutputs))
            throw std::invalid_argument("gr_flow_graph::validate");
-    }
-}
 
-// TODO: consolidate this and the next into one method
-std::vector<int> gr_flow_graph::calc_used_inputs(gr_block_sptr block)
-{
-    gr_edge_vector_iterator_t edge_iter;
-    std::vector<int> result;
-    
-    for(edge_iter = d_edges.begin(); edge_iter != d_edges.end(); edge_iter++) {
-       gr_block_sptr dst_block = edge_iter->second.first;
-       if (dst_block == block)
-           result.push_back(edge_iter->second.second);
+       // Block is good, now do per block processing
+
+       // 'assign_details' functionality here
+       printf("Assigning detail with %i inputs and %i outputs\n", ninputs, 
noutputs);
+       (*block_iter)->set_detail(gr_make_block_detail(ninputs, noutputs));
+
+       // 'assign_buffers' functionality here
+       
+       // 'connect_inputs' functionality here
     }
-    
-    sort(result.begin(), result.end());
-    unique(result.begin(), result.end());
-    return result;
 }
 
-std::vector<int> gr_flow_graph::calc_used_outputs(gr_block_sptr block)
+std::vector<int> gr_flow_graph::calc_used_ports(gr_block_sptr block, bool 
direction)
 {
     gr_edge_vector_iterator_t edge_iter;
     std::vector<int> result;
-    
+    gr_block_sptr cmp_block;
+        
     for(edge_iter = d_edges.begin(); edge_iter != d_edges.end(); edge_iter++) {
-       gr_block_sptr src_block = edge_iter->first.first;
-       if (src_block == block)
-           result.push_back(edge_iter->first.second);
+       if (!direction) { // inputs
+           cmp_block = edge_iter->second.first;
+           if (cmp_block == block)
+               result.push_back(edge_iter->second.second);
+       }
+       else { // outputs
+           cmp_block = edge_iter->first.first;
+           if (cmp_block == block)
+               result.push_back(edge_iter->first.second);
+       }
     }
     
+    // Remove duplicates
     sort(result.begin(), result.end());
     unique(result.begin(), result.end());
     return result;
 }
 
-int gr_flow_graph::check_contiguity(gr_block_sptr block, gr_io_signature_sptr 
sig,
-                                   std::vector<int> used_ports)
+void gr_flow_graph::check_contiguity(gr_block_sptr block, gr_io_signature_sptr 
sig,
+                                    std::vector<int> &used_ports)
 {
     int min_s = sig->min_streams();
     int l = used_ports.size();
     
     if (l == 0) {
        if (min_s == 0)
-           return 0;
+           return;
        else
            throw std::invalid_argument("gr_flow_graph::check_contiguity");
     }
@@ -219,34 +210,13 @@
            if (used_ports[i] != i)
                throw std::invalid_argument("gr_flow_graph::check_contiguity");
     }
-
-    return l;
 }
 
-void gr_flow_graph::assign_details()
-{
-    gr_block_vector_iterator_t block_iter;
-    for(block_iter = d_blocks.begin(); block_iter != d_blocks.end(); 
block_iter++) {
-       int ninputs = calc_used_inputs(*block_iter).size();
-       int noutputs = calc_used_outputs(*block_iter).size();
-
-       printf("Assigning detail with %i inputs and %i outputs\n", ninputs, 
noutputs);
-       (*block_iter)->set_detail(gr_make_block_detail(ninputs, noutputs));
-    }
-}
-
-void gr_flow_graph::assign_buffers()
-{
-}
-
-void gr_flow_graph::connect_inputs()
-{
-}
-
 void gr_flow_graph::start()
 {
     // TODO: check if already started
-    setup_connections();
+    create_block_list();
+    connect_blocks();
     // TODO: instantiate scheduler and call it with block list
 
     printf("If this were a real program, something interesting would have just 
happened.\n");

Modified: 
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.h
       2006-10-10 19:35:52 UTC (rev 3766)
+++ 
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.h
       2006-10-10 20:06:34 UTC (rev 3767)
@@ -47,17 +47,12 @@
     void check_dst_not_used(gr_endpoint_t dst);
     void check_type_match(gr_endpoint_t src, gr_endpoint_t dst);
     void disconnect_prim(gr_endpoint_t src, gr_endpoint_t dst);
-    void setup_connections();
     void create_block_list();
-    void validate();
-    std::vector<int> calc_used_inputs(gr_block_sptr block);
-    std::vector<int> calc_used_outputs(gr_block_sptr block);
-    int check_contiguity(gr_block_sptr block, gr_io_signature_sptr sig,
-                        std::vector<int> used_ports);
-    void assign_details();
-    void assign_buffers();
-    void connect_inputs();
-        
+    void connect_blocks();
+    std::vector<int> calc_used_ports(gr_block_sptr block, bool direction);
+    void check_contiguity(gr_block_sptr block, gr_io_signature_sptr sig,
+                         std::vector<int> &used_ports);
+
     gr_edge_vector_t  d_edges;
     gr_block_vector_t d_blocks;
                             





reply via email to

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