UCILoader 1.1.2
Small C++ library that allows user to connect to a chess engines via UCI protocol.
Loading...
Searching...
No Matches
AbstractPipe.h
1#pragma once
2
3#include <memory>
4#include <vector>
5#include <string>
6
7namespace UCILoader {
8
21 class PipeClosedException : public std::exception {
22 public:
28 const char* what() const noexcept override {
29 return "Couldn't finish I/O operation because the underlying pipe was closed";
30 }
31 };
32
54 public:
58 virtual ~AbstractPipeReader() noexcept {};
59
81 virtual size_t poll(char* buffer, size_t buffer_size) = 0;
82
92 virtual bool isOpen() const = 0;
93 };
94
116 public:
120 virtual ~AbstractPipeWriter() noexcept {};
121
151 virtual void write(const char* buffer, size_t buffer_size) = 0;
152
162 virtual bool isOpen() const = 0;
163 };
164
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;
208
209 std::shared_ptr<AbstractPipeReader> source;
210
224 bool scanInternalBuffer(std::string& result);
225
235 void pollPipe();
236
237 public:
238
247 PipeScanner(std::shared_ptr<AbstractPipeReader> source) : source(source) {};
248
267 std::string getLine();
268
269 };
270}
271
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