summaryrefslogtreecommitdiff
path: root/gnuradio-runtime/lib/hier_block2_detail.cc
diff options
context:
space:
mode:
authorMarcus Müller <mmueller@gnuradio.org>2019-08-07 21:45:12 +0200
committerMarcus Müller <marcus@hostalia.de>2019-08-09 23:04:28 +0200
commitf7bbf2c1d8d780294f3e016aff239ca35eb6516e (patch)
treee09ab6112e02b2215b2d59ac24d3d6ea2edac745 /gnuradio-runtime/lib/hier_block2_detail.cc
parent78431dc6941e3acc67c858277dfe4a0ed583643c (diff)
Tree: clang-format without the include sorting
Diffstat (limited to 'gnuradio-runtime/lib/hier_block2_detail.cc')
-rw-r--r--gnuradio-runtime/lib/hier_block2_detail.cc1175
1 files changed, 577 insertions, 598 deletions
diff --git a/gnuradio-runtime/lib/hier_block2_detail.cc b/gnuradio-runtime/lib/hier_block2_detail.cc
index dbf519b6ef..38925330cb 100644
--- a/gnuradio-runtime/lib/hier_block2_detail.cc
+++ b/gnuradio-runtime/lib/hier_block2_detail.cc
@@ -35,141 +35,145 @@ namespace gr {
#define HIER_BLOCK2_DETAIL_DEBUG 0
- hier_block2_detail::hier_block2_detail(hier_block2 *owner)
- : d_owner(owner),
- d_parent_detail(0),
- d_fg(make_flowgraph())
- {
+hier_block2_detail::hier_block2_detail(hier_block2* owner)
+ : d_owner(owner), d_parent_detail(0), d_fg(make_flowgraph())
+{
int min_inputs = owner->input_signature()->min_streams();
int max_inputs = owner->input_signature()->max_streams();
int min_outputs = owner->output_signature()->min_streams();
int max_outputs = owner->output_signature()->max_streams();
- if(max_inputs == io_signature::IO_INFINITE ||
- max_outputs == io_signature::IO_INFINITE ||
- (min_inputs != max_inputs) ||(min_outputs != max_outputs) ) {
- std::stringstream msg;
- msg << "Hierarchical blocks do not yet support arbitrary or"
- << " variable numbers of inputs or outputs (" << d_owner->name() << ")";
- throw std::runtime_error(msg.str());
+ if (max_inputs == io_signature::IO_INFINITE ||
+ max_outputs == io_signature::IO_INFINITE || (min_inputs != max_inputs) ||
+ (min_outputs != max_outputs)) {
+ std::stringstream msg;
+ msg << "Hierarchical blocks do not yet support arbitrary or"
+ << " variable numbers of inputs or outputs (" << d_owner->name() << ")";
+ throw std::runtime_error(msg.str());
}
d_inputs = std::vector<endpoint_vector_t>(max_inputs);
d_outputs = endpoint_vector_t(max_outputs);
- d_max_output_buffer = std::vector<size_t>(std::max(max_outputs,1), 0);
- d_min_output_buffer = std::vector<size_t>(std::max(max_outputs,1), 0);
- }
+ d_max_output_buffer = std::vector<size_t>(std::max(max_outputs, 1), 0);
+ d_min_output_buffer = std::vector<size_t>(std::max(max_outputs, 1), 0);
+}
- hier_block2_detail::~hier_block2_detail()
- {
+hier_block2_detail::~hier_block2_detail()
+{
d_owner = 0; // Don't use delete, we didn't allocate
- }
+}
- void
- hier_block2_detail::connect(basic_block_sptr block)
- {
+void hier_block2_detail::connect(basic_block_sptr block)
+{
std::stringstream msg;
// Check if duplicate
- if(std::find(d_blocks.begin(), d_blocks.end(), block) != d_blocks.end()) {
- msg << "Block " << block << " already connected.";
- throw std::invalid_argument(msg.str());
+ if (std::find(d_blocks.begin(), d_blocks.end(), block) != d_blocks.end()) {
+ msg << "Block " << block << " already connected.";
+ throw std::invalid_argument(msg.str());
}
// Check if has inputs or outputs
- if(block->input_signature()->max_streams() != 0 ||
- block->output_signature()->max_streams() != 0) {
- msg << "Block " << block << " must not have any input or output ports";
- throw std::invalid_argument(msg.str());
+ if (block->input_signature()->max_streams() != 0 ||
+ block->output_signature()->max_streams() != 0) {
+ msg << "Block " << block << " must not have any input or output ports";
+ throw std::invalid_argument(msg.str());
}
hier_block2_sptr hblock(cast_to_hier_block2_sptr(block));
- if(hblock && hblock.get() != d_owner) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "connect: block is hierarchical, setting parent to " << this << std::endl;
- hblock->d_detail->d_parent_detail = this;
+ if (hblock && hblock.get() != d_owner) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "connect: block is hierarchical, setting parent to " << this
+ << std::endl;
+ hblock->d_detail->d_parent_detail = this;
}
d_blocks.push_back(block);
- }
+}
- void
- hier_block2_detail::connect(basic_block_sptr src, int src_port,
- basic_block_sptr dst, int dst_port)
- {
+void hier_block2_detail::connect(basic_block_sptr src,
+ int src_port,
+ basic_block_sptr dst,
+ int dst_port)
+{
std::stringstream msg;
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "connecting: " << endpoint(src, src_port)
- << " -> " << endpoint(dst, dst_port) << std::endl;
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "connecting: " << endpoint(src, src_port) << " -> "
+ << endpoint(dst, dst_port) << std::endl;
- if(src.get() == dst.get())
- throw std::invalid_argument("connect: src and destination blocks cannot be the same");
+ if (src.get() == dst.get())
+ throw std::invalid_argument(
+ "connect: src and destination blocks cannot be the same");
hier_block2_sptr src_block(cast_to_hier_block2_sptr(src));
hier_block2_sptr dst_block(cast_to_hier_block2_sptr(dst));
- if(src_block && src.get() != d_owner) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "connect: src is hierarchical, setting parent to " << this << std::endl;
- src_block->d_detail->d_parent_detail = this;
+ if (src_block && src.get() != d_owner) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "connect: src is hierarchical, setting parent to " << this
+ << std::endl;
+ src_block->d_detail->d_parent_detail = this;
}
- if(dst_block && dst.get() != d_owner) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "connect: dst is hierarchical, setting parent to " << this << std::endl;
- dst_block->d_detail->d_parent_detail = this;
+ if (dst_block && dst.get() != d_owner) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "connect: dst is hierarchical, setting parent to " << this
+ << std::endl;
+ dst_block->d_detail->d_parent_detail = this;
}
// Connections to block inputs or outputs
int max_port;
- if(src.get() == d_owner) {
- max_port = src->input_signature()->max_streams();
- if((max_port != -1 && (src_port >= max_port)) || src_port < 0) {
- msg << "source port " << src_port << " out of range for " << src;
- throw std::invalid_argument(msg.str());
- }
+ if (src.get() == d_owner) {
+ max_port = src->input_signature()->max_streams();
+ if ((max_port != -1 && (src_port >= max_port)) || src_port < 0) {
+ msg << "source port " << src_port << " out of range for " << src;
+ throw std::invalid_argument(msg.str());
+ }
- return connect_input(src_port, dst_port, dst);
+ return connect_input(src_port, dst_port, dst);
}
- if(dst.get() == d_owner) {
- max_port = dst->output_signature()->max_streams();
- if((max_port != -1 && (dst_port >= max_port)) || dst_port < 0) {
- msg << "destination port " << dst_port << " out of range for " << dst;
- throw std::invalid_argument(msg.str());
- }
+ if (dst.get() == d_owner) {
+ max_port = dst->output_signature()->max_streams();
+ if ((max_port != -1 && (dst_port >= max_port)) || dst_port < 0) {
+ msg << "destination port " << dst_port << " out of range for " << dst;
+ throw std::invalid_argument(msg.str());
+ }
- return connect_output(dst_port, src_port, src);
+ return connect_output(dst_port, src_port, src);
}
// Internal connections
d_fg->connect(src, src_port, dst, dst_port);
// TODO: connects to NC
- }
+}
- void
- hier_block2_detail::msg_connect(basic_block_sptr src, pmt::pmt_t srcport,
- basic_block_sptr dst, pmt::pmt_t dstport)
- {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "connecting message port..." << std::endl;
+void hier_block2_detail::msg_connect(basic_block_sptr src,
+ pmt::pmt_t srcport,
+ basic_block_sptr dst,
+ pmt::pmt_t dstport)
+{
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "connecting message port..." << std::endl;
// add block uniquely to list to internal blocks
- if(std::find(d_blocks.begin(), d_blocks.end(), dst) == d_blocks.end()){
- d_blocks.push_back(src);
- d_blocks.push_back(dst);
+ if (std::find(d_blocks.begin(), d_blocks.end(), dst) == d_blocks.end()) {
+ d_blocks.push_back(src);
+ d_blocks.push_back(dst);
}
- bool hier_in=false, hier_out=false;
- if(d_owner == src.get()){
+ bool hier_in = false, hier_out = false;
+ if (d_owner == src.get()) {
hier_out = src->message_port_is_hier_in(srcport);
- } else if (d_owner == dst.get()){
- hier_in = dst->message_port_is_hier_out(dstport);;
+ } else if (d_owner == dst.get()) {
+ hier_in = dst->message_port_is_hier_out(dstport);
+ ;
} else {
hier_out = src->message_port_is_hier_out(srcport);
hier_in = dst->message_port_is_hier_in(dstport);
@@ -178,45 +182,50 @@ namespace gr {
hier_block2_sptr src_block(cast_to_hier_block2_sptr(src));
hier_block2_sptr dst_block(cast_to_hier_block2_sptr(dst));
- if(src_block && src.get() != d_owner) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "msg_connect: src is hierarchical, setting parent to " << this << std::endl;
- src_block->d_detail->d_parent_detail = this;
+ if (src_block && src.get() != d_owner) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "msg_connect: src is hierarchical, setting parent to " << this
+ << std::endl;
+ src_block->d_detail->d_parent_detail = this;
}
- if(dst_block && dst.get() != d_owner) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "msg_connect: dst is hierarchical, setting parent to " << this << std::endl;
- dst_block->d_detail->d_parent_detail = this;
+ if (dst_block && dst.get() != d_owner) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "msg_connect: dst is hierarchical, setting parent to " << this
+ << std::endl;
+ dst_block->d_detail->d_parent_detail = this;
}
// add edge for this message connection
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << boost::format("msg_connect( (%s, %s, %d), (%s, %s, %d) )\n") % \
- src % srcport % hier_out %
- dst % dstport % hier_in;
- d_fg->connect(msg_endpoint(src, srcport, hier_out), msg_endpoint(dst, dstport, hier_in));
- }
-
- void
- hier_block2_detail::msg_disconnect(basic_block_sptr src, pmt::pmt_t srcport,
- basic_block_sptr dst, pmt::pmt_t dstport)
- {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "disconnecting message port..." << std::endl;
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << boost::format("msg_connect( (%s, %s, %d), (%s, %s, %d) )\n") % src %
+ srcport % hier_out % dst % dstport % hier_in;
+ d_fg->connect(msg_endpoint(src, srcport, hier_out),
+ msg_endpoint(dst, dstport, hier_in));
+}
+
+void hier_block2_detail::msg_disconnect(basic_block_sptr src,
+ pmt::pmt_t srcport,
+ basic_block_sptr dst,
+ pmt::pmt_t dstport)
+{
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "disconnecting message port..." << std::endl;
// remove edge for this message connection
- bool hier_in=false, hier_out=false;
- if(d_owner == src.get()){
+ bool hier_in = false, hier_out = false;
+ if (d_owner == src.get()) {
hier_out = src->message_port_is_hier_in(srcport);
- } else if (d_owner == dst.get()){
- hier_in = dst->message_port_is_hier_out(dstport);;
+ } else if (d_owner == dst.get()) {
+ hier_in = dst->message_port_is_hier_out(dstport);
+ ;
} else {
hier_out = src->message_port_is_hier_out(srcport);
hier_in = dst->message_port_is_hier_in(dstport);
}
- d_fg->disconnect(msg_endpoint(src, srcport, hier_out), msg_endpoint(dst, dstport, hier_in));
+ d_fg->disconnect(msg_endpoint(src, srcport, hier_out),
+ msg_endpoint(dst, dstport, hier_in));
hier_block2_sptr src_block(cast_to_hier_block2_sptr(src));
hier_block2_sptr dst_block(cast_to_hier_block2_sptr(dst));
@@ -233,7 +242,8 @@ namespace gr {
}
if (dst_block && dst.get() != d_owner) {
- // if the destination is hier, we need to resolve the endpoint before calling unsub
+ // if the destination is hier, we need to resolve the endpoint before calling
+ // unsub
msg_edge_vector_t edges = dst_block->d_detail->d_fg->msg_edges();
for (msg_edge_viter_t it = edges.begin(); it != edges.end(); ++it) {
if ((*it).src().block() == dst) {
@@ -245,276 +255,262 @@ namespace gr {
// unregister the subscription - if already subscribed
src->message_port_unsub(srcport, pmt::cons(dst->alias_pmt(), dstport));
+}
- }
-
- void
- hier_block2_detail::disconnect(basic_block_sptr block)
- {
+void hier_block2_detail::disconnect(basic_block_sptr block)
+{
// Check on singleton list
- for(basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) {
- if(*p == block) {
- d_blocks.erase(p);
-
- hier_block2_sptr hblock(cast_to_hier_block2_sptr(block));
- if(block && block.get() != d_owner) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "disconnect: block is hierarchical, clearing parent" << std::endl;
- hblock->d_detail->d_parent_detail = 0;
- }
+ for (basic_block_viter_t p = d_blocks.begin(); p != d_blocks.end(); p++) {
+ if (*p == block) {
+ d_blocks.erase(p);
+
+ hier_block2_sptr hblock(cast_to_hier_block2_sptr(block));
+ if (block && block.get() != d_owner) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "disconnect: block is hierarchical, clearing parent"
+ << std::endl;
+ hblock->d_detail->d_parent_detail = 0;
+ }
- return;
- }
+ return;
+ }
}
// Otherwise find all edges containing block
edge_vector_t edges, tmp = d_fg->edges();
edge_vector_t::iterator p;
- for(p = tmp.begin(); p != tmp.end(); p++) {
- if((*p).src().block() == block || (*p).dst().block() == block) {
- edges.push_back(*p);
+ for (p = tmp.begin(); p != tmp.end(); p++) {
+ if ((*p).src().block() == block || (*p).dst().block() == block) {
+ edges.push_back(*p);
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "disconnect: block found in edge " << (*p) << std::endl;
- }
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "disconnect: block found in edge " << (*p) << std::endl;
+ }
}
- if(edges.size() == 0) {
- std::stringstream msg;
- msg << "cannot disconnect block " << block << ", not found";
- throw std::invalid_argument(msg.str());
+ if (edges.size() == 0) {
+ std::stringstream msg;
+ msg << "cannot disconnect block " << block << ", not found";
+ throw std::invalid_argument(msg.str());
}
- for(p = edges.begin(); p != edges.end(); p++) {
- disconnect((*p).src().block(), (*p).src().port(),
- (*p).dst().block(), (*p).dst().port());
+ for (p = edges.begin(); p != edges.end(); p++) {
+ disconnect(
+ (*p).src().block(), (*p).src().port(), (*p).dst().block(), (*p).dst().port());
}
- }
+}
- void
- hier_block2_detail::disconnect(basic_block_sptr src, int src_port,
- basic_block_sptr dst, int dst_port)
- {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "disconnecting: " << endpoint(src, src_port)
- << " -> " << endpoint(dst, dst_port) << std::endl;
+void hier_block2_detail::disconnect(basic_block_sptr src,
+ int src_port,
+ basic_block_sptr dst,
+ int dst_port)
+{
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "disconnecting: " << endpoint(src, src_port) << " -> "
+ << endpoint(dst, dst_port) << std::endl;
- if(src.get() == dst.get())
- throw std::invalid_argument("disconnect: source and destination blocks cannot be the same");
+ if (src.get() == dst.get())
+ throw std::invalid_argument(
+ "disconnect: source and destination blocks cannot be the same");
hier_block2_sptr src_block(cast_to_hier_block2_sptr(src));
hier_block2_sptr dst_block(cast_to_hier_block2_sptr(dst));
- if(src_block && src.get() != d_owner) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "disconnect: src is hierarchical, clearing parent" << std::endl;
- src_block->d_detail->d_parent_detail = 0;
+ if (src_block && src.get() != d_owner) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "disconnect: src is hierarchical, clearing parent" << std::endl;
+ src_block->d_detail->d_parent_detail = 0;
}
- if(dst_block && dst.get() != d_owner) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "disconnect: dst is hierarchical, clearing parent" << std::endl;
- dst_block->d_detail->d_parent_detail = 0;
+ if (dst_block && dst.get() != d_owner) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "disconnect: dst is hierarchical, clearing parent" << std::endl;
+ dst_block->d_detail->d_parent_detail = 0;
}
- if(src.get() == d_owner)
- return disconnect_input(src_port, dst_port, dst);
+ if (src.get() == d_owner)
+ return disconnect_input(src_port, dst_port, dst);
- if(dst.get() == d_owner)
- return disconnect_output(dst_port, src_port, src);
+ if (dst.get() == d_owner)
+ return disconnect_output(dst_port, src_port, src);
// Internal connections
d_fg->disconnect(src, src_port, dst, dst_port);
- }
+}
- void
- hier_block2_detail::refresh_io_signature()
- {
- int min_inputs = d_owner->input_signature()->min_streams();
- int max_inputs = d_owner->input_signature()->max_streams();
+void hier_block2_detail::refresh_io_signature()
+{
+ int min_inputs = d_owner->input_signature()->min_streams();
+ int max_inputs = d_owner->input_signature()->max_streams();
int min_outputs = d_owner->output_signature()->min_streams();
int max_outputs = d_owner->output_signature()->max_streams();
- if(max_inputs == io_signature::IO_INFINITE ||
- max_outputs == io_signature::IO_INFINITE ||
- (min_inputs != max_inputs) ||(min_outputs != max_outputs) ) {
- std::stringstream msg;
- msg << "Hierarchical blocks do not yet support arbitrary or"
- << " variable numbers of inputs or outputs (" << d_owner->name() << ")";
- throw std::runtime_error(msg.str());
+ if (max_inputs == io_signature::IO_INFINITE ||
+ max_outputs == io_signature::IO_INFINITE || (min_inputs != max_inputs) ||
+ (min_outputs != max_outputs)) {
+ std::stringstream msg;
+ msg << "Hierarchical blocks do not yet support arbitrary or"
+ << " variable numbers of inputs or outputs (" << d_owner->name() << ")";
+ throw std::runtime_error(msg.str());
}
// Check for # input change
- if ((signed)d_inputs.size() != max_inputs)
- {
- d_inputs.resize(max_inputs);
+ if ((signed)d_inputs.size() != max_inputs) {
+ d_inputs.resize(max_inputs);
}
// Check for # output change
- if ((signed)d_outputs.size() != max_outputs)
- {
- d_outputs.resize(max_outputs);
- d_min_output_buffer.resize(max_outputs, 0);
- d_max_output_buffer.resize(max_outputs, 0);
- }
- }
-
- void
- hier_block2_detail::connect_input(int my_port, int port,
- basic_block_sptr block)
- {
+ if ((signed)d_outputs.size() != max_outputs) {
+ d_outputs.resize(max_outputs);
+ d_min_output_buffer.resize(max_outputs, 0);
+ d_max_output_buffer.resize(max_outputs, 0);
+ }
+}
+
+void hier_block2_detail::connect_input(int my_port, int port, basic_block_sptr block)
+{
std::stringstream msg;
refresh_io_signature();
- if(my_port < 0 || my_port >= (signed)d_inputs.size()) {
- msg << "input port " << my_port << " out of range for " << block;
- throw std::invalid_argument(msg.str());
+ if (my_port < 0 || my_port >= (signed)d_inputs.size()) {
+ msg << "input port " << my_port << " out of range for " << block;
+ throw std::invalid_argument(msg.str());
}
- endpoint_vector_t &endps = d_inputs[my_port];
+ endpoint_vector_t& endps = d_inputs[my_port];
endpoint endp(block, port);
endpoint_viter_t p = std::find(endps.begin(), endps.end(), endp);
- if(p != endps.end()) {
- msg << "external input port " << my_port << " already wired to " << endp;
- throw std::invalid_argument(msg.str());
+ if (p != endps.end()) {
+ msg << "external input port " << my_port << " already wired to " << endp;
+ throw std::invalid_argument(msg.str());
}
endps.push_back(endp);
- }
+}
- void
- hier_block2_detail::connect_output(int my_port, int port,
- basic_block_sptr block)
- {
+void hier_block2_detail::connect_output(int my_port, int port, basic_block_sptr block)
+{
std::stringstream msg;
refresh_io_signature();
- if(my_port < 0 || my_port >= (signed)d_outputs.size()) {
- msg << "output port " << my_port << " out of range for " << block;
- throw std::invalid_argument(msg.str());
+ if (my_port < 0 || my_port >= (signed)d_outputs.size()) {
+ msg << "output port " << my_port << " out of range for " << block;
+ throw std::invalid_argument(msg.str());
}
- if(d_outputs[my_port].block()) {
- msg << "external output port " << my_port << " already connected from "
- << d_outputs[my_port];
- throw std::invalid_argument(msg.str());
+ if (d_outputs[my_port].block()) {
+ msg << "external output port " << my_port << " already connected from "
+ << d_outputs[my_port];
+ throw std::invalid_argument(msg.str());
}
d_outputs[my_port] = endpoint(block, port);
- }
+}
- void
- hier_block2_detail::disconnect_input(int my_port, int port,
- basic_block_sptr block)
- {
+void hier_block2_detail::disconnect_input(int my_port, int port, basic_block_sptr block)
+{
std::stringstream msg;
refresh_io_signature();
- if(my_port < 0 || my_port >= (signed)d_inputs.size()) {
- msg << "input port number " << my_port << " out of range for " << block;
- throw std::invalid_argument(msg.str());
+ if (my_port < 0 || my_port >= (signed)d_inputs.size()) {
+ msg << "input port number " << my_port << " out of range for " << block;
+ throw std::invalid_argument(msg.str());
}
- endpoint_vector_t &endps = d_inputs[my_port];
+ endpoint_vector_t& endps = d_inputs[my_port];
endpoint endp(block, port);
endpoint_viter_t p = std::find(endps.begin(), endps.end(), endp);
- if(p == endps.end()) {
- msg << "external input port " << my_port << " not connected to " << endp;
- throw std::invalid_argument(msg.str());
+ if (p == endps.end()) {
+ msg << "external input port " << my_port << " not connected to " << endp;
+ throw std::invalid_argument(msg.str());
}
endps.erase(p);
- }
+}
- void
- hier_block2_detail::disconnect_output(int my_port, int port,
- basic_block_sptr block)
- {
+void hier_block2_detail::disconnect_output(int my_port, int port, basic_block_sptr block)
+{
std::stringstream msg;
refresh_io_signature();
- if(my_port < 0 || my_port >= (signed)d_outputs.size()) {
- msg << "output port number " << my_port << " out of range for " << block;
- throw std::invalid_argument(msg.str());
+ if (my_port < 0 || my_port >= (signed)d_outputs.size()) {
+ msg << "output port number " << my_port << " out of range for " << block;
+ throw std::invalid_argument(msg.str());
}
- if(d_outputs[my_port].block() != block) {
- msg << "block " << block << " not assigned to output "
- << my_port << ", can't disconnect";
- throw std::invalid_argument(msg.str());
+ if (d_outputs[my_port].block() != block) {
+ msg << "block " << block << " not assigned to output " << my_port
+ << ", can't disconnect";
+ throw std::invalid_argument(msg.str());
}
d_outputs[my_port] = endpoint();
- }
+}
- endpoint_vector_t
- hier_block2_detail::resolve_port(int port, bool is_input)
- {
+endpoint_vector_t hier_block2_detail::resolve_port(int port, bool is_input)
+{
std::stringstream msg;
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Resolving port " << port << " as an "
- << (is_input ? "input" : "output")
- << " of " << d_owner->name() << std::endl;
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Resolving port " << port << " as an "
+ << (is_input ? "input" : "output") << " of " << d_owner->name()
+ << std::endl;
endpoint_vector_t result;
- if(is_input) {
- if(port < 0 || port >= (signed)d_inputs.size()) {
- msg << "resolve_port: hierarchical block '" << d_owner->name()
- << "': input " << port << " is out of range";
- throw std::runtime_error(msg.str());
- }
+ if (is_input) {
+ if (port < 0 || port >= (signed)d_inputs.size()) {
+ msg << "resolve_port: hierarchical block '" << d_owner->name() << "': input "
+ << port << " is out of range";
+ throw std::runtime_error(msg.str());
+ }
- if(d_inputs[port].empty()) {
- msg << "resolve_port: hierarchical block '" << d_owner->name()
- << "': input " << port << " is not connected internally";
- throw std::runtime_error(msg.str());
- }
+ if (d_inputs[port].empty()) {
+ msg << "resolve_port: hierarchical block '" << d_owner->name() << "': input "
+ << port << " is not connected internally";
+ throw std::runtime_error(msg.str());
+ }
- endpoint_vector_t &endps = d_inputs[port];
- endpoint_viter_t p;
- for(p = endps.begin(); p != endps.end(); p++) {
- endpoint_vector_t tmp = resolve_endpoint(*p, true);
- std::copy(tmp.begin(), tmp.end(), back_inserter(result));
- }
- }
- else {
- if(port < 0 || port >= (signed)d_outputs.size()) {
- msg << "resolve_port: hierarchical block '" << d_owner->name()
- << "': output " << port << " is out of range";
- throw std::runtime_error(msg.str());
- }
+ endpoint_vector_t& endps = d_inputs[port];
+ endpoint_viter_t p;
+ for (p = endps.begin(); p != endps.end(); p++) {
+ endpoint_vector_t tmp = resolve_endpoint(*p, true);
+ std::copy(tmp.begin(), tmp.end(), back_inserter(result));
+ }
+ } else {
+ if (port < 0 || port >= (signed)d_outputs.size()) {
+ msg << "resolve_port: hierarchical block '" << d_owner->name() << "': output "
+ << port << " is out of range";
+ throw std::runtime_error(msg.str());
+ }
- if(d_outputs[port] == endpoint()) {
- msg << "resolve_port: hierarchical block '" << d_owner->name()
- << "': output " << port << " is not connected internally";
- throw std::runtime_error(msg.str());
- }
+ if (d_outputs[port] == endpoint()) {
+ msg << "resolve_port: hierarchical block '" << d_owner->name() << "': output "
+ << port << " is not connected internally";
+ throw std::runtime_error(msg.str());
+ }
- result = resolve_endpoint(d_outputs[port], false);
+ result = resolve_endpoint(d_outputs[port], false);
}
- if(result.empty()) {
- msg << "resolve_port: hierarchical block '" << d_owner->name()
- << "': unable to resolve "
- << (is_input ? "input port " : "output port ")
- << port;
- throw std::runtime_error(msg.str());
+ if (result.empty()) {
+ msg << "resolve_port: hierarchical block '" << d_owner->name()
+ << "': unable to resolve " << (is_input ? "input port " : "output port ")
+ << port;
+ throw std::runtime_error(msg.str());
}
return result;
- }
+}
- void
- hier_block2_detail::disconnect_all()
- {
+void hier_block2_detail::disconnect_all()
+{
d_fg->clear();
d_blocks.clear();
@@ -522,49 +518,49 @@ namespace gr {
int max_outputs = d_owner->output_signature()->max_streams();
d_inputs = std::vector<endpoint_vector_t>(max_inputs);
d_outputs = endpoint_vector_t(max_outputs);
- }
+}
- endpoint_vector_t
- hier_block2_detail::resolve_endpoint(const endpoint &endp, bool is_input) const
- {
+endpoint_vector_t hier_block2_detail::resolve_endpoint(const endpoint& endp,
+ bool is_input) const
+{
std::stringstream msg;
endpoint_vector_t result;
// Check if endpoint is a leaf node
- if(cast_to_block_sptr(endp.block())) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Block " << endp.block() << " is a leaf node, returning." << std::endl;
- result.push_back(endp);
- return result;
+ if (cast_to_block_sptr(endp.block())) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Block " << endp.block() << " is a leaf node, returning."
+ << std::endl;
+ result.push_back(endp);
+ return result;
}
// Check if endpoint is a hierarchical block
hier_block2_sptr hier_block2(cast_to_hier_block2_sptr(endp.block()));
- if(hier_block2) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Resolving endpoint " << endp << " as an "
- << (is_input ? "input" : "output")
- << ", recursing" << std::endl;
- return hier_block2->d_detail->resolve_port(endp.port(), is_input);
+ if (hier_block2) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Resolving endpoint " << endp << " as an "
+ << (is_input ? "input" : "output") << ", recursing" << std::endl;
+ return hier_block2->d_detail->resolve_port(endp.port(), is_input);
}
- msg << "unable to resolve" << (is_input ? " input " : " output ")
- << "endpoint " << endp;
+ msg << "unable to resolve" << (is_input ? " input " : " output ") << "endpoint "
+ << endp;
throw std::runtime_error(msg.str());
- }
+}
- void
- hier_block2_detail::flatten_aux(flat_flowgraph_sptr sfg) const
- {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << " ** Flattening " << d_owner->name() << " parent: " << d_parent_detail << std::endl;
+void hier_block2_detail::flatten_aux(flat_flowgraph_sptr sfg) const
+{
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << " ** Flattening " << d_owner->name()
+ << " parent: " << d_parent_detail << std::endl;
bool is_top_block = (d_parent_detail == NULL);
// Add my edges to the flow graph, resolving references to actual endpoints
edge_vector_t edges = d_fg->edges();
msg_edge_vector_t msg_edges = d_fg->msg_edges();
edge_viter_t p;
- msg_edge_viter_t q,u;
+ msg_edge_viter_t q, u;
// Only run setup_rpc if ControlPort config param is enabled.
bool ctrlport_on = prefs::singleton()->get_bool("ControlPort", "on", false);
@@ -575,195 +571,191 @@ namespace gr {
bool set_all_min_buff = d_owner->all_min_output_buffer_p();
bool set_all_max_buff = d_owner->all_max_output_buffer_p();
// Get the min and max buffer length
- if(set_all_min_buff){
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Getting (" << (d_owner->alias()).c_str()
- << ") min buffer" << std::endl;
- min_buff = d_owner->min_output_buffer();
+ if (set_all_min_buff) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Getting (" << (d_owner->alias()).c_str() << ") min buffer"
+ << std::endl;
+ min_buff = d_owner->min_output_buffer();
}
- if(set_all_max_buff){
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Getting (" << (d_owner->alias()).c_str()
- << ") max buffer" << std::endl;
- max_buff = d_owner->max_output_buffer();
+ if (set_all_max_buff) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Getting (" << (d_owner->alias()).c_str() << ") max buffer"
+ << std::endl;
+ max_buff = d_owner->max_output_buffer();
}
// For every block (gr::block and gr::hier_block2), set up the RPC
// interface.
- for(p = edges.begin(); p != edges.end(); p++) {
- basic_block_sptr b;
- b = p->src().block();
-
- if(set_all_min_buff){
- //sets the min buff for every block within hier_block2
- if(min_buff != 0){
- block_sptr bb = boost::dynamic_pointer_cast<block>(b);
- if(bb != 0){
- if(bb->min_output_buffer(0) != min_buff){
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Block (" << (bb->alias()).c_str()
- << ") min_buff (" << min_buff
- << ")" << std::endl;
- bb->set_min_output_buffer(min_buff);
- }
- }
- else{
- hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(b);
- if(hh != 0){
- if(hh->min_output_buffer(0) != min_buff){
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "HBlock (" << (hh->alias()).c_str()
- << ") min_buff (" << min_buff
- << ")" << std::endl;
- hh->set_min_output_buffer(min_buff);
- }
+ for (p = edges.begin(); p != edges.end(); p++) {
+ basic_block_sptr b;
+ b = p->src().block();
+
+ if (set_all_min_buff) {
+ // sets the min buff for every block within hier_block2
+ if (min_buff != 0) {
+ block_sptr bb = boost::dynamic_pointer_cast<block>(b);
+ if (bb != 0) {
+ if (bb->min_output_buffer(0) != min_buff) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Block (" << (bb->alias()).c_str()
+ << ") min_buff (" << min_buff << ")" << std::endl;
+ bb->set_min_output_buffer(min_buff);
+ }
+ } else {
+ hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(b);
+ if (hh != 0) {
+ if (hh->min_output_buffer(0) != min_buff) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "HBlock (" << (hh->alias()).c_str()
+ << ") min_buff (" << min_buff << ")"
+ << std::endl;
+ hh->set_min_output_buffer(min_buff);
+ }
+ }
+ }
}
- }
}
- }
- if(set_all_max_buff){
- //sets the max buff for every block within hier_block2
- if(max_buff != 0){
- block_sptr bb = boost::dynamic_pointer_cast<block>(b);
- if(bb != 0){
- if(bb->max_output_buffer(0) != max_buff){
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Block (" << (bb->alias()).c_str()
- << ") max_buff (" << max_buff
- << ")" << std::endl;
- bb->set_max_output_buffer(max_buff);
- }
- }
- else{
- hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(b);
- if(hh != 0){
- if(hh->max_output_buffer(0) != max_buff){
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "HBlock (" << (hh->alias()).c_str()
- << ") max_buff (" << max_buff
- << ")" << std::endl;
- hh->set_max_output_buffer(max_buff);
- }
+ if (set_all_max_buff) {
+ // sets the max buff for every block within hier_block2
+ if (max_buff != 0) {
+ block_sptr bb = boost::dynamic_pointer_cast<block>(b);
+ if (bb != 0) {
+ if (bb->max_output_buffer(0) != max_buff) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Block (" << (bb->alias()).c_str()
+ << ") max_buff (" << max_buff << ")" << std::endl;
+ bb->set_max_output_buffer(max_buff);
+ }
+ } else {
+ hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(b);
+ if (hh != 0) {
+ if (hh->max_output_buffer(0) != max_buff) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "HBlock (" << (hh->alias()).c_str()
+ << ") max_buff (" << max_buff << ")"
+ << std::endl;
+ hh->set_max_output_buffer(max_buff);
+ }
+ }
+ }
}
- }
}
- }
- b = p->dst().block();
- if(set_all_min_buff){
- //sets the min buff for every block within hier_block2
- if(min_buff != 0){
- block_sptr bb = boost::dynamic_pointer_cast<block>(b);
- if(bb != 0){
- if(bb->min_output_buffer(0) != min_buff){
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Block (" << (bb->alias()).c_str()
- << ") min_buff (" << min_buff
- << ")" << std::endl;
- bb->set_min_output_buffer(min_buff);
+ b = p->dst().block();
+ if (set_all_min_buff) {
+ // sets the min buff for every block within hier_block2
+ if (min_buff != 0) {
+ block_sptr bb = boost::dynamic_pointer_cast<block>(b);
+ if (bb != 0) {
+ if (bb->min_output_buffer(0) != min_buff) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Block (" << (bb->alias()).c_str()
+ << ") min_buff (" << min_buff << ")" << std::endl;
+ bb->set_min_output_buffer(min_buff);
+ }
+ } else {
+ hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(b);
+ if (hh != 0) {
+ if (hh->min_output_buffer(0) != min_buff) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "HBlock (" << (hh->alias()).c_str()
+ << ") min_buff (" << min_buff << ")"
+ << std::endl;
+ hh->set_min_output_buffer(min_buff);
+ }
+ }
+ }
}
- }
- else{
- hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(b);
- if(hh != 0){
- if(hh->min_output_buffer(0) != min_buff){
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "HBlock (" << (hh->alias()).c_str()
- << ") min_buff (" << min_buff
- << ")" << std::endl;
- hh->set_min_output_buffer(min_buff);
- }
- }
- }
}
- }
- if(set_all_max_buff){
- //sets the max buff for every block within hier_block2
- if(max_buff != 0){
- block_sptr bb = boost::dynamic_pointer_cast<block>(b);
- if(bb != 0){
- if(bb->max_output_buffer(0) != max_buff){
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Block (" << (bb->alias()).c_str()
- << ") max_buff (" << max_buff
- << ")" << std::endl;
- bb->set_max_output_buffer(max_buff);
+ if (set_all_max_buff) {
+ // sets the max buff for every block within hier_block2
+ if (max_buff != 0) {
+ block_sptr bb = boost::dynamic_pointer_cast<block>(b);
+ if (bb != 0) {
+ if (bb->max_output_buffer(0) != max_buff) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Block (" << (bb->alias()).c_str()
+ << ") max_buff (" << max_buff << ")" << std::endl;
+ bb->set_max_output_buffer(max_buff);
+ }
+ } else {
+ hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(b);
+ if (hh != 0) {
+ if (hh->max_output_buffer(0) != max_buff) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "HBlock (" << (hh->alias()).c_str()
+ << ") max_buff (" << max_buff << ")"
+ << std::endl;
+ hh->set_max_output_buffer(max_buff);
+ }
+ }
+ }
}
- }
- else{
- hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(b);
- if(hh != 0){
- if(hh->max_output_buffer(0) != max_buff){
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "HBlock (" << (hh->alias()).c_str()
- << ") max_buff (" << max_buff
- << ")" << std::endl;
- hh->set_max_output_buffer(max_buff);
- }
- }
- }
}
- }
}
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Flattening stream connections: " << std::endl;
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Flattening stream connections: " << std::endl;
- for(p = edges.begin(); p != edges.end(); p++) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Flattening edge " << (*p) << std::endl;
+ for (p = edges.begin(); p != edges.end(); p++) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Flattening edge " << (*p) << std::endl;
- endpoint_vector_t src_endps = resolve_endpoint(p->src(), false);
- endpoint_vector_t dst_endps = resolve_endpoint(p->dst(), true);
+ endpoint_vector_t src_endps = resolve_endpoint(p->src(), false);
+ endpoint_vector_t dst_endps = resolve_endpoint(p->dst(), true);
- endpoint_viter_t s, d;
- for(s = src_endps.begin(); s != src_endps.end(); s++) {
- for(d = dst_endps.begin(); d != dst_endps.end(); d++) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << (*s) << "->" << (*d) << std::endl;
- sfg->connect(*s, *d);
+ endpoint_viter_t s, d;
+ for (s = src_endps.begin(); s != src_endps.end(); s++) {
+ for (d = dst_endps.begin(); d != dst_endps.end(); d++) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << (*s) << "->" << (*d) << std::endl;
+ sfg->connect(*s, *d);
+ }
}
- }
}
// loop through flattening hierarchical connections
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Flattening msg connections: " << std::endl;
-
- std::vector<std::pair<msg_endpoint, bool> > resolved_endpoints;
- for(q = msg_edges.begin(); q != msg_edges.end(); q++) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << boost::format(" flattening edge ( %s, %s, %d) -> ( %s, %s, %d)\n") % \
- q->src().block() % q->src().port() % q->src().is_hier() % q->dst().block() % \
- q->dst().port() % q->dst().is_hier();
-
-
- if(q->src().is_hier() && q->src().block().get() == d_owner){
- // connection into this block ..
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "hier incoming port: " << q->src() << std::endl;
- sfg->replace_endpoint(q->src(), q->dst(), false);
- resolved_endpoints.push_back( std::pair<msg_endpoint,bool>( q->src(), false));
- } else
- if(q->dst().is_hier() && q->dst().block().get() == d_owner){
- // connection out of this block
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "hier outgoing port: " << q->dst() << std::endl;
- sfg->replace_endpoint(q->dst(), q->src(), true);
- resolved_endpoints.push_back( std::pair<msg_endpoint,bool>(q->dst(), true));
- } else {
- // internal connection only
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "internal msg connection: " << q->src() << "-->" << q->dst() << std::endl;
- sfg->connect( q->src(), q->dst() );
- }
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Flattening msg connections: " << std::endl;
+
+ std::vector<std::pair<msg_endpoint, bool>> resolved_endpoints;
+ for (q = msg_edges.begin(); q != msg_edges.end(); q++) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << boost::format(
+ " flattening edge ( %s, %s, %d) -> ( %s, %s, %d)\n") %
+ q->src().block() % q->src().port() % q->src().is_hier() %
+ q->dst().block() % q->dst().port() % q->dst().is_hier();
+
+
+ if (q->src().is_hier() && q->src().block().get() == d_owner) {
+ // connection into this block ..
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "hier incoming port: " << q->src() << std::endl;
+ sfg->replace_endpoint(q->src(), q->dst(), false);
+ resolved_endpoints.push_back(std::pair<msg_endpoint, bool>(q->src(), false));
+ } else if (q->dst().is_hier() && q->dst().block().get() == d_owner) {
+ // connection out of this block
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "hier outgoing port: " << q->dst() << std::endl;
+ sfg->replace_endpoint(q->dst(), q->src(), true);
+ resolved_endpoints.push_back(std::pair<msg_endpoint, bool>(q->dst(), true));
+ } else {
+ // internal connection only
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "internal msg connection: " << q->src() << "-->" << q->dst()
+ << std::endl;
+ sfg->connect(q->src(), q->dst());
+ }
}
- for(std::vector<std::pair<msg_endpoint, bool> >::iterator it = resolved_endpoints.begin();
- it != resolved_endpoints.end(); it++) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "sfg->clear_endpoint(" << (*it).first << ", " << (*it).second << ") " << std::endl;
- sfg->clear_endpoint((*it).first, (*it).second);
+ for (std::vector<std::pair<msg_endpoint, bool>>::iterator it =
+ resolved_endpoints.begin();
+ it != resolved_endpoints.end();
+ it++) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "sfg->clear_endpoint(" << (*it).first << ", " << (*it).second
+ << ") " << std::endl;
+ sfg->clear_endpoint((*it).first, (*it).second);
}
/*
@@ -784,87 +776,81 @@ namespace gr {
basic_block_vector_t tmp = d_fg->calc_used_blocks();
// First add the list of singleton blocks
- std::vector<basic_block_sptr>::const_iterator b; // Because flatten_aux is const
- for(b = d_blocks.begin(); b != d_blocks.end(); b++) {
- tmp.push_back(*b);
+ std::vector<basic_block_sptr>::const_iterator b; // Because flatten_aux is const
+ for (b = d_blocks.begin(); b != d_blocks.end(); b++) {
+ tmp.push_back(*b);
}
// Now add the list of connected input blocks
std::stringstream msg;
- for(unsigned int i = 0; i < d_inputs.size(); i++) {
- if(d_inputs[i].size() == 0) {
- msg << "In hierarchical block " << d_owner->name() << ", input " << i
- << " is not connected internally";
- throw std::runtime_error(msg.str());
- }
+ for (unsigned int i = 0; i < d_inputs.size(); i++) {
+ if (d_inputs[i].size() == 0) {
+ msg << "In hierarchical block " << d_owner->name() << ", input " << i
+ << " is not connected internally";
+ throw std::runtime_error(msg.str());
+ }
- for(unsigned int j = 0; j < d_inputs[i].size(); j++)
- tmp.push_back(d_inputs[i][j].block());
+ for (unsigned int j = 0; j < d_inputs[i].size(); j++)
+ tmp.push_back(d_inputs[i][j].block());
}
- for(unsigned int i = 0; i < d_outputs.size(); i++) {
- basic_block_sptr blk = d_outputs[i].block();
- if(!blk) {
- msg << "In hierarchical block " << d_owner->name() << ", output " << i
- << " is not connected internally";
- throw std::runtime_error(msg.str());
- }
- // Set the buffers of only the blocks connected to the hier output
- if(!set_all_min_buff){
- min_buff = d_owner->min_output_buffer(i);
- if(min_buff != 0){
- block_sptr bb = boost::dynamic_pointer_cast<block>(blk);
- if(bb != 0){
- int bb_src_port = d_outputs[i].port();
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Block (" << (bb->alias()).c_str()
- << ") Port (" << bb_src_port
- << ") min_buff (" << min_buff
- << ")" << std::endl;
- bb->set_min_output_buffer(bb_src_port, min_buff);
- }
- else{
- hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(blk);
- if(hh != 0){
- int hh_src_port = d_outputs[i].port();
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "HBlock (" << (hh->alias()).c_str()
- << ") Port (" << hh_src_port
- << ") min_buff ("<< min_buff
- << ")" << std::endl;
- hh->set_min_output_buffer(hh_src_port, min_buff);
+ for (unsigned int i = 0; i < d_outputs.size(); i++) {
+ basic_block_sptr blk = d_outputs[i].block();
+ if (!blk) {
+ msg << "In hierarchical block " << d_owner->name() << ", output " << i
+ << " is not connected internally";
+ throw std::runtime_error(msg.str());
+ }
+ // Set the buffers of only the blocks connected to the hier output
+ if (!set_all_min_buff) {
+ min_buff = d_owner->min_output_buffer(i);
+ if (min_buff != 0) {
+ block_sptr bb = boost::dynamic_pointer_cast<block>(blk);
+ if (bb != 0) {
+ int bb_src_port = d_outputs[i].port();
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Block (" << (bb->alias()).c_str() << ") Port ("
+ << bb_src_port << ") min_buff (" << min_buff << ")"
+ << std::endl;
+ bb->set_min_output_buffer(bb_src_port, min_buff);
+ } else {
+ hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(blk);
+ if (hh != 0) {
+ int hh_src_port = d_outputs[i].port();
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "HBlock (" << (hh->alias()).c_str() << ") Port ("
+ << hh_src_port << ") min_buff (" << min_buff << ")"
+ << std::endl;
+ hh->set_min_output_buffer(hh_src_port, min_buff);
+ }
+ }
}
- }
}
- }
- if(!set_all_max_buff){
- max_buff = d_owner->max_output_buffer(i);
- if(max_buff != 0){
- block_sptr bb = boost::dynamic_pointer_cast<block>(blk);
- if(bb != 0){
- int bb_src_port = d_outputs[i].port();
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "Block (" << (bb->alias()).c_str()
- << ") Port (" << bb_src_port
- << ") max_buff (" << max_buff
- << ")" << std::endl;
- bb->set_max_output_buffer(bb_src_port, max_buff);
- }
- else{
- hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(blk);
- if(hh != 0){
- int hh_src_port = d_outputs[i].port();
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "HBlock (" << (hh->alias()).c_str()
- << ") Port (" << hh_src_port
- << ") max_buff (" << max_buff
- << ")" << std::endl;
- hh->set_max_output_buffer(hh_src_port, max_buff);
+ if (!set_all_max_buff) {
+ max_buff = d_owner->max_output_buffer(i);
+ if (max_buff != 0) {
+ block_sptr bb = boost::dynamic_pointer_cast<block>(blk);
+ if (bb != 0) {
+ int bb_src_port = d_outputs[i].port();
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "Block (" << (bb->alias()).c_str() << ") Port ("
+ << bb_src_port << ") max_buff (" << max_buff << ")"
+ << std::endl;
+ bb->set_max_output_buffer(bb_src_port, max_buff);
+ } else {
+ hier_block2_sptr hh = boost::dynamic_pointer_cast<hier_block2>(blk);
+ if (hh != 0) {
+ int hh_src_port = d_outputs[i].port();
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "HBlock (" << (hh->alias()).c_str() << ") Port ("
+ << hh_src_port << ") max_buff (" << max_buff << ")"
+ << std::endl;
+ hh->set_max_output_buffer(hh_src_port, max_buff);
+ }
+ }
}
- }
}
- }
- tmp.push_back(blk);
+ tmp.push_back(blk);
}
sort(tmp.begin(), tmp.end());
@@ -872,105 +858,98 @@ namespace gr {
unique_copy(tmp.begin(), tmp.end(), inserter);
// Recurse hierarchical children
- for(basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) {
- hier_block2_sptr hier_block2(cast_to_hier_block2_sptr(*p));
- if(hier_block2 && (hier_block2.get() != d_owner)) {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "flatten_aux: recursing into hierarchical block "
- << hier_block2->alias() << std::endl;
- hier_block2->d_detail->flatten_aux(sfg);
- }
+ for (basic_block_viter_t p = blocks.begin(); p != blocks.end(); p++) {
+ hier_block2_sptr hier_block2(cast_to_hier_block2_sptr(*p));
+ if (hier_block2 && (hier_block2.get() != d_owner)) {
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "flatten_aux: recursing into hierarchical block "
+ << hier_block2->alias() << std::endl;
+ hier_block2->d_detail->flatten_aux(sfg);
+ }
}
// prune any remaining hier connections
// if they were not replaced with hier internal connections while in sub-calls
// they must remain unconnected and can be deleted...
- if(is_top_block){
- sfg->clear_hier();
+ if (is_top_block) {
+ sfg->clear_hier();
}
// print all primitive connections at exit
- if(HIER_BLOCK2_DETAIL_DEBUG && is_top_block){
- std::cout << "flatten_aux finished in top_block" << std::endl;
- sfg->dump();
+ if (HIER_BLOCK2_DETAIL_DEBUG && is_top_block) {
+ std::cout << "flatten_aux finished in top_block" << std::endl;
+ sfg->dump();
}
// if ctrlport is enabled, call setup RPC for all blocks in the flowgraph
- if(ctrlport_on) {
- for(b = blocks.begin(); b != blocks.end(); b++) {
- if(!(*b)->is_rpc_set()) {
- (*b)->setup_rpc();
- (*b)->rpc_set();
+ if (ctrlport_on) {
+ for (b = blocks.begin(); b != blocks.end(); b++) {
+ if (!(*b)->is_rpc_set()) {
+ (*b)->setup_rpc();
+ (*b)->rpc_set();
+ }
}
- }
}
- }
+}
- void
- hier_block2_detail::lock()
- {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "lock: entered in " << this << std::endl;
+void hier_block2_detail::lock()
+{
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "lock: entered in " << this << std::endl;
- if(d_parent_detail)
- d_parent_detail->lock();
+ if (d_parent_detail)
+ d_parent_detail->lock();
else
- d_owner->lock();
- }
+ d_owner->lock();
+}
- void
- hier_block2_detail::unlock()
- {
- if(HIER_BLOCK2_DETAIL_DEBUG)
- std::cout << "unlock: entered in " << this << std::endl;
+void hier_block2_detail::unlock()
+{
+ if (HIER_BLOCK2_DETAIL_DEBUG)
+ std::cout << "unlock: entered in " << this << std::endl;
- if(d_parent_detail)
- d_parent_detail->unlock();
+ if (d_parent_detail)
+ d_parent_detail->unlock();
else
- d_owner->unlock();
- }
+ d_owner->unlock();
+}
- void
- hier_block2_detail::set_processor_affinity(const std::vector<int> &mask)
- {
+void hier_block2_detail::set_processor_affinity(const std::vector<int>& mask)
+{
basic_block_vector_t tmp = d_fg->calc_used_blocks();
- for(basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) {
- (*p)->set_processor_affinity(mask);
+ for (basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) {
+ (*p)->set_processor_affinity(mask);
}
- }
+}
- void
- hier_block2_detail::unset_processor_affinity()
- {
+void hier_block2_detail::unset_processor_affinity()
+{
basic_block_vector_t tmp = d_fg->calc_used_blocks();
- for(basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) {
- (*p)->unset_processor_affinity();
+ for (basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) {
+ (*p)->unset_processor_affinity();
}
- }
+}
- std::vector<int>
- hier_block2_detail::processor_affinity()
- {
+std::vector<int> hier_block2_detail::processor_affinity()
+{
basic_block_vector_t tmp = d_fg->calc_used_blocks();
return tmp[0]->processor_affinity();
- }
+}
- void
- hier_block2_detail::set_log_level(std::string level)
- {
+void hier_block2_detail::set_log_level(std::string level)
+{
basic_block_vector_t tmp = d_fg->calc_used_blocks();
- for(basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) {
- (*p)->set_log_level(level);
+ for (basic_block_viter_t p = tmp.begin(); p != tmp.end(); p++) {
+ (*p)->set_log_level(level);
}
- }
+}
- std::string
- hier_block2_detail::log_level()
- {
+std::string hier_block2_detail::log_level()
+{
// Assume that log_level was set for all hier_block2 blocks
basic_block_vector_t tmp = d_fg->calc_used_blocks();
return tmp[0]->log_level();
- }
+}
} /* namespace gr */