diff options
-rw-r--r-- | gnuradio-runtime/include/gnuradio/block_detail.h | 7 | ||||
-rw-r--r-- | gnuradio-runtime/include/gnuradio/buffer.h | 4 | ||||
-rw-r--r-- | gnuradio-runtime/lib/block_detail.cc | 20 | ||||
-rw-r--r-- | gnuradio-runtime/lib/flat_flowgraph.cc | 6 |
4 files changed, 36 insertions, 1 deletions
diff --git a/gnuradio-runtime/include/gnuradio/block_detail.h b/gnuradio-runtime/include/gnuradio/block_detail.h index 916c0a46c1..a71030b439 100644 --- a/gnuradio-runtime/include/gnuradio/block_detail.h +++ b/gnuradio-runtime/include/gnuradio/block_detail.h @@ -100,6 +100,13 @@ namespace gr { // Return the number of items written on output stream which_output uint64_t nitems_written(unsigned int which_output); + // sets nitems_read and nitems_written to 0 for all input/output + // buffers. + void reset_nitem_counters(); + + // Clears all tags from the input buffers. + void clear_tags(); + /*! * \brief Adds a new tag to the given output stream. * diff --git a/gnuradio-runtime/include/gnuradio/buffer.h b/gnuradio-runtime/include/gnuradio/buffer.h index 5da383dc8f..914661b318 100644 --- a/gnuradio-runtime/include/gnuradio/buffer.h +++ b/gnuradio-runtime/include/gnuradio/buffer.h @@ -100,6 +100,8 @@ namespace gr { uint64_t nitems_written() { return d_abs_write_offset; } + void reset_nitem_counter() { d_abs_write_offset = 0; } + size_t get_sizeof_item() { return d_sizeof_item; } /*! @@ -288,6 +290,8 @@ namespace gr { uint64_t nitems_read() { return d_abs_read_offset; } + void reset_nitem_counter() { d_abs_read_offset = 0; } + size_t get_sizeof_item() { return d_buffer->get_sizeof_item(); } /*! diff --git a/gnuradio-runtime/lib/block_detail.cc b/gnuradio-runtime/lib/block_detail.cc index 9463e8d13b..484d849652 100644 --- a/gnuradio-runtime/lib/block_detail.cc +++ b/gnuradio-runtime/lib/block_detail.cc @@ -162,6 +162,26 @@ namespace gr { } void + block_detail::reset_nitem_counters() + { + for(unsigned int i = 0; i < d_ninputs; i++) { + d_input[i]->reset_nitem_counter(); + } + for(unsigned int o = 0; o < d_noutputs; o++) { + d_output[o]->reset_nitem_counter(); + } + } + + void + block_detail::clear_tags() + { + for(unsigned int i = 0; i < d_ninputs; i++) { + uint64_t max_time = 0xFFFFFFFFFFFFFFFF; // from now to the end of time + d_input[i]->buffer()->prune_tags(max_time); + } + } + + void block_detail::add_item_tag(unsigned int which_output, const tag_t &tag) { if(!pmt::is_symbol(tag.key)) { diff --git a/gnuradio-runtime/lib/flat_flowgraph.cc b/gnuradio-runtime/lib/flat_flowgraph.cc index 81c1184cfa..653cfcc3d6 100644 --- a/gnuradio-runtime/lib/flat_flowgraph.cc +++ b/gnuradio-runtime/lib/flat_flowgraph.cc @@ -225,9 +225,10 @@ namespace gr { std::cout << "merge: allocating new detail for block " << (*p) << std::endl; block->set_detail(allocate_block_detail(block)); } - else + else { if(FLAT_FLOWGRAPH_DEBUG) std::cout << "merge: reusing original detail for block " << (*p) << std::endl; + } } // Calculate the old edges that will be going away, and clear the @@ -311,6 +312,9 @@ namespace gr { // Now deal with the fact that the block details might have // changed numbers of inputs and outputs vs. in the old // flowgraph. + + block->detail()->reset_nitem_counters(); + block->detail()->clear_tags(); } } |