[Top][All Lists]
[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()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r3895 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr,
jcorgan <=