[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r5158 - gnuradio/branches/developers/jcorgan/hb/gnurad
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r5158 - gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime |
Date: |
Fri, 27 Apr 2007 14:30:47 -0600 (MDT) |
Author: jcorgan
Date: 2007-04-27 14:30:46 -0600 (Fri, 27 Apr 2007)
New Revision: 5158
Modified:
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
Log:
Work in progress.
Modified:
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
2007-04-27 19:00:11 UTC (rev 5157)
+++
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
2007-04-27 20:30:46 UTC (rev 5158)
@@ -66,33 +66,15 @@
gr_hier_block2_detail::disconnect(gr_basic_block_sptr src, int src_port,
gr_basic_block_sptr dst, int dst_port)
{
+ // Handle disconnecting inputs and outputs
+
d_fg->disconnect(src, src_port, dst, dst_port);
}
-gr_endpoint
-gr_hier_block2_detail::match_endpoint(const gr_endpoint &endp, bool is_input)
-{
- for (gr_edge_viter_t p = d_fg->d_detail->d_edges.begin(); p !=
d_fg->d_detail->d_edges.end(); p++) {
- if (is_input) {
- if ((*p)->src().block().get() == (gr_hier_block2 *)d_owner &&
- (*p)->src().port() == endp.port())
- return resolve_endpoint((*p)->dst(), !is_input);
- }
- else {
- if ((*p)->dst().block().get() == (gr_hier_block2 *)d_owner &&
- (*p)->dst().port() == endp.port())
- return resolve_endpoint((*p)->src(), !is_input);
- }
- }
-
- // Should never get here
- throw std::runtime_error("unable to match endpoint");
-}
-
void
gr_hier_block2_detail::assign_input(int my_port, int port, gr_basic_block_sptr
block)
{
- if (port < 0 || port >= (signed)d_inputs.size())
+ if (my_port < 0 || my_port >= (signed)d_inputs.size())
throw std::invalid_argument("input port number out of range");
d_inputs[my_port] = gr_endpoint(block, port);
@@ -101,13 +83,28 @@
void
gr_hier_block2_detail::assign_output(int my_port, int port,
gr_basic_block_sptr block)
{
- if (port < 0 || port >= (signed)d_outputs.size())
+ if (my_port < 0 || my_port >= (signed)d_outputs.size())
throw std::invalid_argument("output port number out of range");
d_outputs[my_port] = gr_endpoint(block, port);
}
gr_endpoint
+gr_hier_block2_detail::resolve_port(int port, bool is_input)
+{
+ if (is_input) {
+ if (port < 0 || port >= d_inputs.size())
+ throw std::runtime_error("input port number out of range");
+ return resolve_endpoint(d_inputs[port], true);
+ }
+ else {
+ if (port < 0 || port >= d_outputs.size())
+ throw std::runtime_error("output port number out of range");
+ return resolve_endpoint(d_outputs[port], false);
+ }
+}
+
+gr_endpoint
gr_hier_block2_detail::resolve_endpoint(const gr_endpoint &endp, bool is_input)
{
// Check if endpoint is a leaf node
@@ -117,7 +114,7 @@
// Check if endpoint is a hierarchical block
gr_hier_block2_sptr hier_block2(boost::dynamic_pointer_cast<gr_hier_block2,
gr_basic_block>(endp.block()));
if (hier_block2)
- return hier_block2->d_detail->match_endpoint(endp, !is_input);
+ return hier_block2->d_detail->resolve_port(endp.port(), is_input);
// Shouldn't ever get here
throw std::runtime_error("unable to resolve endpoint");
@@ -128,15 +125,8 @@
{
// Add my edges to the flow graph, resolving references to actual endpoints
for (gr_edge_viter_t p = d_fg->d_detail->d_edges.begin(); p !=
d_fg->d_detail->d_edges.end(); p++) {
- // Connections to self get resolved/added by parent if actually connected
- if ((*p)->src().block().get() == (gr_hier_block2 *)d_owner ||
- (*p)->dst().block().get() == (gr_hier_block2 *)d_owner)
- continue;
-
- // TODO: Silently ignore connections to "NC" (not implemented yed)
-
- gr_endpoint src_endp = resolve_endpoint((*p)->src(), true);
- gr_endpoint dst_endp = resolve_endpoint((*p)->dst(), false);
+ gr_endpoint src_endp = resolve_endpoint((*p)->src(), false);
+ gr_endpoint dst_endp = resolve_endpoint((*p)->dst(), true);
sfg->connect(src_endp, dst_endp);
}
Modified:
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
===================================================================
---
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
2007-04-27 19:00:11 UTC (rev 5157)
+++
gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
2007-04-27 20:30:46 UTC (rev 5158)
@@ -48,7 +48,7 @@
void assign_input(int my_port, int port, gr_basic_block_sptr block);
void assign_output(int my_port, int port, gr_basic_block_sptr block);
void flatten(gr_simple_flowgraph_sptr sfg);
- gr_endpoint match_endpoint(const gr_endpoint &endp, bool is_input);
+ gr_endpoint resolve_port(int port, bool is_input);
gr_endpoint resolve_endpoint(const gr_endpoint &endp, bool is_input);
public:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5158 - gnuradio/branches/developers/jcorgan/hb/gnuradio-core/src/lib/runtime,
jcorgan <=