[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] r5129 - gnuradio/branches/developers/jcorgan/hier2/gnu
From: |
jcorgan |
Subject: |
[Commit-gnuradio] r5129 - gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime |
Date: |
Thu, 26 Apr 2007 14:02:35 -0600 (MDT) |
Author: jcorgan
Date: 2007-04-26 14:02:35 -0600 (Thu, 26 Apr 2007)
New Revision: 5129
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
Log:
Work in progress, still debugging.
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
2007-04-26 19:35:28 UTC (rev 5128)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc
2007-04-26 20:02:35 UTC (rev 5129)
@@ -29,9 +29,13 @@
#include <stdexcept>
#include <iostream>
+#define GR_HIER_BLOCK2_DETAIL_DEBUG 1
+
gr_hier_block2_detail::gr_hier_block2_detail(gr_hier_block2 *owner) :
d_owner(owner),
- d_fg(gr_make_simple_flowgraph())
+ d_fg(gr_make_simple_flowgraph()),
+ d_inputs(owner->input_signature()->max_streams()),
+ d_outputs(owner->output_signature()->max_streams())
{
}
@@ -44,6 +48,15 @@
gr_hier_block2_detail::connect(gr_basic_block_sptr src, int src_port,
gr_basic_block_sptr dst, int dst_port)
{
+ if (src.get() == dst.get())
+ throw std::runtime_error("src and destination blocks cannot be the same");
+
+ if (src.get() == d_owner)
+ return assign_output(src_port, dst_port, dst);
+
+ if (dst.get() == d_owner)
+ return assign_input(dst_port, src_port, src);
+
d_fg->connect(src, src_port, dst, dst_port);
// TODO: connects to NC
@@ -76,6 +89,24 @@
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())
+ throw std::invalid_argument("input port number out of range");
+
+ d_inputs[my_port] = gr_endpoint(block, port);
+}
+
+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())
+ 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_endpoint(const gr_endpoint &endp, bool is_input)
{
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
2007-04-26 19:35:28 UTC (rev 5128)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.h
2007-04-26 20:02:35 UTC (rev 5129)
@@ -37,13 +37,16 @@
// Private implementation data
gr_hier_block2 *d_owner;
gr_simple_flowgraph_sptr d_fg;
+ gr_endpoint_vector_t d_inputs;
+ gr_endpoint_vector_t d_outputs;
// Private implementation methods
void connect(gr_basic_block_sptr src, int src_port,
gr_basic_block_sptr dst, int dst_port);
void disconnect(gr_basic_block_sptr, int src_port,
gr_basic_block_sptr, int dst_port);
-
+ 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_endpoint(const gr_endpoint &endp, bool is_input);
Modified:
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
===================================================================
---
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
2007-04-26 19:35:28 UTC (rev 5128)
+++
gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime/gr_simple_flowgraph.h
2007-04-26 20:02:35 UTC (rev 5129)
@@ -34,15 +34,19 @@
class gr_endpoint
{
private:
+ friend class gr_hier_block2_detail;
gr_basic_block_sptr d_block;
int d_port;
public:
+ gr_endpoint() : d_block(), d_port(0) { } // Internal use only
gr_endpoint(gr_basic_block_sptr block, int port) { d_block = block; d_port =
port; }
gr_basic_block_sptr block() const { return d_block; }
int port() const { return d_port; }
};
+typedef std::vector<gr_endpoint> gr_endpoint_vector_t;
+
/*!
*\brief Class representing a low-level, "flattened" flow graph
*
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] r5129 - gnuradio/branches/developers/jcorgan/hier2/gnuradio-core/src/lib/runtime,
jcorgan <=