8 #ifndef WPIUTIL_WPI_UV_STREAM_H_
9 #define WPIUTIL_WPI_UV_STREAM_H_
14 #include <initializer_list>
17 #include "wpi/ArrayRef.h"
18 #include "wpi/Signal.h"
19 #include "wpi/uv/Buffer.h"
20 #include "wpi/uv/Handle.h"
21 #include "wpi/uv/Request.h"
35 Stream& GetStream()
const {
36 return *static_cast<Stream*>(
GetRaw()->handle->data);
52 Stream& GetStream()
const {
53 return *static_cast<Stream*>(
GetRaw()->handle->data);
71 std::shared_ptr<Stream> shared_from_this() {
72 return std::static_pointer_cast<Stream>(Handle::shared_from_this());
75 std::shared_ptr<const Stream> shared_from_this()
const {
76 return std::static_pointer_cast<const Stream>(Handle::shared_from_this());
86 void Shutdown(
const std::shared_ptr<ShutdownReq>& req);
96 void Shutdown(std::function<
void()> callback =
nullptr);
150 void Write(std::initializer_list<Buffer> bufs,
151 const std::shared_ptr<WriteReq>& req) {
184 void Write(std::initializer_list<Buffer> bufs,
243 return uv_stream_set_blocking(
GetRawStream(), enable) == 0;
274 explicit Stream(uv_stream_t* uv_stream)
275 :
Handle{reinterpret_cast<uv_handle_t*>(uv_stream)} {}
278 template <
typename T,
typename U>
281 std::shared_ptr<T> shared_from_this() {
282 return std::static_pointer_cast<T>(Handle::shared_from_this());
285 std::shared_ptr<const T> shared_from_this()
const {
286 return std::static_pointer_cast<const T>(Handle::shared_from_this());
305 #endif // WPIUTIL_WPI_UV_STREAM_H_
int TryWrite(std::initializer_list< Buffer > bufs)
Queue a write request if it can be completed immediately.
Definition: Stream.h:211
Stream handle.
Definition: Stream.h:69
void Write(std::initializer_list< Buffer > bufs, std::function< void(MutableArrayRef< Buffer >, Error)> callback)
Write data to the stream.
Definition: Stream.h:184
bool IsWritable() const noexcept
Checks if the stream is writable.
Definition: Stream.h:227
sig::Signal complete
Shutdown completed signal.
Definition: Stream.h:42
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition: ArrayRef.h:42
bool IsReadable() const noexcept
Check if the stream is readable.
Definition: Stream.h:219
void Write(std::initializer_list< Buffer > bufs, const std::shared_ptr< WriteReq > &req)
Write data to the stream.
Definition: Stream.h:150
void Write(ArrayRef< Buffer > bufs, const std::shared_ptr< WriteReq > &req)
Write data to the stream.
uv_handle_t * GetRawHandle() const noexcept
Get the underlying handle data structure.
Definition: Handle.h:178
Write request.
Definition: Stream.h:48
void StopRead()
Stop reading data from the stream.
Definition: Stream.h:114
ArrayRef< T > makeArrayRef(const T &OneElt)
Construct an ArrayRef from a single element.
Definition: ArrayRef.h:447
Handle.
Definition: Handle.h:32
Shutdown request.
Definition: Stream.h:31
uv_shutdown_t * GetRaw() noexcept
Get the underlying request data structure.
Definition: Request.h:149
WPILib C++ utilities (wpiutil) namespace.
Definition: EventLoopRunner.h:17
sig::Signal< Error > finish
Write completed signal.
Definition: Stream.h:60
U * GetRaw() const noexcept
Get the underlying handle data structure.
Definition: Stream.h:294
uv_stream_t * GetRawStream() const noexcept
Get the underlying stream data structure.
Definition: Stream.h:259
size_t GetWriteQueueSize() const noexcept
Gets the amount of queued bytes waiting to be sent.
Definition: Stream.h:250
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
Definition: ArrayRef.h:287
Request.
Definition: Request.h:134
void Shutdown(const std::shared_ptr< ShutdownReq > &req)
Shutdown the outgoing (write) side of a duplex stream.
sig::Signal< Buffer &, size_t > data
Signal generated when data was read on a stream.
Definition: Stream.h:266
int TryWrite(ArrayRef< Buffer > bufs)
Queue a write request if it can be completed immediately.
void StartRead()
Start reading data from an incoming stream.
Error code.
Definition: Error.h:19
sig::Signal end
Signal generated when no more read data is available.
Definition: Stream.h:271
SignalBase is an implementation of the observer pattern, through the use of an emitting object and sl...
Definition: Signal.h:495
bool SetBlocking(bool enable) noexcept
Enable or disable blocking mode for a stream.
Definition: Stream.h:242