1// Sun, 18 Jun 2000
2// Y.Takagi
3
4#ifndef __SocketStream_H
5#define __SocketStream_H
6
7#include <iostream>
8
9class Socket;
10
11class socketstreambuf : public streambuf {
12public:
13	explicit socketstreambuf(Socket *sock, streamsize n);
14	~socketstreambuf();
15
16protected:
17	virtual int underflow();
18	virtual int overflow(int);
19	virtual int sync();
20
21private:
22	Socket *__sock;
23	streamsize __alsize;
24	char *__pu;
25	char *__po;
26};
27
28class socketstreambase : public virtual ios {
29public:
30	socketstreambuf *rdbuf();
31
32protected:
33	socketstreambase(Socket *sock, streamsize n);
34	~socketstreambase() {}
35
36private:
37	socketstreambuf buf;
38};
39
40inline socketstreambuf *socketstreambase::rdbuf()
41{
42	return &this->buf;
43}
44
45class isocketstream : public socketstreambase, public istream {
46public:
47	explicit isocketstream(Socket *sock, streamsize n = 4096);
48	virtual ~isocketstream();
49};
50
51
52class osocketstream : public socketstreambase, public ostream {
53public:
54	explicit osocketstream(Socket *sock, streamsize n = 4096);
55	virtual ~osocketstream();
56};
57
58#endif	// __SocketStream_H
59