diff options
author | Bill Clark <saikou@vt.edu> | 2015-04-01 16:29:52 -0400 |
---|---|---|
committer | Bill Clark <saikou@vt.edu> | 2015-04-01 16:29:52 -0400 |
commit | f1657258ccaa1b62d9ef8bd4d8e9b3cebf865b9c (patch) | |
tree | 076be1695a9d4bdf48190a8ab26700994db305fa | |
parent | cc824f49c4d597eadcbb1c850b529dc2b0722ec9 (diff) |
gnuradio-runtime: modified buffer length types to size_t, moved buffer length vectors into detail
-rw-r--r-- | gnuradio-runtime/include/gnuradio/hier_block2.h | 23 | ||||
-rw-r--r-- | gnuradio-runtime/lib/hier_block2.cc | 66 | ||||
-rw-r--r-- | gnuradio-runtime/lib/hier_block2_detail.cc | 58 | ||||
-rw-r--r-- | gnuradio-runtime/lib/hier_block2_detail.h | 5 | ||||
-rw-r--r-- | gnuradio-runtime/swig/hier_block2.i | 12 |
5 files changed, 100 insertions, 64 deletions
diff --git a/gnuradio-runtime/include/gnuradio/hier_block2.h b/gnuradio-runtime/include/gnuradio/hier_block2.h index 9a3f113a50..18739d36c9 100644 --- a/gnuradio-runtime/include/gnuradio/hier_block2.h +++ b/gnuradio-runtime/include/gnuradio/hier_block2.h @@ -57,9 +57,6 @@ namespace gr { */ hier_block2_detail *d_detail; - // Track output buffer min/max settings - std::vector<long> d_max_output_buffer; - std::vector<long> d_min_output_buffer; protected: hier_block2(void) {} // allows pure virtual interface sub-classes @@ -177,32 +174,32 @@ namespace gr { /*! * \brief Returns max buffer size on output port \p i. */ - long max_output_buffer(size_t i=0); + size_t max_output_buffer(size_t i=0); /*! * \brief Sets max buffer size on all output ports. */ - void set_max_output_buffer(long max_output_buffer); + void set_max_output_buffer(size_t max_output_buffer); /*! * \brief Sets max buffer size on output port \p port. */ - void set_max_output_buffer(int port, long max_output_buffer); + void set_max_output_buffer(int port, size_t max_output_buffer); /*! * \brief Returns min buffer size on output port \p i. */ - long min_output_buffer(size_t i=0); + size_t min_output_buffer(size_t i=0); /*! * \brief Sets min buffer size on all output ports. */ - void set_min_output_buffer(long min_output_buffer); + void set_min_output_buffer(size_t min_output_buffer); /*! * \brief Sets min buffer size on output port \p port. */ - void set_min_output_buffer(int port, long min_output_buffer); + void set_min_output_buffer(int port, size_t min_output_buffer); // This is a public method for ease of code organization, but should be @@ -270,20 +267,20 @@ namespace gr { std::vector<int> processor_affinity(); /*! - * \brief Get if all block buffers should be set. + * \brief Get if all block min buffers should be set. * * \details this returns whether all the block min output buffers * should be set or just the block ports connected to the hier ports. */ - bool set_all_min_output_buffer(void); + bool all_min_output_buffer_p(void); /*! - * \brief Get if all block buffers should be set. + * \brief Get if all block max buffers should be set. * * \details this returns whether all the block max output buffers * should be set or just the block ports connected to the hier ports. */ - bool set_all_max_output_buffer(void); + bool all_max_output_buffer_p(void); }; /*! diff --git a/gnuradio-runtime/lib/hier_block2.cc b/gnuradio-runtime/lib/hier_block2.cc index 809b0d060e..81d310ab96 100644 --- a/gnuradio-runtime/lib/hier_block2.cc +++ b/gnuradio-runtime/lib/hier_block2.cc @@ -29,6 +29,7 @@ #include <gnuradio/flowgraph.h> #include "hier_block2_detail.h" #include <iostream> +#include <stdio.h> namespace gr { @@ -49,9 +50,7 @@ namespace gr { : basic_block(name, input_signature, output_signature), d_detail(new hier_block2_detail(this)), hier_message_ports_in(pmt::PMT_NIL), - hier_message_ports_out(pmt::PMT_NIL), - d_max_output_buffer(std::max(output_signature->max_streams(),1), -1), - d_min_output_buffer(std::max(output_signature->max_streams(),1), -1) + hier_message_ports_out(pmt::PMT_NIL) { // This bit of magic ensures that self() works in the constructors of derived classes. gnuradio::detail::sptr_magic::create_and_stash_initial_sptr(this); @@ -184,75 +183,76 @@ namespace gr { return dot_graph_fg(hierblock2->flatten()); } - long - hier_block2::max_output_buffer(size_t i=0) + size_t + hier_block2::max_output_buffer(size_t i) { - if(d_max_output_buffer.size() <= i) + if(i >= d_detail->d_max_output_buffer.size()) throw std::invalid_argument("hier_block2::max_output_buffer: port out of range."); - return d_max_output_buffer[i]; + return d_detail->d_max_output_buffer[i]; } void - hier_block2::set_max_output_buffer(long max_output_buffer) + hier_block2::set_max_output_buffer(size_t max_output_buffer) { + if(output_signature()->max_streams()>0) { - if(d_max_output_buffer.size() == 0) + if(d_detail->d_max_output_buffer.size() == 0) throw std::length_error("hier_block2::max_output_buffer: out_sig greater than zero, buff_vect isn't"); - for(int idx = 0; idx < output_signature()->max_streams(); idx++){ - d_max_output_buffer[idx] = max_output_buffer; + for(size_t idx = 0; idx < output_signature()->max_streams(); idx++){ + d_detail->d_max_output_buffer[idx] = max_output_buffer; } } } void - hier_block2::set_max_output_buffer(int port, long max_output_buffer) + hier_block2::set_max_output_buffer(int port, size_t max_output_buffer) { - if((size_t)port >= d_max_output_buffer.size()) + if((size_t)port >= d_detail->d_max_output_buffer.size()) throw std::invalid_argument("hier_block2::max_output_buffer: port out of range."); else{ - d_max_output_buffer[port] = max_output_buffer; + d_detail->d_max_output_buffer[port] = max_output_buffer; } } - long - hier_block2::min_output_buffer(size_t i=0) + size_t + hier_block2::min_output_buffer(size_t i) { - if(d_min_output_buffer.size() <= i) + if(i >= d_detail->d_min_output_buffer.size()) throw std::invalid_argument("hier_block2::min_output_buffer: port out of range."); - return d_min_output_buffer[i]; + return d_detail->d_min_output_buffer[i]; } void - hier_block2::set_min_output_buffer(long min_output_buffer) + hier_block2::set_min_output_buffer(size_t min_output_buffer) { if(output_signature()->max_streams()>0) { - if(d_min_output_buffer.size() == 0) + if(d_detail->d_min_output_buffer.size() == 0) throw std::length_error("hier_block2::min_output_buffer: out_sig greater than zero, buff_vect isn't"); - for(int idx = 0; idx < output_signature()->max_streams(); idx++){ - d_min_output_buffer[idx] = min_output_buffer; + for(size_t idx = 0; idx < output_signature()->max_streams(); idx++){ + d_detail->d_min_output_buffer[idx] = min_output_buffer; } } } void - hier_block2::set_min_output_buffer(int port, long min_output_buffer) + hier_block2::set_min_output_buffer(int port, size_t min_output_buffer) { - if((size_t)port >= d_min_output_buffer.size()) + if((size_t)port >= d_detail->d_min_output_buffer.size()) throw std::invalid_argument("hier_block2::min_output_buffer: port out of range."); else{ - d_min_output_buffer[port] = min_output_buffer; + d_detail->d_min_output_buffer[port] = min_output_buffer; } } bool - hier_block2::set_all_min_output_buffer(void) + hier_block2::all_min_output_buffer_p(void) { - if(d_min_output_buffer.size() > 0){ + if(d_detail->d_min_output_buffer.size() > 0){ bool all_equal = true; - for(int idx = 1; (idx < d_min_output_buffer.size()) && all_equal; idx++){ - if(d_min_output_buffer[0] != d_min_output_buffer[idx]) + for(int idx = 1; (idx < d_detail->d_min_output_buffer.size()) && all_equal; idx++){ + if(d_detail->d_min_output_buffer[0] != d_detail->d_min_output_buffer[idx]) all_equal = false; } return all_equal; @@ -262,12 +262,12 @@ namespace gr { } } bool - hier_block2::set_all_max_output_buffer(void) + hier_block2::all_max_output_buffer_p(void) { - if(d_max_output_buffer.size() > 0){ + if(d_detail->d_max_output_buffer.size() > 0){ bool all_equal = true; - for(int idx = 1; (idx < d_max_output_buffer.size()) && all_equal; idx++){ - if(d_max_output_buffer[0] != d_max_output_buffer[idx]) + for(int idx = 1; (idx < d_detail->d_max_output_buffer.size()) && all_equal; idx++){ + if(d_detail->d_max_output_buffer[0] != d_detail->d_max_output_buffer[idx]) all_equal = false; } return all_equal; diff --git a/gnuradio-runtime/lib/hier_block2_detail.cc b/gnuradio-runtime/lib/hier_block2_detail.cc index bab9240edc..5b935d11ad 100644 --- a/gnuradio-runtime/lib/hier_block2_detail.cc +++ b/gnuradio-runtime/lib/hier_block2_detail.cc @@ -30,6 +30,8 @@ #include <stdexcept> #include <sstream> #include <boost/format.hpp> +#include <stdio.h> +#include <typeinfo> namespace gr { @@ -56,6 +58,9 @@ namespace gr { 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); } hier_block2_detail::~hier_block2_detail() @@ -514,14 +519,21 @@ namespace gr { // Only run setup_rpc if ControlPort config param is enabled. bool ctrlport_on = prefs::singleton()->get_bool("ControlPort", "on", false); + size_t min_buff(0), max_buff(0); + // Determine how the buffers should be set + 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 - long min_buff(-1), max_buff(-1); - bool set_all_min_buff = d_owner->set_all_min_output_buffer(); - bool set_all_max_buff = d_owner->set_all_max_output_buffer(); - if(set_all_min_buff) + if(set_all_min_buff){ + if(HIER_BLOCK2_DETAIL_DEBUG) + printf("Getting (%s) min buffer\n",(d_owner->alias()).c_str()); min_buff = d_owner->min_output_buffer(); - if(set_all_max_buff) + } + if(set_all_max_buff){ + if(HIER_BLOCK2_DETAIL_DEBUG) + printf("Getting (%s) max buffer\n",(d_owner->alias()).c_str()); max_buff = d_owner->max_output_buffer(); + } // For every block (gr::block and gr::hier_block2), set up the RPC // interface. @@ -537,10 +549,12 @@ namespace gr { } if(set_all_min_buff){ //sets the min buff for every block within hier_block2 - if(min_buff != -1){ + 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) + printf("Block (%s) min_buff (%ld)\n",(bb->alias()).c_str(),min_buff); bb->set_min_output_buffer(min_buff); } } @@ -548,6 +562,8 @@ namespace gr { 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) + printf("HBlock (%s) min_buff (%ld)\n",(hh->alias()).c_str(),min_buff); hh->set_min_output_buffer(min_buff); } } @@ -556,10 +572,12 @@ namespace gr { } if(set_all_max_buff){ //sets the max buff for every block within hier_block2 - if(max_buff != -1){ + 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) + printf("Block (%s) max_buff (%ld)\n",(bb->alias()).c_str(),max_buff); bb->set_max_output_buffer(max_buff); } } @@ -567,6 +585,8 @@ namespace gr { 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) + printf("HBlock (%s) max_buff (%ld)\n",(hh->alias()).c_str(),max_buff); hh->set_max_output_buffer(max_buff); } } @@ -583,10 +603,12 @@ namespace gr { } if(set_all_min_buff){ //sets the min buff for every block within hier_block2 - if(min_buff != -1){ + 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) + printf("Block (%s) min_buff (%ld)\n",(bb->alias()).c_str(),min_buff); bb->set_min_output_buffer(min_buff); } } @@ -594,6 +616,8 @@ namespace gr { 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) + printf("HBlock (%s) min_buff (%ld)\n",(hh->alias()).c_str(),min_buff); hh->set_min_output_buffer(min_buff); } } @@ -602,10 +626,12 @@ namespace gr { } if(set_all_max_buff){ //sets the max buff for every block within hier_block2 - if(max_buff != -1){ + 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) + printf("Block (%s) max_buff (%ld)\n",(bb->alias()).c_str(),max_buff); bb->set_max_output_buffer(max_buff); } } @@ -613,6 +639,8 @@ namespace gr { 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) + printf("HBlock (%s) max_buff (%ld)\n",(hh->alias()).c_str(),max_buff); hh->set_max_output_buffer(max_buff); } } @@ -729,16 +757,20 @@ namespace gr { // 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 != -1){ + 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) + printf("Block (%s) Port (%d) min_buff (%ld)\n",(bb->alias()).c_str(),bb_src_port,min_buff); 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) + printf("HBlock (%s) Port (%d) min_buff (%ld)\n",(hh->alias()).c_str(),hh_src_port,min_buff); hh->set_min_output_buffer(hh_src_port, min_buff); } } @@ -746,16 +778,20 @@ namespace gr { } if(!set_all_max_buff){ max_buff = d_owner->max_output_buffer(i); - if(max_buff != -1){ + 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) + printf("Block (%s) Port (%d) max_buff (%ld)\n",(bb->alias()).c_str(),bb_src_port,max_buff); 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) + printf("HBlock (%s) Port (%d) max_buff (%ld)\n",(hh->alias()).c_str(),hh_src_port,max_buff); hh->set_max_output_buffer(hh_src_port, max_buff); } } diff --git a/gnuradio-runtime/lib/hier_block2_detail.h b/gnuradio-runtime/lib/hier_block2_detail.h index df2d088ccf..8c38c3754a 100644 --- a/gnuradio-runtime/lib/hier_block2_detail.h +++ b/gnuradio-runtime/lib/hier_block2_detail.h @@ -25,7 +25,6 @@ #include <gnuradio/api.h> #include <gnuradio/hier_block2.h> -#include <gnuradio/block.h> #include <flat_flowgraph.h> #include <boost/utility.hpp> @@ -58,6 +57,10 @@ namespace gr { void set_processor_affinity(const std::vector<int> &mask); void unset_processor_affinity(); std::vector<int> processor_affinity(); + + // Track output buffer min/max settings + std::vector<size_t> d_max_output_buffer; + std::vector<size_t> d_min_output_buffer; private: // Private implementation data diff --git a/gnuradio-runtime/swig/hier_block2.i b/gnuradio-runtime/swig/hier_block2.i index d2a33b482c..12190d0452 100644 --- a/gnuradio-runtime/swig/hier_block2.i +++ b/gnuradio-runtime/swig/hier_block2.i @@ -92,12 +92,12 @@ namespace gr { std::vector<int> processor_affinity(); // Methods to manage block's min/max buffer sizes. - long max_output_buffer(int i); - void set_max_output_buffer(long max_output_buffer); - void set_max_output_buffer(int port, long max_output_buffer); - long min_output_buffer(int i); - void set_min_output_buffer(long min_output_buffer); - void set_min_output_buffer(int port, long min_output_buffer); + size_t max_output_buffer(int i); + void set_max_output_buffer(size_t max_output_buffer); + void set_max_output_buffer(int port, size_t max_output_buffer); + size_t min_output_buffer(int i); + void set_min_output_buffer(size_t min_output_buffer); + void set_min_output_buffer(int port, size_t min_output_buffer); gr::hier_block2_sptr to_hier_block2(); // Needed for Python type coercion }; |