commit-gnuradio
[Top][All Lists]
Advanced

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

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


From: jcorgan
Subject: [Commit-gnuradio] r3760 - gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native
Date: Mon, 9 Oct 2006 23:56:21 -0600 (MDT)

Author: jcorgan
Date: 2006-10-09 23:56:21 -0600 (Mon, 09 Oct 2006)
New Revision: 3760

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.

Implemented gr_flow_graph::validate() and sub-functions.


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 03:34:42 UTC (rev 3759)
+++ 
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.cc
      2006-10-10 05:56:21 UTC (rev 3760)
@@ -135,6 +135,7 @@
     gr_block_vector_iterator_t block;
     gr_edge_vector_iterator_t edge;
 
+    // TODO: use sort() and unique() instead
     for(edge = d_edges.begin(); edge != d_edges.end(); edge++) {
        gr_block_sptr src_block = edge->first.first;
        gr_block_sptr dst_block = edge->second.first;
@@ -153,8 +154,77 @@
 
 void gr_flow_graph::validate()
 {
+    gr_block_vector_iterator_t block;
+    for(block = d_blocks.begin(); block != d_blocks.end(); block++) {
+       std::vector<int> used_inputs = calc_used_inputs(*block);
+       std::vector<int> used_outputs = calc_used_outputs(*block);
+
+       int ninputs = check_contiguity(*block, (*block)->input_signature(), 
used_inputs);
+       int noutputs = check_contiguity(*block, (*block)->output_signature(), 
used_outputs);
+       
+       printf("%i %i\n", used_inputs.size(), used_outputs.size());
+
+       if (!(*block)->check_topology(ninputs, noutputs))
+           throw std::invalid_argument("gr_flow_graph::validate");
+    }
 }
 
+std::vector<int> gr_flow_graph::calc_used_inputs(gr_block_sptr block)
+{
+    gr_edge_vector_iterator_t edge;
+    std::vector<int> result;
+    
+    for(edge = d_edges.begin(); edge != d_edges.end(); edge++) {
+       gr_block_sptr dst_block = edge->second.first;
+       if (dst_block == block)
+           result.push_back(edge->second.second);
+    }
+    
+    return result;
+}
+
+std::vector<int> gr_flow_graph::calc_used_outputs(gr_block_sptr block)
+{
+    gr_edge_vector_iterator_t edge;
+    std::vector<int> result;
+    
+    for(edge = d_edges.begin(); edge != d_edges.end(); edge++) {
+       gr_block_sptr src_block = edge->first.first;
+       if (src_block == block)
+           result.push_back(edge->first.second);
+    }
+    
+    return result;
+}
+
+int gr_flow_graph::check_contiguity(gr_block_sptr block, gr_io_signature_sptr 
sig,
+                                    std::vector<int> used_ports)
+{
+    sort(used_ports.begin(), used_ports.end());
+    unique(used_ports.begin(), used_ports.end());
+
+    int min_s = sig->min_streams();
+    int l = used_ports.size();
+    
+    if (l == 0) {
+       if (min_s == 0)
+           return 0;
+       else
+           throw std::invalid_argument("gr_flow_graph::check_contiguity");
+    }
+
+    if (used_ports[l-1]+1 < min_s)
+       throw std::invalid_argument("gr_flow_graph::check_contiguity");
+       
+    if (used_ports[l-1]+1 != l) {
+       for (int i = 0; i < l; i++)
+           if (used_ports[i] != i)
+               throw std::invalid_argument("gr_flow_graph::check_contiguity");
+    }
+
+    return l;
+}
+
 void gr_flow_graph::assign_details()
 {
 }

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 03:34:42 UTC (rev 3759)
+++ 
gnuradio/branches/developers/jcorgan/cppwrap/gnuradio-examples/native/gr_flow_graph.h
       2006-10-10 05:56:21 UTC (rev 3760)
@@ -50,6 +50,10 @@
     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();





reply via email to

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