X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5fec5bb62084ea8241adbc52945d812bf5e659c3..a4f6fe43c33bd7933645d110ad2719871dab043d:/include/wx/wfstream.h diff --git a/include/wx/wfstream.h b/include/wx/wfstream.h index 249453f183..226c094132 100644 --- a/include/wx/wfstream.h +++ b/include/wx/wfstream.h @@ -12,13 +12,9 @@ #ifndef _WX_WXFSTREAM_H__ #define _WX_WXFSTREAM_H__ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#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,6 +22,8 @@ #include "wx/file.h" #include "wx/ffile.h" +#if wxUSE_FILE + // ---------------------------------------------------------------------------- // wxFileStream using wxFile // ---------------------------------------------------------------------------- @@ -36,11 +34,15 @@ public: wxFileInputStream(const wxString& ifileName); wxFileInputStream(wxFile& file); wxFileInputStream(int fd); - ~wxFileInputStream(); + virtual ~wxFileInputStream(); 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; } + + wxFile* GetFile() const { return m_file; } protected: wxFileInputStream(); @@ -53,7 +55,7 @@ protected: wxFile *m_file; bool m_file_destroy; - DECLARE_NO_COPY_CLASS(wxFileInputStream) + wxDECLARE_NO_COPY_CLASS(wxFileInputStream); }; class WXDLLIMPEXP_BASE wxFileOutputStream : public wxOutputStream @@ -68,7 +70,11 @@ public: bool Close() { return m_file_destroy ? m_file->Close() : true; } 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; } + + wxFile* GetFile() const { return m_file; } protected: wxFileOutputStream(); @@ -81,7 +87,32 @@ protected: wxFile *m_file; bool m_file_destroy; - DECLARE_NO_COPY_CLASS(wxFileOutputStream) + wxDECLARE_NO_COPY_CLASS(wxFileOutputStream); +}; + +class WXDLLIMPEXP_BASE wxTempFileOutputStream : public wxOutputStream +{ +public: + wxTempFileOutputStream(const wxString& fileName); + virtual ~wxTempFileOutputStream(); + + bool Close() { return Commit(); } + WXDLLIMPEXP_INLINE_BASE virtual bool Commit() { return m_file->Commit(); } + WXDLLIMPEXP_INLINE_BASE virtual void Discard() { m_file->Discard(); } + + wxFileOffset GetLength() const { return m_file->Length(); } + bool IsSeekable() const { return true; } + +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(); } + +private: + wxTempFile *m_file; + + wxDECLARE_NO_COPY_CLASS(wxTempFileOutputStream); }; class WXDLLIMPEXP_BASE wxFileStream : public wxFileInputStream, @@ -89,11 +120,41 @@ class WXDLLIMPEXP_BASE wxFileStream : public wxFileInputStream, { 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: - DECLARE_NO_COPY_CLASS(wxFileStream) + wxDECLARE_NO_COPY_CLASS(wxFileStream); }; +#endif //wxUSE_FILE + +#if wxUSE_FFILE + // ---------------------------------------------------------------------------- // wxFFileStream using wxFFile // ---------------------------------------------------------------------------- @@ -101,14 +162,18 @@ private: class WXDLLIMPEXP_BASE wxFFileInputStream : public wxInputStream { public: - wxFFileInputStream(const wxString& fileName, const wxChar *mode = _T("rb")); + wxFFileInputStream(const wxString& fileName, const wxString& mode = "rb"); wxFFileInputStream(wxFFile& file); wxFFileInputStream(FILE *file); - ~wxFFileInputStream(); + virtual ~wxFFileInputStream(); 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; } + + wxFFile* GetFile() const { return m_file; } protected: wxFFileInputStream(); @@ -121,13 +186,13 @@ protected: wxFFile *m_file; bool m_file_destroy; - DECLARE_NO_COPY_CLASS(wxFFileInputStream) + wxDECLARE_NO_COPY_CLASS(wxFFileInputStream); }; class WXDLLIMPEXP_BASE wxFFileOutputStream : public wxOutputStream { public: - wxFFileOutputStream(const wxString& fileName, const wxChar *mode = _T("w+b")); + wxFFileOutputStream(const wxString& fileName, const wxString& mode = "wb"); wxFFileOutputStream(wxFFile& file); wxFFileOutputStream(FILE *file); virtual ~wxFFileOutputStream(); @@ -136,7 +201,11 @@ public: bool Close() { return m_file_destroy ? m_file->Close() : true; } 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; } + + wxFFile* GetFile() const { return m_file; } protected: wxFFileOutputStream(); @@ -149,19 +218,47 @@ 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); + wxFFileStream(const wxString& fileName, const wxString& mode = "w+b"); + + // 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: - DECLARE_NO_COPY_CLASS(wxFFileStream) + wxDECLARE_NO_COPY_CLASS(wxFFileStream); }; -#endif // wxUSE_STREAMS && wxUSE_FILE +#endif //wxUSE_FFILE + +#endif // wxUSE_STREAMS #endif // _WX_WXFSTREAM_H__