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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
// Copyright (C) 2003 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_SOCKSTREAMBUF_KERNEl_1_
#define DLIB_SOCKSTREAMBUF_KERNEl_1_
#include <iosfwd>
#include <streambuf>
#include "../sockets.h"
#include "sockstreambuf_kernel_abstract.h"
namespace dlib
{
// ----------------------------------------------------------------------------------------
class sockstreambuf_kernel_1 : public std::streambuf
{
/*!
INITIAL VALUE
con == a connection
lastread_next == false
peek == EOF
CONVENTION
if (peek != EOF) then
peek == the last character read from the connection object and
is used to store the char in the event the user peeks by
calling sgetc()
if (lastread != EOF) then
lastread == the last character read and consumed by the user
if (lastread_next) then
the next character to be returned to the user is lastread because
the user put it back into the buffer
!*/
public:
sockstreambuf_kernel_1 (
connection* con_
) :
con(*con_),
peek(EOF),
lastread_next(false)
{}
sockstreambuf_kernel_1 (
const scoped_ptr<connection>& con_
) :
con(*con_),
peek(EOF),
lastread_next(false)
{}
connection* get_connection (
) { return &con; }
protected:
// output functions
int_type overflow (
int_type c
);
std::streamsize xsputn (
const char* s,
std::streamsize num
);
// input functions
int_type underflow(
);
int_type uflow(
);
int_type pbackfail(
int_type c
);
std::streamsize xsgetn (
char_type* s,
std::streamsize n
);
private:
// member data
connection& con;
int_type peek;
int_type lastread;
bool lastread_next;
};
// ----------------------------------------------------------------------------------------
}
#ifdef NO_MAKEFILE
#include "sockstreambuf_kernel_1.cpp"
#endif
#endif // DLIB_SOCKSTREAMBUF_KERNEl_1_
|