summaryrefslogtreecommitdiff
path: root/lib/block_task.cpp
diff options
context:
space:
mode:
authorJosh Blum2012-09-09 19:41:29 -0700
committerJosh Blum2012-09-09 19:41:29 -0700
commit0ed890033370ae853014f0d34065d9f566e86e54 (patch)
tree537e0968d7e10913fbb7e42622571d99f6b9eb0e /lib/block_task.cpp
parent753237c73815a5c18f29a4bbd9df05b6af8b8e57 (diff)
downloadsandhi-0ed890033370ae853014f0d34065d9f566e86e54.tar.gz
sandhi-0ed890033370ae853014f0d34065d9f566e86e54.tar.bz2
sandhi-0ed890033370ae853014f0d34065d9f566e86e54.zip
simplify forecast and its fail logic
Diffstat (limited to 'lib/block_task.cpp')
-rw-r--r--lib/block_task.cpp28
1 files changed, 11 insertions, 17 deletions
diff --git a/lib/block_task.cpp b/lib/block_task.cpp
index 5b3ae00..b9347e8 100644
--- a/lib/block_task.cpp
+++ b/lib/block_task.cpp
@@ -157,26 +157,20 @@ void ElementImpl::handle_task(const tsbe::TaskInterface &task_iface)
//-- forecast
//------------------------------------------------------------------
forecast_again_you_jerk:
- if (not this->enable_fixed_rate)
+ if (this->forecast_enable)
{
- block_ptr->forecast(num_output_items, work_ninput_items);
+ fcast_ninput_items = work_ninput_items;
+ block_ptr->forecast(num_output_items, fcast_ninput_items);
for (size_t i = 0; i < num_inputs; i++)
{
- if (size_t(work_ninput_items[i]) > this->input_items[i].size())
- {
- for (size_t j = 0; j < num_inputs; j++)
- {
- work_ninput_items[j] = this->input_items[j]._len;
- }
- num_output_items = num_output_items/2;
- if (num_output_items == 0)
- {
- this->forecast_fail = true;
- this->conclusion(task_iface, inputs_done);
- return;
- }
- goto forecast_again_you_jerk;
- }
+ if (fcast_ninput_items[i] <= work_ninput_items[i]) continue;
+
+ num_output_items = num_output_items/2; //backoff regime
+ if (num_output_items) goto forecast_again_you_jerk;
+
+ this->forecast_fail = true;
+ this->conclusion(task_iface, inputs_done);
+ return;
}
}
this->forecast_fail = false;