/* * Copyright (C) 2018-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #include #include #include #include "utils/small_vector.hh" #include "seastarx.hh" #pragma once // Accumulates data sent to the memory_data_sink allowing it // to be examined later. class memory_data_sink_buffers { using buffers_type = utils::small_vector, 1>; buffers_type _bufs; size_t _size = 0; public: using value_type = temporary_buffer; // for std::back_inserter to work size_t size() const { return _size; } buffers_type& buffers() { return _bufs; } const buffers_type& buffers() const { return _bufs; } // Strong exception guarantees void push_back(temporary_buffer&& buf) { auto size = buf.size(); _bufs.emplace_back(std::move(buf)); _size += size; } void clear() { _bufs.clear(); _size = 0; } memory_data_sink_buffers() = default; memory_data_sink_buffers(memory_data_sink_buffers&& other) : _bufs(std::move(other._bufs)) , _size(std::exchange(other._size, 0)) { } }; inline void append_buffers(memory_data_sink_buffers& c, std::span> bufs) { std::ranges::move(bufs, std::back_inserter(c)); } using memory_data_sink = seastar::util::basic_memory_data_sink;