[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r3896 - in gnuradio/branches/developers/jcorgan/hier/g
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r3896 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr |
Date: |
Mon, 30 Oct 2006 12:26:57 -0700 (MST) |
Author: jcorgan
Date: 2006-10-30 12:26:57 -0700 (Mon, 30 Oct 2006)
New Revision: 3896
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 03:58:35 UTC (rev 3895)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2.cc
2006-10-30 19:26:57 UTC (rev 3896)
@@ -26,6 +26,7 @@
#include <gr_hier_block2.h>
#include <gr_hier_block2_impl.h>
+#include <gr_io_signature.h>
#include <iostream>
gr_hier_block2_sptr gr_make_hier_block2(const std::string name,
@@ -53,51 +54,43 @@
d_impl->define_component(name, basic_block);
}
-void gr_hier_block2::connect(const std::string from_name, int from_port, const
std::string to_name, int to_port)
+void gr_hier_block2::connect(const std::string src_name, int src_port, const
std::string dst_name, int dst_port)
{
- /* Need to validate the following:
+ gr_io_signature_sptr src_io_signature;
+ gr_io_signature_sptr dst_io_signature;
- 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)
+ if (src_name != "self-in") {
+ gr_basic_block_sptr src_block = d_impl->lookup_component(src_name);
+ if (!src_block)
throw std::invalid_argument("Undefined from name");
- from_io_signature = from_block->output_signature();
+ src_io_signature = src_block->output_signature();
}
- else {
- from_block = shared_from_this();
- from_io_signature = input_signature();
- }
+ else
+ src_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)
+ if (dst_name != "self-out") {
+ gr_basic_block_sptr dst_block = d_impl->lookup_component(dst_name);
+ if (!dst_block)
throw std::invalid_argument("Undefined to name");
- to_io_signature = to_block->output_signature();
+ dst_io_signature = dst_block->output_signature();
}
- else {
- to_block = shared_from_this();
- to_io_signature = output_signature();
- }
+ else
+ dst_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);
+ d_impl->check_valid_port(src_io_signature, src_port);
+ d_impl->check_valid_port(dst_io_signature, dst_port);
// Check destination port not already in use
- d_impl->check_dest_not_used(from_block, from_port);
+ d_impl->check_dst_not_used(dst_name, dst_port);
+
+ // Make sure endpoints have the same stream size
+ if (src_io_signature->sizeof_stream_item(src_port) !=
+ dst_io_signature->sizeof_stream_item(dst_port))
+ throw std::invalid_argument("type mismatch");
+
+ gr_connection connection(gr_endpoint(src_name, src_port),
gr_endpoint(dst_name, dst_port));
+ d_impl->d_connections.push_back(connection);
}
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 03:58:35 UTC (rev 3895)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.cc
2006-10-30 19:26:57 UTC (rev 3896)
@@ -81,7 +81,12 @@
throw std::invalid_argument("port number exceeds max streams");
}
-void gr_hier_block2_impl::check_dest_not_used(gr_basic_block_sptr dest_block,
int port)
+void gr_hier_block2_impl::check_dst_not_used(const std::string name, int port)
{
- // NOP, QA should fail
+ for (std::vector<gr_connection>::const_iterator p = d_connections.begin();
+ p != d_connections.end(); p++) {
+
+ if (p->dst().name() == name && p->dst().port() == port)
+ throw std::invalid_argument("destination port in use");
+ }
}
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 03:58:35 UTC (rev 3895)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/lib/runtime/gr_hier_block2_impl.h
2006-10-30 19:26:57 UTC (rev 3896)
@@ -27,6 +27,7 @@
#include <gr_basic_block.h>
#include <stdexcept>
+#include <iostream>
// This beats the hell out of using pairs
class gr_hier_component
@@ -43,6 +44,34 @@
gr_basic_block_sptr basic_block() const { return d_basic_block; }
};
+class gr_endpoint
+{
+private:
+ std::string d_name;
+ int d_port;
+
+public:
+ gr_endpoint(const std::string &name, int port)
+ : d_name(name), d_port(port) {}
+
+ std::string name() const { return d_name; }
+ int port() const { return d_port; }
+};
+
+class gr_connection
+{
+private:
+ gr_endpoint d_src;
+ gr_endpoint d_dst;
+
+public:
+ gr_connection(gr_endpoint src, gr_endpoint dst)
+ : d_src(src), d_dst(dst) {}
+
+ gr_endpoint src() const { return d_src; }
+ gr_endpoint dst() const { return d_dst; }
+};
+
class gr_hier_block2_impl
{
private:
@@ -54,15 +83,30 @@
gr_hier_block2_impl &operator=(const gr_hier_block2_impl &rhs);
std::vector<gr_hier_component> d_components;
-
+ std::vector<gr_connection> d_connections;
+
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 check_valid_port(gr_io_signature_sptr sig, int port);
- void check_dest_not_used(gr_basic_block_sptr dest_block, int port);
+ void check_dst_not_used(const std::string name, int port);
public:
~gr_hier_block2_impl();
};
+#if GR_HIER_BLOCK2_IMPL_DEBUG
+inline std::ostream &operator << (std::ostream &os, const gr_endpoint endpoint)
+{
+ os << endpoint.name() << ":" << endpoint.port();
+ return os;
+}
+
+inline std::ostream &operator << (std::ostream &os, const gr_connection
connection)
+{
+ os << connection.src() << "->" << connection.dst();
+ return os;
+}
+#endif /* GR_HIER_BLOCK2_IMPL_DEBUG */
+
#endif /* INCLUDED_GR_HIER_BLOCK2_H */
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 03:58:35 UTC (rev 3895)
+++
gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src/python/gnuradio/gr/qa_hier_block2.py
2006-10-30 19:26:57 UTC (rev 3896)
@@ -160,6 +160,15 @@
hblock.connect("nop1", 0, "self-out", 0);
self.assertRaises(ValueError, lambda: hblock.connect("nop1", 0,
"self-out", 0))
+ def test_017_connect_type_mismatch(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_char)
+ hblock.define_component("nop1", nop1)
+ 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] r3896 - in gnuradio/branches/developers/jcorgan/hier/gnuradio-core/src: lib/runtime python/gnuradio/gr,
jcorgan <=