// 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_