commit-gnuradio
[Top][All Lists]
Advanced

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

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


From: jcorgan
Subject: [Commit-gnuradio] r3895 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr
Date: Sun, 29 Oct 2006 20:58:35 -0700 (MST)

Author: jcorgan
Date: 2006-10-29 20:58:35 -0700 (Sun, 29 Oct 2006)
New Revision: 3895

Modified:
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
   
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
Log:
Work in progress.

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   2006-10-30 00:38:07 UTC (rev 3894)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
   2006-10-30 03:58:35 UTC (rev 3895)
@@ -55,5 +55,49 @@
 
 void gr_hier_block2::connect(const std::string from_name, int from_port, const 
std::string to_name, int to_port)
 {
-    d_impl->connect_prim(from_name, from_port, to_name, to_port);
+    /* Need to validate the following:
+
+       from_name is either "self-in" or a defined component (done)
+       to_name is either "self-out" or a defined component (done)
+       from_port is valid for from_name (done)
+       to_port is valid for to_name (done)
+       to_name:to_port is not already in use
+       from_name:from_port is same type as to_name:to_port
+    */
+
+    gr_basic_block_sptr from_block;
+    gr_basic_block_sptr to_block;
+    gr_io_signature_sptr from_io_signature;
+    gr_io_signature_sptr to_io_signature;
+
+    // Check against our *input_signature* if we're wiring from one of our 
external inputs
+    if (from_name != "self-in") {
+       from_block = d_impl->lookup_component(from_name);
+       if (!from_block)
+           throw std::invalid_argument("Undefined from name");
+       from_io_signature = from_block->output_signature();
+    }
+    else {
+       from_block = shared_from_this();
+       from_io_signature = input_signature();
+    }
+    
+    // Check against our *output_signature* if we're wiring to one of our 
external outputs
+    if (to_name != "self-out") {
+       to_block = d_impl->lookup_component(to_name);
+       if (!to_block)
+           throw std::invalid_argument("Undefined to name");
+       to_io_signature = to_block->output_signature();
+    }
+    else {
+       to_block = shared_from_this();
+       to_io_signature = output_signature();
+    }
+    
+    // Check port numbers are valid
+    d_impl->check_valid_port(from_io_signature, from_port);
+    d_impl->check_valid_port(to_io_signature, to_port);
+
+    // Check destination port not already in use
+    d_impl->check_dest_not_used(from_block, from_port);
 }

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
      2006-10-30 00:38:07 UTC (rev 3894)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
      2006-10-30 03:58:35 UTC (rev 3895)
@@ -25,6 +25,7 @@
 #endif
 
 #include <gr_hier_block2_impl.h>
+#include <gr_io_signature.h>
 #include <iostream>
 
 gr_hier_block2_impl::gr_hier_block2_impl()
@@ -37,7 +38,7 @@
 
 void gr_hier_block2_impl::define_component(const std::string &name, 
gr_basic_block_sptr basic_block)
 {
-    if (name == "input" || name == "output")
+    if (name == "self-in" || name == "self-out")
        throw std::invalid_argument("name is reserved");
 
     if (lookup_component(name))
@@ -71,23 +72,16 @@
     return std::string("");
 }
 
-void gr_hier_block2_impl::connect_prim(const std::string &from_name, int 
from_port,
-                                      const std::string &to_name, int to_port)
+void gr_hier_block2_impl::check_valid_port(gr_io_signature_sptr sig, int port)
 {
-    /* Need to validate the following:
+    if (port < 0)
+       throw std::invalid_argument("port number must not be negative");
+       
+    if (sig->max_streams() >= 0 && port >= sig->max_streams())
+       throw std::invalid_argument("port number exceeds max streams");
+}
 
-       from_name is either "input" or a defined component (done)
-       to_name is either "output" or a defined component (done)
-       from_port is valid for from_name
-       to_port is valid for to_name
-       to_name:to_port is not already in use
-       from_name:from_port is same type as to_name:to_port
-    */
-
-    if (from_name != "input" && !lookup_component(from_name))
-       throw std::invalid_argument("Unknown from name");
-
-
-    if (to_name != "output" && !lookup_component(to_name))
-       throw std::invalid_argument("Unknown to name");
+void gr_hier_block2_impl::check_dest_not_used(gr_basic_block_sptr dest_block, 
int port)
+{
+    // NOP, QA should fail
 }

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
       2006-10-30 00:38:07 UTC (rev 3894)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
       2006-10-30 03:58:35 UTC (rev 3895)
@@ -58,9 +58,9 @@
     void define_component(const std::string &name, gr_basic_block_sptr 
basic_block);
     gr_basic_block_sptr lookup_component(const std::string &name);
     std::string lookup_component(gr_basic_block_sptr basic_block);
-    void connect_prim(const std::string &from_name, int from_port,
-                     const std::string &to_name, int to_port);
-            
+    void check_valid_port(gr_io_signature_sptr sig, int port);
+    void check_dest_not_used(gr_basic_block_sptr dest_block, int port);
+                    
 public:
     ~gr_hier_block2_impl();
 };

Modified: 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
===================================================================
--- 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
    2006-10-30 00:38:07 UTC (rev 3894)
+++ 
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
    2006-10-30 03:58:35 UTC (rev 3895)
@@ -37,14 +37,14 @@
                                gr.io_signature(1,1,gr.sizeof_int), 
                                gr.io_signature(1,1,gr.sizeof_int))
        src1 = gr.nop(gr.sizeof_int)
-       self.assertRaises(ValueError, lambda: hblock.define_component("input", 
src1))
+       self.assertRaises(ValueError, lambda: 
hblock.define_component("self-in", src1))
 
     def test_004_define_component_reserved_output(self):
        hblock = gr.hier_block2("test_block", 
                                gr.io_signature(1,1,gr.sizeof_int), 
                                gr.io_signature(1,1,gr.sizeof_int))
        src1 = gr.nop(gr.sizeof_int)
-       self.assertRaises(ValueError, lambda: hblock.define_component("output", 
src1))
+       self.assertRaises(ValueError, lambda: 
hblock.define_component("self-out", src1))
 
     def test_005_define_component_name_in_use(self):
        hblock = gr.hier_block2("test_block", 
@@ -85,7 +85,7 @@
 
        nop1 = gr.nop(gr.sizeof_int)
        hblock.define_component("nop1", nop1)
-       hblock.connect("input", 0, "nop1", 0)
+       hblock.connect("self-in", 0, "nop1", 0)
 
     def test_009_connect_output(self):
        hblock = gr.hier_block2("test_block", 
@@ -94,7 +94,7 @@
 
        nop1 = gr.nop(gr.sizeof_int)
        hblock.define_component("nop1", nop1)
-       hblock.connect("nop1", 0, "output", 0)
+       hblock.connect("nop1", 0, "self-out", 0)
 
     def test_010_connect_unknown_from(self):
        hblock = gr.hier_block2("test_block", 
@@ -103,7 +103,7 @@
 
        nop1 = gr.nop(gr.sizeof_int)
        hblock.define_component("nop1", nop1)
-       self.assertRaises(ValueError, lambda: hblock.connect("nop2", 0, 
"output", 0))
+       self.assertRaises(ValueError, lambda: hblock.connect("nop2", 0, 
"self-out", 0))
     
     def test_011_connect_unknown_to(self):
        hblock = gr.hier_block2("test_block", 
@@ -112,7 +112,54 @@
 
        nop1 = gr.nop(gr.sizeof_int)
        hblock.define_component("nop1", nop1)
-       self.assertRaises(ValueError, lambda: hblock.connect("input", 0, 
"nop2", 0))
+       self.assertRaises(ValueError, lambda: hblock.connect("self-in", 0, 
"nop2", 0))
+
+    def test_012_connect_invalid_from_port_neg(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(1,1,gr.sizeof_int), 
+                               gr.io_signature(1,1,gr.sizeof_int))
+
+       nop1 = gr.nop(gr.sizeof_int)
+       hblock.define_component("nop1", nop1)
+       self.assertRaises(ValueError, lambda: hblock.connect("self-in", -1, 
"nop1", 0))
+
+    def test_013_connect_invalid_from_port_exceeds(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(1,1,gr.sizeof_int), 
+                               gr.io_signature(1,1,gr.sizeof_int))
+
+       nop1 = gr.nop(gr.sizeof_int)
+       hblock.define_component("nop1", nop1)
+       self.assertRaises(ValueError, lambda: hblock.connect("self-in", 1, 
"nop1", 0))
     
+    def test_014_connect_invalid_to_port_neg(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(1,1,gr.sizeof_int), 
+                               gr.io_signature(1,1,gr.sizeof_int))
+
+       nop1 = gr.nop(gr.sizeof_int)
+       hblock.define_component("nop1", nop1)
+       self.assertRaises(ValueError, lambda: hblock.connect("self-in", -1, 
"nop1", 0))
+
+    def test_015_connect_invalid_to_port_exceeds(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(1,1,gr.sizeof_int), 
+                               gr.io_signature(1,1,gr.sizeof_int))
+
+       nop1 = gr.nop(gr.sizeof_int)
+       hblock.define_component("nop1", nop1)
+       self.assertRaises(ValueError, lambda: hblock.connect("self-in", 1, 
"nop1", 0))
+
+    def test_016_connect_dest_port_in_use(self):
+       hblock = gr.hier_block2("test_block", 
+                               gr.io_signature(1,1,gr.sizeof_int), 
+                               gr.io_signature(1,1,gr.sizeof_int))
+
+       nop1 = gr.nop(gr.sizeof_int)
+       hblock.define_component("nop1", nop1)
+       hblock.connect("nop1", 0, "self-out", 0);
+       self.assertRaises(ValueError, lambda: hblock.connect("nop1", 0, 
"self-out", 0))
+    
+    
 if __name__ == "__main__":
     gr_unittest.main()





reply via email to

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