12 const std::vector<uint8_t>& after) {
15 const size_t min_size = std::min(before.size(), after.size());
16 const size_t max_size = std::max(before.size(), after.size());
19 uint32_t diff_start = 0;
21 for (
size_t i = 0; i < min_size; ++i) {
22 if (before[i] != after[i]) {
25 diff_start =
static_cast<uint32_t
>(i);
32 summary.
ranges.emplace_back(diff_start,
static_cast<uint32_t
>(i));
38 summary.
ranges.emplace_back(diff_start,
static_cast<uint32_t
>(min_size));
41 if (before.size() != after.size()) {
43 summary.
ranges.emplace_back(
static_cast<uint32_t
>(min_size),
44 static_cast<uint32_t
>(max_size));
50 if (summary.
ranges.size() > 1) {
52 std::vector<std::pair<uint32_t, uint32_t>> merged;
53 merged.reserve(summary.
ranges.size());
54 for (
const auto& r : summary.
ranges) {
55 if (merged.empty() || merged.back().second < r.first) {
59 merged.back().second = std::max(merged.back().second, r.second);
61 summary.
ranges = std::move(merged);