/* * Copyright (C) 2017-present ScyllaDB */ /* * SPDX-License-Identifier: AGPL-3.0-or-later */ #include "buffer_input_stream.hh" #include "limiting_data_source.hh" using namespace seastar; class buffer_data_source_impl : public data_source_impl { private: temporary_buffer _buf; public: buffer_data_source_impl(temporary_buffer&& buf) : _buf(std::move(buf)) {} buffer_data_source_impl(buffer_data_source_impl&&) noexcept = default; buffer_data_source_impl& operator=(buffer_data_source_impl&&) noexcept = default; virtual future> get() override { return make_ready_future>(std::move(_buf)); } virtual future> skip(uint64_t n) override { auto min = std::min(n, _buf.size()); _buf.trim_front(min); return make_ready_future>(std::move(_buf)); } }; input_stream make_buffer_input_stream(temporary_buffer&& buf) { return input_stream < char > { data_source{std::make_unique(std::move(buf))} }; } input_stream make_buffer_input_stream(temporary_buffer&& buf, seastar::noncopyable_function&& limit_generator) { auto res = data_source{std::make_unique(std::move(buf))}; return input_stream < char > { make_limiting_data_source(std::move(res), std::move(limit_generator)) }; }