1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 06:57:45 +00:00

LibCore: Add a pure virtual parent to Core::Stream::BufferedSocket<T>

And declare a few of the stream classes in the forwarding header.
This commit is contained in:
Ali Mohammad Pur 2022-02-01 03:14:23 +03:30 committed by Andreas Kling
parent 9cf1c382df
commit 8a1dfbd484
2 changed files with 20 additions and 6 deletions

View file

@ -41,4 +41,10 @@ class UDPSocket;
enum class TimerShouldFireWhenNotVisible; enum class TimerShouldFireWhenNotVisible;
namespace Stream {
class Socket;
class Stream;
class BufferedSocketBase;
}
} }

View file

@ -742,8 +742,16 @@ private:
BufferedHelper<T> m_helper; BufferedHelper<T> m_helper;
}; };
class BufferedSocketBase : public Socket {
public:
virtual ErrorOr<size_t> read_line(Bytes buffer) = 0;
virtual ErrorOr<size_t> read_until(Bytes buffer, StringView const& candidate) = 0;
virtual ErrorOr<bool> can_read_line() = 0;
virtual size_t buffer_size() const = 0;
};
template<SocketLike T> template<SocketLike T>
class BufferedSocket final : public Socket { class BufferedSocket final : public BufferedSocketBase {
friend BufferedHelper<T>; friend BufferedHelper<T>;
public: public:
@ -753,7 +761,7 @@ public:
} }
BufferedSocket(BufferedSocket&& other) BufferedSocket(BufferedSocket&& other)
: Socket(static_cast<Socket&&>(other)) : BufferedSocketBase(static_cast<BufferedSocketBase&&>(other))
, m_helper(move(other.m_helper)) , m_helper(move(other.m_helper))
{ {
setup_notifier(); setup_notifier();
@ -780,13 +788,13 @@ public:
virtual ErrorOr<void> set_blocking(bool enabled) override { return m_helper.stream().set_blocking(enabled); } virtual ErrorOr<void> set_blocking(bool enabled) override { return m_helper.stream().set_blocking(enabled); }
virtual ErrorOr<void> set_close_on_exec(bool enabled) override { return m_helper.stream().set_close_on_exec(enabled); } virtual ErrorOr<void> set_close_on_exec(bool enabled) override { return m_helper.stream().set_close_on_exec(enabled); }
ErrorOr<size_t> read_line(Bytes buffer) { return m_helper.read_line(move(buffer)); } virtual ErrorOr<size_t> read_line(Bytes buffer) override { return m_helper.read_line(move(buffer)); }
ErrorOr<size_t> read_until(Bytes buffer, StringView const& candidate) { return m_helper.read_until(move(buffer), move(candidate)); } virtual ErrorOr<size_t> read_until(Bytes buffer, StringView const& candidate) override { return m_helper.read_until(move(buffer), move(candidate)); }
template<size_t N> template<size_t N>
ErrorOr<size_t> read_until_any_of(Bytes buffer, Array<StringView, N> candidates) { return m_helper.read_until_any_of(move(buffer), move(candidates)); } ErrorOr<size_t> read_until_any_of(Bytes buffer, Array<StringView, N> candidates) { return m_helper.read_until_any_of(move(buffer), move(candidates)); }
ErrorOr<bool> can_read_line() { return m_helper.can_read_line(); } virtual ErrorOr<bool> can_read_line() override { return m_helper.can_read_line(); }
size_t buffer_size() const { return m_helper.buffer_size(); } virtual size_t buffer_size() const override { return m_helper.buffer_size(); }
virtual ~BufferedSocket() override { } virtual ~BufferedSocket() override { }