diff options
author | Josh Blum | 2012-11-18 00:34:42 -0800 |
---|---|---|
committer | Josh Blum | 2012-11-18 00:34:42 -0800 |
commit | c75071699583fba4fd2be4cb2142ed5e7e07e4b4 (patch) | |
tree | 9bb0d27aaac65b02aca83b7eb3df79b3b51fa608 /lib/block.cpp | |
parent | eba4d4bbec74e4daf3927e75950ea50efa99739a (diff) | |
download | sandhi-c75071699583fba4fd2be4cb2142ed5e7e07e4b4.tar.gz sandhi-c75071699583fba4fd2be4cb2142ed5e7e07e4b4.tar.bz2 sandhi-c75071699583fba4fd2be4cb2142ed5e7e07e4b4.zip |
convenience produce/consume + propagate_tags default
Diffstat (limited to 'lib/block.cpp')
-rw-r--r-- | lib/block.cpp | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/lib/block.cpp b/lib/block.cpp index 039daf3..d84cc8b 100644 --- a/lib/block.cpp +++ b/lib/block.cpp @@ -2,6 +2,7 @@ #include "element_impl.hpp" #include <gras/block.hpp> +#include <boost/foreach.hpp> using namespace gras; @@ -97,6 +98,24 @@ void Block::produce(const size_t which_output, const size_t num_items) (*this)->block->produce(which_output, num_items); } +void Block::consume(const size_t num_items) +{ + const size_t num_inputs = (*this)->block->get_num_inputs(); + for (size_t i = 0; i < num_inputs; i++) + { + (*this)->block->consume(i, num_items); + } +} + +void Block::produce(const size_t num_items) +{ + const size_t num_outputs = (*this)->block->get_num_outputs(); + for (size_t o = 0; o < num_outputs; o++) + { + (*this)->block->produce(o, num_items); + } +} + item_index_t Block::get_consumed(const size_t which_input) { return (*this)->block->items_consumed[which_input]; @@ -123,9 +142,18 @@ void Block::erase_input_tags(const size_t which_input) (*this)->block->input_tags[which_input].clear(); } -void Block::propagate_tags(const size_t, const TagIter &) +void Block::propagate_tags(const size_t i, const TagIter &iter) { - //NOP + const size_t num_outputs = (*this)->block->get_num_outputs(); + for (size_t o = 0; o < num_outputs; o++) + { + BOOST_FOREACH(gras::Tag t, iter) + { + t.offset -= this->get_consumed(i); + t.offset += this->get_produced(o); + this->post_output_tag(o, t); + } + } } bool Block::start(void) |