sustaining_gazes/lib/3rdParty/dlib/include/dlib/sockstreambuf/sockstreambuf_unbuffered.h
2016-04-28 15:40:36 -04:00

118 lines
3.1 KiB
C++

// Copyright (C) 2003 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_SOCKSTrEAMBUF_UNBUFFERED_Hh_
#define DLIB_SOCKSTrEAMBUF_UNBUFFERED_Hh_
#include <iosfwd>
#include <streambuf>
#include "../sockets.h"
#include "sockstreambuf_abstract.h"
namespace dlib
{
// ----------------------------------------------------------------------------------------
class sockstreambuf_unbuffered : public std::streambuf
{
/*!
WHAT THIS OBJECT REPRESENTS
This is an implementation of the interface defined in
sockstreambuf_abstract.h except that it doesn't do any kind of buffering at
all. It just writes data directly to a connection. However, note that we
don't implement the flushes_output_on_read() routine as this object always
flushes immediately (since it isn't buffers. Moreover, it should be
pointed out that this object is deprecated and only present for backwards
compatibility with previous versions of dlib. So you really should use the
sockstreambuf object instead.
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_unbuffered (
connection* con_
) :
con(*con_),
peek(EOF),
lastread_next(false)
{}
sockstreambuf_unbuffered (
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_unbuffered.cpp"
#endif
#endif // DLIB_SOCKSTrEAMBUF_UNBUFFERED_Hh_