2018-05-23 20:19:33 +00:00
|
|
|
#include <Processors/ResizeProcessor.h>
|
|
|
|
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
|
|
|
ResizeProcessor::Status ResizeProcessor::prepare()
|
|
|
|
{
|
2018-05-24 02:39:22 +00:00
|
|
|
while (true)
|
2018-05-23 20:19:33 +00:00
|
|
|
{
|
2018-05-24 02:39:22 +00:00
|
|
|
bool all_outputs_full = true;
|
|
|
|
bool all_outputs_unneeded = true;
|
2018-05-23 20:19:33 +00:00
|
|
|
|
2018-05-24 02:39:22 +00:00
|
|
|
for (const auto & output : outputs)
|
|
|
|
{
|
|
|
|
if (!output.hasData())
|
|
|
|
all_outputs_full = false;
|
2018-05-23 20:19:33 +00:00
|
|
|
|
2018-05-24 02:39:22 +00:00
|
|
|
if (output.isNeeded())
|
|
|
|
all_outputs_unneeded = false;
|
|
|
|
}
|
2018-05-23 20:19:33 +00:00
|
|
|
|
2018-05-24 02:39:22 +00:00
|
|
|
if (all_outputs_full)
|
|
|
|
return Status::PortFull;
|
2018-05-23 20:19:33 +00:00
|
|
|
|
2018-05-24 02:39:22 +00:00
|
|
|
if (all_outputs_unneeded)
|
|
|
|
{
|
|
|
|
for (auto & input : inputs)
|
|
|
|
input.setNotNeeded();
|
|
|
|
|
|
|
|
return Status::Unneeded;
|
|
|
|
}
|
2018-05-23 20:19:33 +00:00
|
|
|
|
2018-05-24 02:39:22 +00:00
|
|
|
bool all_inputs_finished = true;
|
|
|
|
bool all_inputs_have_no_data = true;
|
2018-05-23 20:19:33 +00:00
|
|
|
|
2018-05-24 02:39:22 +00:00
|
|
|
for (auto & input : inputs)
|
2018-05-23 20:19:33 +00:00
|
|
|
{
|
2018-05-24 02:39:22 +00:00
|
|
|
if (!input.isFinished())
|
|
|
|
{
|
|
|
|
all_inputs_finished = false;
|
2018-05-23 20:19:33 +00:00
|
|
|
|
2018-05-24 02:39:22 +00:00
|
|
|
input.setNeeded();
|
|
|
|
if (input.hasData())
|
|
|
|
all_inputs_have_no_data = false;
|
|
|
|
}
|
2018-05-23 20:19:33 +00:00
|
|
|
}
|
|
|
|
|
2018-05-24 02:39:22 +00:00
|
|
|
if (all_inputs_have_no_data)
|
|
|
|
{
|
|
|
|
if (all_inputs_finished)
|
2018-05-24 02:52:21 +00:00
|
|
|
{
|
|
|
|
for (auto & output : outputs)
|
|
|
|
output.setFinished();
|
2018-05-24 02:39:22 +00:00
|
|
|
return Status::Finished;
|
2018-05-24 02:52:21 +00:00
|
|
|
}
|
2018-05-24 02:39:22 +00:00
|
|
|
else
|
|
|
|
return Status::NeedData;
|
|
|
|
}
|
2018-05-23 20:19:33 +00:00
|
|
|
|
2018-05-24 02:39:22 +00:00
|
|
|
for (auto & input : inputs)
|
2018-05-23 20:19:33 +00:00
|
|
|
{
|
2018-05-24 02:39:22 +00:00
|
|
|
if (input.hasData())
|
2018-05-23 20:19:33 +00:00
|
|
|
{
|
2018-05-24 02:39:22 +00:00
|
|
|
for (auto & output : outputs)
|
2018-05-23 20:19:33 +00:00
|
|
|
{
|
2018-05-24 02:39:22 +00:00
|
|
|
if (!output.hasData())
|
|
|
|
{
|
|
|
|
output.push(input.pull());
|
|
|
|
break;
|
|
|
|
}
|
2018-05-23 20:19:33 +00:00
|
|
|
}
|
2018-05-24 02:39:22 +00:00
|
|
|
break;
|
2018-05-23 20:19:33 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|