diff options
Diffstat (limited to 'ml/dlib/dlib/sockstreambuf/sockstreambuf_unbuffered.h')
-rw-r--r-- | ml/dlib/dlib/sockstreambuf/sockstreambuf_unbuffered.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/ml/dlib/dlib/sockstreambuf/sockstreambuf_unbuffered.h b/ml/dlib/dlib/sockstreambuf/sockstreambuf_unbuffered.h new file mode 100644 index 000000000..8aa5992db --- /dev/null +++ b/ml/dlib/dlib/sockstreambuf/sockstreambuf_unbuffered.h @@ -0,0 +1,118 @@ +// 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 std::unique_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_ + |