Coverage Report

Created: 2026-04-01 06:14

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