|
|
@ -269,9 +269,13 @@ void Replay::mergeSegments(const SegmentMap::iterator &begin, const SegmentMap:: |
|
|
|
new_events_->reserve(new_events_size); |
|
|
|
new_events_->reserve(new_events_size); |
|
|
|
for (int n : segments_need_merge) { |
|
|
|
for (int n : segments_need_merge) { |
|
|
|
const auto &e = segments_[n]->log->events; |
|
|
|
const auto &e = segments_[n]->log->events; |
|
|
|
auto middle = new_events_->insert(new_events_->end(), e.begin(), e.end()); |
|
|
|
if (e.size() > 0) { |
|
|
|
|
|
|
|
auto insert_from = e.begin(); |
|
|
|
|
|
|
|
if (new_events_->size() > 0 && (*insert_from)->which == cereal::Event::Which::INIT_DATA) ++insert_from; |
|
|
|
|
|
|
|
auto middle = new_events_->insert(new_events_->end(), insert_from, e.end()); |
|
|
|
std::inplace_merge(new_events_->begin(), middle, new_events_->end(), Event::lessThan()); |
|
|
|
std::inplace_merge(new_events_->begin(), middle, new_events_->end(), Event::lessThan()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
updateEvents([&]() { |
|
|
|
updateEvents([&]() { |
|
|
|
events_.swap(new_events_); |
|
|
|
events_.swap(new_events_); |
|
|
|