commit-gnuradio
[Top][All Lists]
Advanced

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

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


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

Author: jcorgan
Date: 2006-11-20 11:42:54 -0700 (Mon, 20 Nov 2006)
New Revision: 4008

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
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
Log:
Work in progress, validation of simple flowgraph

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-20 17:47:29 UTC (rev 4007)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.cc
       2006-11-20 18:42:54 UTC (rev 4008)
@@ -134,12 +134,84 @@
 void
 gr_simple_flowgraph_detail::validate()
 {
-    if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
-       std::cout << "gr_simple_flowgraph_detail::validate()" << std::endl;
-
     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::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
+
+       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");
     }
 }
+
+std::vector<int>
+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::vector<int> tmp, result;
+    std::insert_iterator<std::vector<int> > inserter(result, result.begin());
+    
+    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());
+    }
+    
+    // remove duplicates
+    std::sort(tmp.begin(), tmp.end());
+    std::unique_copy(tmp.begin(), tmp.end(), inserter);
+
+    if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
+       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_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);
+       }
+    }
+
+    return result;    // assumes no duplicates
+}
+
+void
+gr_simple_flowgraph_detail::check_contiguity(gr_block_sptr block,
+                                            const std::vector<int> &used_ports,
+                                            bool check_inputs)
+{
+    if (GR_SIMPLE_FLOWGRAPH_DETAIL_DEBUG)
+       std::cout << "Checking " << (check_inputs ? "input " : "output ")
+                 << "contiguity..." << std::endl;
+
+    // Incomplete, do stuff here
+}

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-20 17:47:29 UTC (rev 4007)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_simple_flowgraph_detail.h
        2006-11-20 18:42:54 UTC (rev 4008)
@@ -76,7 +76,14 @@
     void check_type_match(gr_block_sptr src_block, int src_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, 
+                          bool check_inputs);
+                         
 public:
     ~gr_simple_flowgraph_detail();
 };

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-20 17:47:29 UTC (rev 4007)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_simple_flowgraph.py
       2006-11-20 18:42:54 UTC (rev 4008)
@@ -111,7 +111,7 @@
        sfg.connect("nop1", 0, "dst1", 0)
        sfg.connect("nop1", 1, "dst2", 0)
        sfg.validate ()
-    """                                                                        
               
+                                                                               
       
     def test_015_validate(self):
        sfg = gr.simple_flowgraph()
        sfg.define_component("src1", gr.null_source (gr.sizeof_int))
@@ -154,7 +154,7 @@
        #sfg.validate
        #self.assertRaises(RuntimeError,
        #    lambda: sfg.disconnect("src1", 0, "nop1", 1))
-    """                                                                        
               
+                                                                               
       
     
 if __name__ == "__main__":
     gr_unittest.main()





reply via email to

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