X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bddd7a8d8953cf4c09e56c13e1bfcc594ba0267e..a8123c1359cb21b246cc9f97d96993d8cff685fe:/include/wx/wfstream.h diff --git a/include/wx/wfstream.h b/include/wx/wfstream.h index 753e46fed1..613b4c273b 100644 --- a/include/wx/wfstream.h +++ b/include/wx/wfstream.h @@ -1,10 +1,9 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: wfstream.h +// Name: wx/wfstream.h // Purpose: File stream classes // Author: Guilhem Lavaux // Modified by: // Created: 11/07/98 -// RCS-ID: $Id$ // Copyright: (c) Guilhem Lavaux // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -12,13 +11,9 @@ #ifndef _WX_WXFSTREAM_H__ #define _WX_WXFSTREAM_H__ -#if defined(__GNUG__) && !defined(__APPLE__) -#pragma interface "wfstream.h" -#endif - #include "wx/defs.h" -#if wxUSE_STREAMS && wxUSE_FILE +#if wxUSE_STREAMS #include "wx/object.h" #include "wx/string.h" @@ -26,143 +21,243 @@ #include "wx/file.h" #include "wx/ffile.h" +#if wxUSE_FILE + // ---------------------------------------------------------------------------- // wxFileStream using wxFile // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_BASE wxFileInputStream: public wxInputStream { - public: - wxFileInputStream(const wxString& ifileName); - wxFileInputStream(wxFile& file); - wxFileInputStream(int fd); - ~wxFileInputStream(); +class WXDLLIMPEXP_BASE wxFileInputStream : public wxInputStream +{ +public: + wxFileInputStream(const wxString& ifileName); + wxFileInputStream(wxFile& file); + wxFileInputStream(int fd); + virtual ~wxFileInputStream(); - size_t GetSize() const; + wxFileOffset GetLength() const; - bool Ok() const { return m_file->IsOpened(); } + bool Ok() const { return IsOk(); } + virtual bool IsOk() const; + bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } - protected: - wxFileInputStream(); + wxFile* GetFile() const { return m_file; } - size_t OnSysRead(void *buffer, size_t size); - off_t OnSysSeek(off_t pos, wxSeekMode mode); - off_t OnSysTell() const; +protected: + wxFileInputStream(); - protected: - wxFile *m_file; - bool m_file_destroy; + size_t OnSysRead(void *buffer, size_t size); + wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); + wxFileOffset OnSysTell() const; - DECLARE_NO_COPY_CLASS(wxFileInputStream) +protected: + wxFile *m_file; + bool m_file_destroy; + + wxDECLARE_NO_COPY_CLASS(wxFileInputStream); }; -class WXDLLIMPEXP_BASE wxFileOutputStream: public wxOutputStream { - public: - wxFileOutputStream(const wxString& fileName); - wxFileOutputStream(wxFile& file); - wxFileOutputStream(int fd); - virtual ~wxFileOutputStream(); +class WXDLLIMPEXP_BASE wxFileOutputStream : public wxOutputStream +{ +public: + wxFileOutputStream(const wxString& fileName); + wxFileOutputStream(wxFile& file); + wxFileOutputStream(int fd); + virtual ~wxFileOutputStream(); + + void Sync(); + bool Close() { return m_file_destroy ? m_file->Close() : true; } + wxFileOffset GetLength() const; + + bool Ok() const { return IsOk(); } + virtual bool IsOk() const; + bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } + + wxFile* GetFile() const { return m_file; } + +protected: + wxFileOutputStream(); + + size_t OnSysWrite(const void *buffer, size_t size); + wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); + wxFileOffset OnSysTell() const; - // To solve an ambiguity on GCC -// inline wxOutputStream& Write(const void *buffer, size_t size) -// { return wxOutputStream::Write(buffer, size); } +protected: + wxFile *m_file; + bool m_file_destroy; - void Sync(); - size_t GetSize() const; + wxDECLARE_NO_COPY_CLASS(wxFileOutputStream); +}; + +class WXDLLIMPEXP_BASE wxTempFileOutputStream : public wxOutputStream +{ +public: + wxTempFileOutputStream(const wxString& fileName); + virtual ~wxTempFileOutputStream(); - bool Ok() const { return m_file->IsOpened(); } + bool Close() { return Commit(); } + WXDLLIMPEXP_INLINE_BASE virtual bool Commit() { return m_file->Commit(); } + WXDLLIMPEXP_INLINE_BASE virtual void Discard() { m_file->Discard(); } - protected: - wxFileOutputStream(); + wxFileOffset GetLength() const { return m_file->Length(); } + bool IsSeekable() const { return true; } - size_t OnSysWrite(const void *buffer, size_t size); - off_t OnSysSeek(off_t pos, wxSeekMode mode); - off_t OnSysTell() const; +protected: + size_t OnSysWrite(const void *buffer, size_t size); + wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode) + { return m_file->Seek(pos, mode); } + wxFileOffset OnSysTell() const { return m_file->Tell(); } - protected: - wxFile *m_file; - bool m_file_destroy; +private: + wxTempFile *m_file; - DECLARE_NO_COPY_CLASS(wxFileOutputStream) + wxDECLARE_NO_COPY_CLASS(wxTempFileOutputStream); }; -class WXDLLIMPEXP_BASE wxFileStream: public wxFileInputStream, public wxFileOutputStream { - public: - wxFileStream(const wxString& fileName); +class WXDLLIMPEXP_BASE wxFileStream : public wxFileInputStream, + public wxFileOutputStream +{ +public: + wxFileStream(const wxString& fileName); + virtual bool IsOk() const; + + // override (some) virtual functions inherited from both classes to resolve + // ambiguities (this wouldn't be necessary if wxStreamBase were a virtual + // base class but it isn't) + + virtual bool IsSeekable() const + { + return wxFileInputStream::IsSeekable(); + } + + virtual wxFileOffset GetLength() const + { + return wxFileInputStream::GetLength(); + } + +protected: + virtual wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode) + { + return wxFileInputStream::OnSysSeek(pos, mode); + } + + virtual wxFileOffset OnSysTell() const + { + return wxFileInputStream::OnSysTell(); + } + +private: + wxDECLARE_NO_COPY_CLASS(wxFileStream); }; +#endif //wxUSE_FILE + +#if wxUSE_FFILE + // ---------------------------------------------------------------------------- // wxFFileStream using wxFFile // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_BASE wxFFileInputStream: public wxInputStream { - public: - wxFFileInputStream(const wxString& ifileName); - wxFFileInputStream(wxFFile& file); - wxFFileInputStream(FILE *file); - ~wxFFileInputStream(); +class WXDLLIMPEXP_BASE wxFFileInputStream : public wxInputStream +{ +public: + wxFFileInputStream(const wxString& fileName, const wxString& mode = "rb"); + wxFFileInputStream(wxFFile& file); + wxFFileInputStream(FILE *file); + virtual ~wxFFileInputStream(); - size_t GetSize() const; + wxFileOffset GetLength() const; - bool Ok() const { return m_file->IsOpened(); } + bool Ok() const { return IsOk(); } + virtual bool IsOk() const; + bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } - protected: - wxFFileInputStream(); + wxFFile* GetFile() const { return m_file; } - size_t OnSysRead(void *buffer, size_t size); - off_t OnSysSeek(off_t pos, wxSeekMode mode); - off_t OnSysTell() const; +protected: + wxFFileInputStream(); - protected: - wxFFile *m_file; - bool m_file_destroy; + size_t OnSysRead(void *buffer, size_t size); + wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); + wxFileOffset OnSysTell() const; - DECLARE_NO_COPY_CLASS(wxFFileInputStream) +protected: + wxFFile *m_file; + bool m_file_destroy; + + wxDECLARE_NO_COPY_CLASS(wxFFileInputStream); }; -class WXDLLIMPEXP_BASE wxFFileOutputStream: public wxOutputStream { - public: - wxFFileOutputStream(const wxString& fileName); - wxFFileOutputStream(wxFFile& file); - wxFFileOutputStream(FILE *file); - virtual ~wxFFileOutputStream(); +class WXDLLIMPEXP_BASE wxFFileOutputStream : public wxOutputStream +{ +public: + wxFFileOutputStream(const wxString& fileName, const wxString& mode = "wb"); + wxFFileOutputStream(wxFFile& file); + wxFFileOutputStream(FILE *file); + virtual ~wxFFileOutputStream(); - // To solve an ambiguity on GCC -// inline wxOutputStream& Write(const void *buffer, size_t size) -// { return wxOutputStream::Write(buffer, size); } + void Sync(); + bool Close() { return m_file_destroy ? m_file->Close() : true; } + wxFileOffset GetLength() const; - void Sync(); - size_t GetSize() const; + bool Ok() const { return IsOk(); } + virtual bool IsOk() const; + bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } - bool Ok() const { return m_file->IsOpened(); } + wxFFile* GetFile() const { return m_file; } - protected: - wxFFileOutputStream(); +protected: + wxFFileOutputStream(); - size_t OnSysWrite(const void *buffer, size_t size); - off_t OnSysSeek(off_t pos, wxSeekMode mode); - off_t OnSysTell() const; + size_t OnSysWrite(const void *buffer, size_t size); + wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); + wxFileOffset OnSysTell() const; - protected: - wxFFile *m_file; - bool m_file_destroy; +protected: + wxFFile *m_file; + bool m_file_destroy; - DECLARE_NO_COPY_CLASS(wxFFileOutputStream) + wxDECLARE_NO_COPY_CLASS(wxFFileOutputStream); }; -class WXDLLIMPEXP_BASE wxFFileStream: public wxFFileInputStream, public wxFFileOutputStream { - public: - wxFFileStream(const wxString& fileName); -}; -#endif - // wxUSE_STREAMS && wxUSE_FILE +class WXDLLIMPEXP_BASE wxFFileStream : public wxFFileInputStream, + public wxFFileOutputStream +{ +public: + wxFFileStream(const wxString& fileName, const wxString& mode = "w+b"); -#endif - // _WX_WXFSTREAM_H__ + // override some virtual functions to resolve ambiguities, just as in + // wxFileStream + virtual bool IsOk() const; + virtual bool IsSeekable() const + { + return wxFFileInputStream::IsSeekable(); + } + virtual wxFileOffset GetLength() const + { + return wxFFileInputStream::GetLength(); + } +protected: + virtual wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode) + { + return wxFFileInputStream::OnSysSeek(pos, mode); + } + virtual wxFileOffset OnSysTell() const + { + return wxFFileInputStream::OnSysTell(); + } + +private: + wxDECLARE_NO_COPY_CLASS(wxFFileStream); +}; +#endif //wxUSE_FFILE +#endif // wxUSE_STREAMS +#endif // _WX_WXFSTREAM_H__