summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/sockstreambuf/sockstreambuf_unbuffered.h
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/sockstreambuf/sockstreambuf_unbuffered.h')
-rw-r--r--ml/dlib/dlib/sockstreambuf/sockstreambuf_unbuffered.h118
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_
+