28 const char*
what() const noexcept
override {
29 return "Couldn't finish I/O operation because the underlying pipe was closed";
81 virtual size_t poll(
char* buffer,
size_t buffer_size) = 0;
151 virtual void write(
const char* buffer,
size_t buffer_size) = 0;
203 static const size_t _InternalBufferSize = 256;
204 const size_t _PollingIntervalMilliseconds = 2;
205 char internalBuffer[_InternalBufferSize];
206 size_t currentBufferSize = 0;
207 size_t currentBufferPosition = 0;
209 std::shared_ptr<AbstractPipeReader> source;
224 bool scanInternalBuffer(std::string& result);
247 PipeScanner(std::shared_ptr<AbstractPipeReader> source) : source(source) {};
Abstract interface for non-blocking reading from a pipe.
Definition: AbstractPipe.h:53
virtual bool isOpen() const =0
Check if the pipe is currently open.
virtual ~AbstractPipeReader() noexcept
Virtual destructor for proper cleanup of derived classes.
Definition: AbstractPipe.h:58
virtual size_t poll(char *buffer, size_t buffer_size)=0
Poll for available data from the pipe without blocking.
Abstract interface for writing to a pipe.
Definition: AbstractPipe.h:115
virtual ~AbstractPipeWriter() noexcept
Virtual destructor for proper cleanup of derived classes.
Definition: AbstractPipe.h:120
virtual void write(const char *buffer, size_t buffer_size)=0
Write data to the pipe, blocking until complete.
virtual bool isOpen() const =0
Check if the pipe is currently open.
Exception thrown when a pipe operation fails due to pipe closure.
Definition: AbstractPipe.h:21
const char * what() const noexcept override
Get the exception message.
Definition: AbstractPipe.h:28
Blocking line-oriented reader built on top of AbstractPipeReader.
Definition: AbstractPipe.h:202
std::string getLine()
Read the next complete line from the pipe.
Definition: AbstractPipe.cpp:36
PipeScanner(std::shared_ptr< AbstractPipeReader > source)
Construct a PipeScanner from a source reader.
Definition: AbstractPipe.h:247