summaryrefslogtreecommitdiff
path: root/lib/block_handlers.cpp
diff options
context:
space:
mode:
authorJosh Blum2012-09-18 13:13:09 -0700
committerJosh Blum2012-09-18 13:13:09 -0700
commite951507b7f81d019ae0120c04554145dc0b5a257 (patch)
treeb587cc9786bb692fa0c272ec661df5c37f51e387 /lib/block_handlers.cpp
parent85e3a7a3a450d0a778d0b730316c7d993d1f5c5f (diff)
downloadsandhi-e951507b7f81d019ae0120c04554145dc0b5a257.tar.gz
sandhi-e951507b7f81d019ae0120c04554145dc0b5a257.tar.bz2
sandhi-e951507b7f81d019ae0120c04554145dc0b5a257.zip
added update hook for changing history/output multiple
Diffstat (limited to 'lib/block_handlers.cpp')
-rw-r--r--lib/block_handlers.cpp38
1 files changed, 27 insertions, 11 deletions
diff --git a/lib/block_handlers.cpp b/lib/block_handlers.cpp
index 684b6fa..a069387 100644
--- a/lib/block_handlers.cpp
+++ b/lib/block_handlers.cpp
@@ -76,6 +76,13 @@ void ElementImpl::handle_block_msg(
return;
}
+ //user changed some input settings like history or reserve reqs
+ if (msg.type() == typeid(UpdateInputsMessage))
+ {
+ this->input_update(task_iface);
+ return;
+ }
+
ASSERT(msg.type() == typeid(TopBlockMessage));
const size_t num_inputs = task_iface.get_num_inputs();
@@ -180,23 +187,32 @@ void ElementImpl::topology_update(const tsbe::TaskInterface &task_iface)
this->input_tags_changed.resize(num_inputs);
this->input_tags.resize(num_inputs);
+ //TODO: think more about this:
+ if (num_inputs == 0 and num_outputs == 0)
+ {
+ HERE();
+ this->mark_done(task_iface);
+ }
+
+ this->topology_init = true;
+ this->input_update(task_iface);
+}
+
+void ElementImpl::input_update(const tsbe::TaskInterface &task_iface)
+{
+ const size_t num_inputs = task_iface.get_num_inputs();
+ const size_t num_outputs = task_iface.get_num_outputs();
+
//impose input reserve requirements based on relative rate and output multiple
- this->input_multiple_items.resize(num_inputs, 1);
+ resize_fill_grow(this->input_multiple_items, num_inputs, 1);
for (size_t i = 0; i < num_inputs; i++)
{
//TODO, this is a little cheap, we only look at output multiple [0]
const size_t multiple = (num_outputs)?this->output_multiple_items.front():1;
- input_multiple_items[i] = size_t(std::ceil(multiple/this->relative_rate));
- if (input_multiple_items[i] == 0) input_multiple_items[i] = 1;
+ this->input_multiple_items[i] = size_t(std::ceil(multiple/this->relative_rate));
+ if (this->input_multiple_items[i] == 0) this->input_multiple_items[i] = 1;
}
//init the history comprehension on input queues
- this->input_queues.init(this->input_history_items, input_multiple_items, this->input_items_sizes);
-
- //TODO: think more about this:
- if (num_inputs == 0 and num_outputs == 0)
- {
- HERE();
- this->mark_done(task_iface);
- }
+ this->input_queues.init(this->input_history_items, this->input_multiple_items, this->input_items_sizes);
}