From: Guilhem Lavaux Date: Fri, 4 Sep 1998 17:32:11 +0000 (+0000) Subject: * wxFileInputStream and wxFileOutputStream doesn't inherit anymore from wxFile. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/25c70b07e6484db93baee03de45b67f268c3d8e3 * wxFileInputStream and wxFileOutputStream doesn't inherit anymore from wxFile. * The destructor of wxFile isn't anymore virtual. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@669 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/file.h b/include/wx/file.h index 31c2aa6699..ede2b55b17 100644 --- a/include/wx/file.h +++ b/include/wx/file.h @@ -120,7 +120,7 @@ public: bool Error() const { return m_error; } // dtor closes the file if opened - virtual ~wxFile(); // Temporally virtual because of wxFileStream: I'll change back in a near future. + ~wxFile(); private: // copy ctor and assignment operator are private because diff --git a/include/wx/fstream.h b/include/wx/fstream.h index eab87dab21..3fb395951c 100644 --- a/include/wx/fstream.h +++ b/include/wx/fstream.h @@ -16,26 +16,30 @@ #include #include -class wxFileInputStream: public wxInputStream, virtual public wxFile { +class wxFileStreamBase { +protected: + wxFile *m_file; + bool m_file_destroy; +}; + +class wxFileInputStream: public wxInputStream, virtual public wxFileStreamBase { public: wxFileInputStream(const wxString& fileName); virtual ~wxFileInputStream(); virtual char Peek(); - virtual bool Eof() const { return wxFile::Eof(); } - - bool Ok() const { return wxFile::IsOpened(); } + bool Ok() const { return m_file->IsOpened(); } protected: - wxFileInputStream() {} + wxFileInputStream(); size_t DoRead(void *buffer, size_t size); off_t DoSeekInput(off_t pos, wxSeekMode mode); off_t DoTellInput() const; }; -class wxFileOutputStream: public wxOutputStream, virtual public wxFile { +class wxFileOutputStream: public wxOutputStream, virtual public wxFileStreamBase { public: wxFileOutputStream(const wxString& fileName); virtual ~wxFileOutputStream(); @@ -46,10 +50,10 @@ class wxFileOutputStream: public wxOutputStream, virtual public wxFile { void Sync(); - bool Ok() const { return wxFile::IsOpened(); } + bool Ok() const { return m_file->IsOpened(); } protected: - wxFileOutputStream() {} + wxFileOutputStream(); size_t DoWrite(const void *buffer, size_t size); off_t DoSeekOutput(off_t pos, wxSeekMode mode); diff --git a/src/common/fstream.cpp b/src/common/fstream.cpp index 69bb1ea670..14613367e6 100644 --- a/src/common/fstream.cpp +++ b/src/common/fstream.cpp @@ -28,13 +28,24 @@ // ---------------------------------------------------------------------------- wxFileInputStream::wxFileInputStream(const wxString& fileName) - : wxFile(fileName, read) + : wxInputStream() { + m_file = new wxFile(fileName, wxFile::read); + m_file_destroy = TRUE; m_i_streambuf->SetBufferIO(1024); } +wxFileInputStream::wxFileInputStream() + : wxInputStream() +{ + m_file_destroy = FALSE; + m_file = NULL; +} + wxFileInputStream::~wxFileInputStream() { + if (m_file_destroy) + delete m_file; } char wxFileInputStream::Peek() @@ -44,17 +55,17 @@ char wxFileInputStream::Peek() size_t wxFileInputStream::DoRead(void *buffer, size_t size) { - return wxFile::Read(buffer, size); + return m_file->Read(buffer, size); } off_t wxFileInputStream::DoSeekInput(off_t pos, wxSeekMode mode) { - return wxFile::Seek(pos, mode); + return m_file->Seek(pos, mode); } off_t wxFileInputStream::DoTellInput() const { - return wxFile::Tell(); + return m_file->Tell(); } // ---------------------------------------------------------------------------- @@ -62,37 +73,49 @@ off_t wxFileInputStream::DoTellInput() const // ---------------------------------------------------------------------------- wxFileOutputStream::wxFileOutputStream(const wxString& fileName) - : wxFile(fileName, write) +{ + m_file = new wxFile(fileName, wxFile::write); + m_file_destroy = TRUE; + m_o_streambuf->SetBufferIO(1024); +} + +wxFileOutputStream::wxFileOutputStream() + : wxOutputStream() { m_o_streambuf->SetBufferIO(1024); + m_file_destroy = FALSE; + m_file = NULL; } wxFileOutputStream::~wxFileOutputStream() { - Sync(); + if (m_file_destroy) { + Sync(); + delete m_file; + } } size_t wxFileOutputStream::DoWrite(const void *buffer, size_t size) { - size_t ret = wxFile::Write(buffer, size); - m_bad = wxFile::Error(); + size_t ret = m_file->Write(buffer, size); + m_bad = m_file->Error(); return ret; } off_t wxFileOutputStream::DoTellOutput() const { - return wxFile::Tell(); + return m_file->Tell(); } off_t wxFileOutputStream::DoSeekOutput(off_t pos, wxSeekMode mode) { - return wxFile::Seek(pos, mode); + return m_file->Seek(pos, mode); } void wxFileOutputStream::Sync() { wxOutputStream::Sync(); - wxFile::Flush(); + m_file->Flush(); } // ---------------------------------------------------------------------------- @@ -100,10 +123,15 @@ void wxFileOutputStream::Sync() // ---------------------------------------------------------------------------- wxFileStream::wxFileStream(const wxString& fileName) - : wxFile(fileName, read_write) + : wxFileInputStream(), wxFileOutputStream() { + m_file = new wxFile(fileName, wxFile::read_write); + // Reread the initial buffer. + m_i_streambuf->SetBufferIO(1024); } wxFileStream::~wxFileStream() { + Sync(); + delete m_file; }