diff options
author | jcorgan | 2009-05-08 18:51:39 +0000 |
---|---|---|
committer | jcorgan | 2009-05-08 18:51:39 +0000 |
commit | b8b202c0d29d9e764def63bde080bc07b00cc2cc (patch) | |
tree | 9198a685a988ed3f103f3812b0cfc6a363316b84 /gnuradio-core/src/lib/runtime | |
parent | d8b0bea3d4350b8450d612ed461c5bdf26b562b0 (diff) | |
download | gnuradio-b8b202c0d29d9e764def63bde080bc07b00cc2cc.tar.gz gnuradio-b8b202c0d29d9e764def63bde080bc07b00cc2cc.tar.bz2 gnuradio-b8b202c0d29d9e764def63bde080bc07b00cc2cc.zip |
Fix abort when user fails to connect hier_block2 outputs both internally and internally; throw meaningful exception instead.
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@10992 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gnuradio-core/src/lib/runtime')
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc index fa52b7429..877e240c2 100644 --- a/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc +++ b/gnuradio-core/src/lib/runtime/gr_hier_block2_detail.cc @@ -423,27 +423,40 @@ gr_hier_block2_detail::flatten_aux(gr_flat_flowgraph_sptr sfg) const sfg->connect(*s, *d); } } - } // Construct unique list of blocks used either in edges, inputs, // outputs, or by themselves. I still hate STL. - gr_basic_block_vector_t blocks, tmp = d_fg->calc_used_blocks(); + gr_basic_block_vector_t blocks; // unique list of used blocks + gr_basic_block_vector_t tmp = d_fg->calc_used_blocks(); + // First add the list of singleton blocks std::vector<gr_basic_block_sptr>::const_iterator b; // Because flatten_aux is const - for (b = d_blocks.begin(); b != d_blocks.end(); b++) + for (b = d_blocks.begin(); b != d_blocks.end(); b++) tmp.push_back(*b); - std::vector<gr_endpoint_vector_t>::const_iterator ep; // Because flatten_aux is const - std::vector<gr_endpoint>::const_iterator e; // Because flatten_aux is const - - for (ep = d_inputs.begin(); ep != d_inputs.end(); ep++) - for (e = (*ep).begin(); e != (*ep).end(); e++) - tmp.push_back((*e).block()); - - for (e = d_outputs.begin(); e != d_outputs.end(); e++) - tmp.push_back((*e).block()); + // 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 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++) { + gr_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()); + } + tmp.push_back(blk); + } sort(tmp.begin(), tmp.end()); std::insert_iterator<gr_basic_block_vector_t> inserter(blocks, blocks.begin()); |