From: Christian P. <cp...@us...> - 2004-12-30 19:21:37
|
Update of /cvsroot/pclasses/pclasses2/src/IO In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25745/src/IO Modified Files: IOStream.cpp Log Message: Reading from IOStream should work now. Index: IOStream.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/IO/IOStream.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- IOStream.cpp 30 Dec 2004 17:10:34 -0000 1.1 +++ IOStream.cpp 30 Dec 2004 19:21:27 -0000 1.2 @@ -42,7 +42,8 @@ if(_inBufferSize > 0) { _inBuffer = new char[_inBufferSize]; - setg(_inBuffer, _inBuffer, _inBuffer + _inBufferSize); + //@fixme .. is this correct? + setg(_inBuffer, _inBuffer, _inBuffer); } else { @@ -52,6 +53,8 @@ IOStreamBuffer::~IOStreamBuffer() { + sync(); + if(_outBuffer) delete[] _outBuffer; @@ -125,8 +128,27 @@ int IOStreamBuffer::underflow() { - //@fixme - return traits_type::eof(); + int_type ret = traits_type::eof(); + + //unbuffered ? + if(!eback()) + { + char tmp[1]; + size_t read = _dev.read(tmp, 1); + if(read) + ret = traits_type::not_eof(tmp[0]); + } + else + { + size_t read = _dev.read(_inBuffer, _inBufferSize); + //@fixme .. is this correct? + setg(_inBuffer, _inBuffer, _inBuffer + read); + + if(read) + ret = traits_type::not_eof(_inBuffer[0]); + } + + return ret; } int IOStreamBuffer::sync() |