1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
//-----------------------------------------------------------------------------
/** @file twogtp/FdStream.h
@author Markus Enzenberger
@copyright GNU General Public License version 3 or later */
//-----------------------------------------------------------------------------
#ifndef TWOGTP_FDSTREAM_H
#define TWOGTP_FDSTREAM_H
#include <iostream>
#include <vector>
using namespace std;
//-----------------------------------------------------------------------------
/** Input stream buffer from a file descriptor. */
class FdInBuf
: public streambuf
{
public:
explicit FdInBuf(int fd, size_t buf_size = 1024);
~FdInBuf() override;
protected:
int_type underflow() override;
private:
int m_fd;
vector<char_type> m_buf;
};
//-----------------------------------------------------------------------------
/** Input stream from a file descriptor. */
class FdInStream final
: public istream
{
public:
explicit FdInStream(int fd);
private:
FdInBuf m_buf;
};
//-----------------------------------------------------------------------------
/** %Output stream buffer from a file descriptor. */
class FdOutBuf
: public streambuf
{
public:
explicit FdOutBuf(int fd)
: m_fd(fd)
{ }
~FdOutBuf() override;
protected:
int_type overflow(int_type c) override;
streamsize xsputn(const char_type* s, streamsize count) override;
private:
int m_fd;
};
//-----------------------------------------------------------------------------
/** %Output stream from a file descriptor. */
class FdOutStream final
: public ostream
{
public:
explicit FdOutStream(int fd);
private:
FdOutBuf m_buf;
};
//-----------------------------------------------------------------------------
#endif // TWOGTP_FDSTREAM_H
|