]> git.saurik.com Git - wxWidgets.git/blame_incremental - docs/doxygen/overviews/stream.h
miscellaneous small enhancements
[wxWidgets.git] / docs / doxygen / overviews / stream.h
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: stream.h
3// Purpose: topic overview
4// Author: wxWidgets team
5// RCS-ID: $Id$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
9/**
10
11@page overview_stream Stream classes overview
12
13Classes:
14@li wxStreamBase
15@li wxStreamBuffer
16@li wxInputStream
17@li wxOutputStream
18@li wxFilterInputStream
19@li wxFilterOutputStream
20@li wxFileInputStream
21@li wxFileOutputStream
22@li wxTextInputStream
23@li wxTextOutputStream
24@li wxDataInputStream
25@li wxDataOutputStream
26
27@li @ref overview_stream_intro
28@li @ref overview_stream_example
29
30<hr>
31
32
33
34@section overview_stream_intro Introduction
35
36wxWidgets provides its own set of stream classes in order to be
37independent of the standard C++ stream class and their different
38implementations.
39
40Besides, using @c std::iostream on Linux makes impossible to write programs that are
41binary compatible across different Linux distributions.
42
43Therefore, wxStreams have been added to wxWidgets so that an applications can
44reliably compile and run on all supported platforms without dependence on a
45particular release of libg++.
46
47wxStream classes are divided in two main groups:
48
49@li The core: wxStreamBase, wxStreamBuffer, wxInputStream, wxOutputStream,
50 wxFilterInputStream, wxFilterOutputStream
51@li The "IO" classes: wxSocketInputStream, wxSocketOutputStream,
52 wxFileInputStream, wxFileOutputStream, ...
53@li Classes for reading text or binary data from a particular stream
54 such as wxTextInputStream, wxTextOutputStream, wxDataInputStream
55 and wxDataOutputStream
56
57wxStreamBase is the base definition of a stream. It defines, for example, the
58API of OnSysRead(), OnSysWrite(), OnSysSeek() and OnSysTell(). These functions are
59really implemented by the "IO" classes.
60wxInputStream and wxOutputStream classes inherit from wxStreamBase and provide
61specialized methods for input and output.
62
63wxStreamBuffer is a cache manager for wxStreamBase: it manages a stream buffer
64linked to a stream. One stream can have multiple stream buffers but one stream
65has always one autoinitialized stream buffer.
66
67wxInputStream is the base class for read-only streams. It implements Read(),
68SeekI() (I for Input), and all read or IO generic related functions.
69wxOutputStream does the same thing for write-only streams.
70
71wxFilterInputStream and wxFileterOutputStream are the base class definitions for
72stream filtering.
73Stream filtering means a stream which does no syscall but filters data which
74are passed to it and then pass them to another stream.
75For example, wxZLibInputStream is an inline stream decompressor.
76
77The "IO" classes implements the specific parts of the stream. This could be
78nothing in the case of wxMemoryInputStream and wxMemoryOutputStream which base
79themselves on wxStreamBuffer.
80This could also be a simple link to the true syscall (for example read(...), write(...)).
81
82
83@section overview_stream_example Example
84
85Usage is simple. We can take the example of wxFileInputStream and here is some
86sample code:
87
88@code
89...
90// The constructor initializes the stream buffer and open the file descriptor
91// associated to the name of the file.
92wxFileInputStream in_stream("the_file_to_be_read");
93
94// Ok, read some bytes ... nb_datas is expressed in bytes.
95in_stream.Read(data, nb_datas);
96if (in_stream.LastError() != wxSTREAM_NOERROR) {
97 // Oh oh, something bad happens.
98 // For a complete list, look into the documentation at wxStreamBase.
99}
100
101// You can also inline all like this.
102if (in_stream.Read(data, nb_datas).LastError() != wxSTREAM_NOERROR) {
103 // Do something.
104}
105
106// You can also get the last number of bytes REALLY put into the buffer.
107size_t really_read = in_stream.LastRead();
108
109// Ok, moves to the beginning of the stream. SeekI returns the last position
110// in the stream counted from the beginning.
111off_t old_position = in_stream.SeekI(0, wxFromBeginning);
112
113// What is my current position ?
114off_t position = in_stream.TellI();
115
116// wxFileInputStream will close the file descriptor on destruction.
117@endcode
118
119*/
120