mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-28 10:41:12 +00:00
Merge ' sstables: consumer: reuse the fragmented_temporary_buffer in read_bytes()' from Michał Chojnowski
primitive_consumer::read_bytes() destroys and creates a vector for every value it reads. This happens for every cell. We can save a bit of work by reusing the vector. Closes #10512 * github.com:scylladb/scylla: sstables: consumer: reuse the fragmented_temporary_buffer in read_bytes() utils: fragmented_temporary_buffer: add release()
This commit is contained in:
@@ -220,8 +220,9 @@ public:
|
||||
}
|
||||
inline read_status read_bytes(temporary_buffer<char>& data, uint32_t len, fragmented_temporary_buffer& where) {
|
||||
if (data.size() >= len) {
|
||||
std::vector<temporary_buffer<char>> fragments;
|
||||
fragments.push_back(data.share(0,len));
|
||||
auto fragments = std::move(where).release();
|
||||
fragments.clear();
|
||||
fragments.push_back(data.share(0, len));
|
||||
where = fragmented_temporary_buffer(std::move(fragments), len);
|
||||
data.trim_front(len);
|
||||
return read_status::ready;
|
||||
|
||||
@@ -99,6 +99,10 @@ public:
|
||||
}
|
||||
return fragmented_temporary_buffer(std::move(fragments), data_size);
|
||||
}
|
||||
|
||||
vector_type release() && noexcept {
|
||||
return std::move(_fragments);
|
||||
}
|
||||
};
|
||||
|
||||
class fragmented_temporary_buffer::view {
|
||||
|
||||
Reference in New Issue
Block a user