off_t #define'd as _off_t for VC++ (it's not a standard type)
[wxWidgets.git] / include / wx / stream.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: stream.h
3 // Purpose: "wxWindows stream" base 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 license
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef __WXSTREAM_H__
13 #define __WXSTREAM_H__
14
15 #ifdef __GNUG__
16 #pragma interface
17 #endif
18
19 #include <stdio.h>
20 #include <wx/object.h>
21 #include <wx/string.h>
22
23 #ifdef _MSC_VER
24 #define off_t _off_t
25 #endif
26
27 /*
28 * wxStream: base classes
29 */
30
31 typedef enum {
32 wxFromStart, wxFromCurrent, wxFromEnd
33 } wxSeekMode;
34
35 class wxOutputStream;
36 class wxInputStream: virtual public wxObject {
37 DECLARE_ABSTRACT_CLASS(wxInputStream)
38 public:
39 wxInputStream();
40 virtual ~wxInputStream();
41
42 virtual wxInputStream& Read(void *buffer, size_t size) = 0;
43 wxInputStream& Read(wxOutputStream& stream_out);
44
45 virtual off_t SeekI(off_t pos, wxSeekMode mode = wxFromStart) = 0;
46 virtual off_t TellI() const = 0;
47
48 virtual bool Eof() const = 0;
49 virtual size_t LastRead() const = 0;
50
51 wxInputStream& operator>>(wxOutputStream& out) { return Read(out); }
52 };
53
54 class wxOutputStream: virtual public wxObject {
55 DECLARE_ABSTRACT_CLASS(wxOutputStream)
56 public:
57 wxOutputStream();
58 virtual ~wxOutputStream();
59
60 virtual wxOutputStream& Write(const void *buffer, size_t size) = 0;
61 wxOutputStream& Write(wxInputStream& stream_in);
62
63 virtual off_t SeekO(off_t pos, wxSeekMode mode = wxFromStart) = 0;
64 virtual off_t TellO() const = 0;
65
66 virtual bool Bad() const = 0;
67 virtual size_t LastWrite() const = 0;
68
69 virtual void Sync() {}
70 };
71
72 /*
73 * "Filter" streams
74 */
75
76 class wxFilterInputStream: public wxInputStream {
77 DECLARE_CLASS(wxFilterInputStream)
78 public:
79 wxFilterInputStream(wxInputStream& stream);
80 virtual ~wxFilterInputStream();
81
82 virtual wxInputStream& Read(void *buffer, size_t size)
83 { return m_parent_i_stream->Read(buffer, size); }
84 virtual off_t SeekI(off_t pos, wxSeekMode mode = wxFromStart)
85 { return m_parent_i_stream->SeekI(pos, mode); }
86 virtual off_t TellI() const
87 { return m_parent_i_stream->TellI(); }
88
89 virtual bool Eof() const { return m_parent_i_stream->Eof(); }
90 virtual size_t LastRead() const { return m_parent_i_stream->LastRead(); }
91
92 protected:
93 wxInputStream *m_parent_i_stream;
94 };
95
96 class wxFilterOutputStream: public wxOutputStream {
97 DECLARE_CLASS(wxFilterOutputStream)
98 public:
99 wxFilterOutputStream(wxOutputStream& stream);
100 virtual ~wxFilterOutputStream();
101
102 virtual wxOutputStream& Write(const void *buffer, size_t size)
103 { return m_parent_o_stream->Write(buffer, size); }
104 virtual off_t SeekO(off_t pos, wxSeekMode mode = wxFromStart)
105 { return m_parent_o_stream->SeekO(pos, mode); }
106 virtual off_t TellO() const
107 { return m_parent_o_stream->TellO(); }
108
109 virtual bool Bad() const { return m_parent_o_stream->Bad(); }
110 virtual size_t LastWrite() const { return m_parent_o_stream->LastWrite(); }
111
112 protected:
113 wxOutputStream *m_parent_o_stream;
114 };
115
116 #endif