MergeSelector: development [#METR-21840].

This commit is contained in:
Alexey Milovidov 2016-10-30 11:54:27 +03:00
parent 4dec8babf1
commit a832a8cd71

View File

@ -71,10 +71,20 @@ void selectWithinPartition(
} }
size_t max_level = 0; size_t max_level = 0;
size_t prev_level = -1;
bool has_range_of_same_level = false;
for (const auto & part : parts) for (const auto & part : parts)
{
if (part.level > max_level) if (part.level > max_level)
max_level = part.level; max_level = part.level;
if (part.level == prev_level)
has_range_of_same_level = true;
prev_level = part.level;
}
for (size_t level = 0; level <= max_level; ++level) for (size_t level = 0; level <= max_level; ++level)
{ {
bool in_range = false; bool in_range = false;
@ -83,7 +93,7 @@ void selectWithinPartition(
for (size_t i = 0; i <= parts_size; ++i) for (size_t i = 0; i <= parts_size; ++i)
{ {
if (i < parts_size && parts[i].level == level) if (i < parts_size && (parts[i].level == level || !has_range_of_same_level))
{ {
if (!in_range) if (!in_range)
{ {
@ -118,6 +128,9 @@ void selectWithinPartition(
} }
} }
} }
if (!has_range_of_same_level)
break;
} }
} }