I have a Visual Studio 2008 C ++ project where I am trying to serialize data from several classes into a custom implementation of std::streambuf .
Data classes with their serialization:
struct Header { }; inline std::ostream& operator<<( std::ostream& os, const Header& h ) { os.write( h.some_member, sizeof( h.some_member ) ); return os; } struct Info { }; inline std::ostream& operator<<( std::ostream& os, const Info& i ) { return os; }
The streambuffer implementation provides buffered I / O and overrides underflow and overflow .
class MyStreamBuf : public std::streambuf { public: MyStreamBuf() { InitBuffers(); }; private: void InitBuffers() { recv_buffer_.resize( buff_size ); send_buffer_.resize( buff_size ); setg( &recv_buffer_[ 0 ], &recv_buffer_[ 0 ], &recv_buffer_[ 0 ] ); setp( &send_buffer_[ 0 ], &send_buffer_[ 0 ] ); }; enum { buff_size = 512 }; std::vector< char_type > recv_buffer_; std::vector< char_type > send_buffer_; int_type underflow() { }; int_type overflow( char_type c ) { *pptr() = c; pbump( 1 );
My destiny is something like this:
Header h( ); Info i( ); MyStreamBuf dest; std::iostream my_stream( &dest ); dest << h << i;
But MyStreambuf::overflow never called. What do I need to do to get data in my buffer?
Thanks PaulH
Paulh source share