14 const int64_t start = offset;
15 const int64_t end = offset + int64_t(size);
17 int64_t actual_end = start;
19 for (
auto b: db.get_buffer_table())
21 const int64_t b_start = db.get_offset(b);
22 const int64_t b_size = db.get_size(b);
27 const int64_t b_end = int64_t(uint64_t(b_start) + uint64_t(b_size));
29 const int64_t intersection_start = std::max(start, b_start);
30 const int64_t intersection_end = std::min(end, b_end);
32 if (intersection_start < intersection_end && intersection_start <= actual_end)
34 if (b != decoded_buffer)
39 const size_t read_buffer_size = size_t(b_size);
41 if (read_buffer.size() < read_buffer_size)
42 read_buffer.resize(read_buffer_size);
56 buffer + intersection_start - start,
57 read_buffer.data() + intersection_start - b_start,
58 size_t(intersection_end - intersection_start)
61 if (intersection_end > actual_end)
62 actual_end = intersection_end;
66 return size_t(actual_end - start);