]> git.saurik.com Git - wxWidgets.git/blob - include/wx/wfstream.h
Fix infinite loop in wxGrid::PosToEdgeOfLine().
[wxWidgets.git] / include / wx / wfstream.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/wfstream.h
3 // Purpose: File stream classes
4 // Author: Guilhem Lavaux
5 // Modified by:
6 // Created: 11/07/98
7 // RCS-ID: $Id$
8 // Copyright: (c) Guilhem Lavaux
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_WXFSTREAM_H__
13 #define _WX_WXFSTREAM_H__
14
15 #include "wx/defs.h"
16
17 #if wxUSE_STREAMS
18
19 #include "wx/object.h"
20 #include "wx/string.h"
21 #include "wx/stream.h"
22 #include "wx/file.h"
23 #include "wx/ffile.h"
24
25 #if wxUSE_FILE
26
27 // ----------------------------------------------------------------------------
28 // wxFileStream using wxFile
29 // ----------------------------------------------------------------------------
30
31 class WXDLLIMPEXP_BASE wxFileInputStream : public wxInputStream
32 {
33 public:
34 wxFileInputStream(const wxString& ifileName);
35 wxFileInputStream(wxFile& file);
36 wxFileInputStream(int fd);
37 virtual ~wxFileInputStream();
38
39 wxFileOffset GetLength() const;
40
41 bool Ok() const { return IsOk(); }
42 virtual bool IsOk() const;
43 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; }
44
45 protected:
46 wxFileInputStream();
47
48 size_t OnSysRead(void *buffer, size_t size);
49 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode);
50 wxFileOffset OnSysTell() const;
51
52 protected:
53 wxFile *m_file;
54 bool m_file_destroy;
55
56 wxDECLARE_NO_COPY_CLASS(wxFileInputStream);
57 };
58
59 class WXDLLIMPEXP_BASE wxFileOutputStream : public wxOutputStream
60 {
61 public:
62 wxFileOutputStream(const wxString& fileName);
63 wxFileOutputStream(wxFile& file);
64 wxFileOutputStream(int fd);
65 virtual ~wxFileOutputStream();
66
67 void Sync();
68 bool Close() { return m_file_destroy ? m_file->Close() : true; }
69 wxFileOffset GetLength() const;
70
71 bool Ok() const { return IsOk(); }
72 virtual bool IsOk() const;
73 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; }
74
75 protected:
76 wxFileOutputStream();
77
78 size_t OnSysWrite(const void *buffer, size_t size);
79 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode);
80 wxFileOffset OnSysTell() const;
81
82 protected:
83 wxFile *m_file;
84 bool m_file_destroy;
85
86 wxDECLARE_NO_COPY_CLASS(wxFileOutputStream);
87 };
88
89 class WXDLLIMPEXP_BASE wxTempFileOutputStream : public wxOutputStream
90 {
91 public:
92 wxTempFileOutputStream(const wxString& fileName);
93 virtual ~wxTempFileOutputStream();
94
95 bool Close() { return Commit(); }
96 WXDLLIMPEXP_INLINE_BASE virtual bool Commit() { return m_file->Commit(); }
97 WXDLLIMPEXP_INLINE_BASE virtual void Discard() { m_file->Discard(); }
98
99 wxFileOffset GetLength() const { return m_file->Length(); }
100 bool IsSeekable() const { return true; }
101
102 protected:
103 size_t OnSysWrite(const void *buffer, size_t size);
104 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode)
105 { return m_file->Seek(pos, mode); }
106 wxFileOffset OnSysTell() const { return m_file->Tell(); }
107
108 private:
109 wxTempFile *m_file;
110
111 wxDECLARE_NO_COPY_CLASS(wxTempFileOutputStream);
112 };
113
114 class WXDLLIMPEXP_BASE wxFileStream : public wxFileInputStream,
115 public wxFileOutputStream
116 {
117 public:
118 wxFileStream(const wxString& fileName);
119 virtual bool IsOk() const;
120
121 // override (some) virtual functions inherited from both classes to resolve
122 // ambiguities (this wouldn't be necessary if wxStreamBase were a virtual
123 // base class but it isn't)
124
125 virtual bool IsSeekable() const
126 {
127 return wxFileInputStream::IsSeekable();
128 }
129
130 virtual wxFileOffset GetLength() const
131 {
132 return wxFileInputStream::GetLength();
133 }
134
135 protected:
136 virtual wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode)
137 {
138 return wxFileInputStream::OnSysSeek(pos, mode);
139 }
140
141 virtual wxFileOffset OnSysTell() const
142 {
143 return wxFileInputStream::OnSysTell();
144 }
145
146 private:
147 wxDECLARE_NO_COPY_CLASS(wxFileStream);
148 };
149
150 #endif //wxUSE_FILE
151
152 #if wxUSE_FFILE
153
154 // ----------------------------------------------------------------------------
155 // wxFFileStream using wxFFile
156 // ----------------------------------------------------------------------------
157
158 class WXDLLIMPEXP_BASE wxFFileInputStream : public wxInputStream
159 {
160 public:
161 wxFFileInputStream(const wxString& fileName, const wxString& mode = "rb");
162 wxFFileInputStream(wxFFile& file);
163 wxFFileInputStream(FILE *file);
164 virtual ~wxFFileInputStream();
165
166 wxFileOffset GetLength() const;
167
168 bool Ok() const { return IsOk(); }
169 virtual bool IsOk() const;
170 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; }
171
172 protected:
173 wxFFileInputStream();
174
175 size_t OnSysRead(void *buffer, size_t size);
176 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode);
177 wxFileOffset OnSysTell() const;
178
179 protected:
180 wxFFile *m_file;
181 bool m_file_destroy;
182
183 wxDECLARE_NO_COPY_CLASS(wxFFileInputStream);
184 };
185
186 class WXDLLIMPEXP_BASE wxFFileOutputStream : public wxOutputStream
187 {
188 public:
189 wxFFileOutputStream(const wxString& fileName, const wxString& mode = "wb");
190 wxFFileOutputStream(wxFFile& file);
191 wxFFileOutputStream(FILE *file);
192 virtual ~wxFFileOutputStream();
193
194 void Sync();
195 bool Close() { return m_file_destroy ? m_file->Close() : true; }
196 wxFileOffset GetLength() const;
197
198 bool Ok() const { return IsOk(); }
199 virtual bool IsOk() const;
200 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; }
201
202 protected:
203 wxFFileOutputStream();
204
205 size_t OnSysWrite(const void *buffer, size_t size);
206 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode);
207 wxFileOffset OnSysTell() const;
208
209 protected:
210 wxFFile *m_file;
211 bool m_file_destroy;
212
213 wxDECLARE_NO_COPY_CLASS(wxFFileOutputStream);
214 };
215
216 class WXDLLIMPEXP_BASE wxFFileStream : public wxFFileInputStream,
217 public wxFFileOutputStream
218 {
219 public:
220 wxFFileStream(const wxString& fileName, const wxString& mode = "w+b");
221
222 // override some virtual functions to resolve ambiguities, just as in
223 // wxFileStream
224
225 virtual bool IsOk() const;
226
227 virtual bool IsSeekable() const
228 {
229 return wxFFileInputStream::IsSeekable();
230 }
231
232 virtual wxFileOffset GetLength() const
233 {
234 return wxFFileInputStream::GetLength();
235 }
236
237 protected:
238 virtual wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode)
239 {
240 return wxFFileInputStream::OnSysSeek(pos, mode);
241 }
242
243 virtual wxFileOffset OnSysTell() const
244 {
245 return wxFFileInputStream::OnSysTell();
246 }
247
248 private:
249 wxDECLARE_NO_COPY_CLASS(wxFFileStream);
250 };
251
252 #endif //wxUSE_FFILE
253
254 #endif // wxUSE_STREAMS
255
256 #endif // _WX_WXFSTREAM_H__