1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: documentation for wxCountingOutputStream class
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
10 @class wxCountingOutputStream
13 wxCountingOutputStream is a specialized output stream which does not write any
15 instead it counts how many bytes would get written if this were a normal
17 can sometimes be useful or required if some data gets serialized to a stream or
19 by using stream compression and thus the final size of the stream cannot be
21 than pretending to write the stream. One case where the resulting size would
23 known is if the data has to be written to a piece of memory and the memory has
25 allocated before writing to it (which is probably always the case when writing
32 class wxCountingOutputStream
: public wxOutputStream
36 Creates a wxCountingOutputStream object.
38 wxCountingOutputStream();
43 ~wxCountingOutputStream();
46 Returns the current size of the stream.
53 @class wxBufferedInputStream
56 This stream acts as a cache. It caches the bytes read from the specified
57 input stream (See wxFilterInputStream).
58 It uses wxStreamBuffer and sets the default in-buffer size to 1024 bytes.
59 This class may not be used without some other stream to read the data
60 from (such as a file stream or a memory stream).
66 wxStreamBuffer, wxInputStream, wxBufferedOutputStream
68 class wxBufferedInputStream
: public wxFilterInputStream
91 Constructor. It initializes the stream buffer with the data of the specified
92 stream buffer. The new stream buffer has the same attributes, size, position
93 and they share the same buffer. This will cause problems if the stream to
94 which the stream buffer belong is destroyed and the newly cloned stream
95 buffer continues to be used, trying to call functions in the (destroyed)
96 stream. It is advised to use this feature only in very local area of the
99 @sa @ref setbufferio() wxStreamBuffer:SetBufferIO
101 wxStreamBuffer(wxStreamBase
& stream
, BufMode mode
);
102 wxStreamBuffer(BufMode mode
);
103 wxStreamBuffer(const wxStreamBuffer
& buffer
);
107 Destructor. It finalizes all IO calls and frees all internal buffers if
118 Toggles the fixed flag. Usually this flag is toggled at the same time as
119 @e flushable. This flag allows (when it has the @false value) or forbids
120 (when it has the @true value) the stream buffer to resize dynamically the IO
125 void Fixed(bool fixed
);
128 Flushes the IO buffer.
133 Toggles the flushable flag. If @e flushable is disabled, no data are sent
134 to the parent stream.
136 void Flushable(bool flushable
);
139 Returns a pointer on the end of the stream buffer.
141 void * GetBufferEnd();
144 Returns a pointer on the current position of the stream buffer.
146 void * GetBufferPos();
149 Returns the size of the buffer.
151 size_t GetBufferSize();
154 Returns a pointer on the start of the stream buffer.
156 void * GetBufferStart();
159 Gets a single char from the stream buffer. It acts like the Read call.
166 Returns the amount of available data in the buffer.
168 size_t GetDataLeft();
171 Returns the current position (counted in bytes) in the stream buffer.
173 off_t
GetIntPosition();
176 Returns the amount of bytes read during the last IO call to the parent stream.
178 size_t GetLastAccess();
181 Puts a single char to the stream buffer.
185 void PutChar(char c
);
189 Copies data to @e buffer. The function returns when @e buffer is full or when
191 any more data in the current buffer.
195 size_t Read(void * buffer
, size_t size
);
196 Return value
size_t Read(wxStreamBuffer
* buffer
);
200 Resets to the initial state variables concerning the buffer.
205 Changes the current position.
207 @e mode may be one of the following:
213 The position is counted from the start of the stream.
218 The position is counted from the current position of the stream.
223 The position is counted from the end of the stream.
226 @returns Upon successful completion, it returns the new offset as
227 measured in bytes from the beginning of the stream.
228 Otherwise, it returns wxInvalidOffset.
230 off_t
Seek(off_t pos
, wxSeekMode mode
);
234 Destroys or invalidates the previous IO buffer and allocates a new one of the
237 @sa Fixed(), Flushable()
239 void SetBufferIO(char* buffer_start
, char* buffer_end
);
241 wxStreamBuffer constructor
243 wxStreamBuffer::Fixed
245 wxStreamBuffer::Flushable
246 void SetBufferIO(size_t bufsize
);
250 Sets the current position (in bytes) in the stream buffer.
252 void SetIntPosition(size_t pos
);
255 Returns the parent stream of the stream buffer.
257 wxStreamBase
* Stream();
260 Gets the current position in the stream. This position is calculated from
261 the @e real position in the stream and from the internal buffer position: so
262 it gives you the position in the @e real stream counted from the start of
265 @returns Returns the current position in the stream if possible,
266 wxInvalidOffset in the other case.
271 Truncates the buffer to the current position.
273 Note: Truncate() cannot be used to enlarge the buffer. This is
274 usually not needed since the buffer expands automatically.
282 size_t Write(const void * buffer
, size_t size
);
283 size_t Write(wxStreamBuffer
* buffer
);
289 @class wxOutputStream
292 wxOutputStream is an abstract base class which may not be used directly.
297 class wxOutputStream
: public wxStreamBase
301 Creates a dummy wxOutputStream object.
311 Closes the stream, returning @false if an error occurs. The
312 stream is closed implicitly in the destructor if Close() is not
315 If this stream wraps another stream or some other resource such
316 as a file, then the underlying resource is closed too if it is owned
317 by this stream, or left open otherwise.
322 Returns the number of bytes written during the last
323 Write(). It may return 0 even if there is no
324 error on the stream if it is only temporarily impossible to write to it.
329 Puts the specified character in the output queue and increments the
332 #define void PutC(char c) /* implementation is private */
335 Changes the stream current position.
341 One of wxFromStart, wxFromEnd, wxFromCurrent.
343 @returns The new stream position or wxInvalidOffset on error.
345 off_t
SeekO(off_t pos
, wxSeekMode mode
= wxFromStart
);
348 Returns the current stream position.
354 Reads data from the specified input stream and stores them
355 in the current stream. The data is read until an error is raised
356 by one of the two streams.
358 wxOutputStream
Write(const void * buffer
, size_t size
);
359 wxOutputStream
Write(wxInputStream
& stream_in
);
365 @class wxFilterClassFactory
368 Allows the creation of filter streams to handle compression formats such
371 For example, given a filename you can search for a factory that will
372 handle it and create a stream to decompress it:
375 factory = wxFilterClassFactory::Find(filename, wxSTREAM_FILEEXT);
377 stream = factory-NewStream(new wxFFileInputStream(filename));
380 wxFilterClassFactory::Find can also search
381 for a factory by MIME type, HTTP encoding or by wxFileSystem protocol.
382 The available factories can be enumerated
383 using @ref wxFilterClassFactory::getfirst "GetFirst() and GetNext".
389 wxFilterInputStream, wxFilterOutputStream, wxArchiveClassFactory, @ref
390 overview_wxarc "Archive formats such as zip"
392 class wxFilterClassFactory
: public wxObject
396 Returns @true if this factory can handle the given protocol, MIME type, HTTP
397 encoding or file extension.
399 When using wxSTREAM_FILEEXT for the second parameter, the first parameter
400 can be a complete filename rather than just an extension.
402 bool CanHandle(const wxString
& protocol
,
403 wxStreamProtocolType type
= wxSTREAM_PROTOCOL
);
406 A static member that finds a factory that can handle a given protocol, MIME
407 type, HTTP encoding or file extension. Returns a pointer to the class
408 factory if found, or @NULL otherwise. It does not give away ownership of the
411 When using wxSTREAM_FILEEXT for the second parameter, the first parameter
412 can be a complete filename rather than just an extension.
414 static const wxFilterClassFactory
* Find(const wxString
& protocol
,
415 wxStreamProtocolType type
= wxSTREAM_PROTOCOL
);
419 GetFirst and GetNext can be used to enumerate the available factories.
421 For example, to list them:
422 GetFirst()/GetNext() return a pointer to a factory or @NULL if no more
423 are available. They do not give away ownership of the factory.
425 static const wxFilterClassFactory
* GetFirst();
426 const wxFilterClassFactory
* GetNext();
430 Returns the wxFileSystem protocol supported by this factory. Equivalent
431 to wxString(*GetProtcols()).
433 wxString
GetProtocol();
436 Returns the protocols, MIME types, HTTP encodings or file extensions
437 supported by this factory, as an array of null terminated strings. It does
438 not give away ownership of the array or strings.
440 For example, to list the file extensions a factory supports:
442 const wxChar
* const* GetProtocols(wxStreamProtocolType type
= wxSTREAM_PROTOCOL
);
446 Create a new input or output stream to decompress or compress a given stream.
448 If the parent stream is passed as a pointer then the new filter stream
449 takes ownership of it. If it is passed by reference then it does not.
451 wxFilterInputStream
* NewStream(wxInputStream
& stream
);
452 wxFilterOutputStream
* NewStream(wxOutputStream
& stream
);
453 wxFilterInputStream
* NewStream(wxInputStream
* stream
);
454 wxFilterOutputStream
* NewStream(wxOutputStream
* stream
);
458 Remove the file extension of @e location if it is one of the file
459 extensions handled by this factory.
461 wxString
PopExtension(const wxString
& location
);
464 Adds this class factory to the list returned
465 by @ref getfirst() GetFirst()/GetNext.
467 It is not necessary to do this to use the filter streams. It is usually
468 used when implementing streams, typically the implementation will
469 add a static instance of its factory class.
471 It can also be used to change the order of a factory already in the list,
472 bringing it to the front. This isn't a thread safe operation
473 so can't be done when other threads are running that will be using the list.
475 The list does not take ownership of the factory.
480 Removes this class factory from the list returned
481 by @ref getfirst() GetFirst()/GetNext.
483 Removing from the list isn't a thread safe operation
484 so can't be done when other threads are running that will be using the list.
486 The list does not own the factories, so removing a factory does not delete it.
493 @class wxFilterOutputStream
496 A filter stream has the capability of a normal
497 stream but it can be placed on top of another stream. So, for example, it
498 can compress, encrypt the data which are passed to it and write them to another
505 wxFilterClassFactory, wxFilterInputStream
507 class wxFilterOutputStream
: public wxOutputStream
512 Initializes a "filter" stream.
514 If the parent stream is passed as a pointer then the new filter stream
515 takes ownership of it. If it is passed by reference then it does not.
517 wxFilterOutputStream(wxOutputStream
& stream
);
518 wxFilterOutputStream(wxOutputStream
* stream
);
524 @class wxFilterInputStream
527 A filter stream has the capability of a normal stream but it can be placed on
529 of another stream. So, for example, it can uncompress or decrypt the data which
531 from another stream and pass it to the requester.
537 wxFilterClassFactory, wxFilterOutputStream
539 class wxFilterInputStream
: public wxInputStream
544 Initializes a "filter" stream.
546 If the parent stream is passed as a pointer then the new filter stream
547 takes ownership of it. If it is passed by reference then it does not.
549 wxFilterInputStream(wxInputStream
& stream
);
550 wxFilterInputStream(wxInputStream
* stream
);
556 @class wxBufferedOutputStream
559 This stream acts as a cache. It caches the bytes to be written to the specified
560 output stream (See wxFilterOutputStream). The
561 data is only written when the cache is full, when the buffered stream is
562 destroyed or when calling SeekO().
564 This class may not be used without some other stream to write the data
565 to (such as a file stream or a memory stream).
571 wxStreamBuffer, wxOutputStream
573 class wxBufferedOutputStream
: public wxFilterOutputStream
577 Creates a buffered stream using a buffer of a default size of 1024 bytes for
579 the stream @e parent.
581 wxBufferedOutputStream(const wxOutputStream
& parent
);
584 Destructor. Calls Sync() and destroys the internal buffer.
586 ~wxBufferedOutputStream();
589 Calls Sync() and changes the stream position.
591 off_t
SeekO(off_t pos
, wxSeekMode mode
);
594 Flushes the buffer and calls Sync() on the parent stream.
604 wxInputStream is an abstract base class which may not be used directly.
609 class wxInputStream
: public wxStreamBase
613 Creates a dummy input stream.
623 Returns @true if some data is available in the stream right now, so that
624 calling Read() wouldn't block.
629 Returns @true after an attempt has been made to read past the end of the
632 #define bool Eof() /* implementation is private */
635 Returns the first character in the input queue and removes it,
636 blocking until it appears if necessary.
638 #define char GetC() /* implementation is private */
641 Returns the last number of bytes read.
646 Returns the first character in the input queue without removing it.
652 Reads data from the input queue and stores it in the specified output stream.
653 The data is read until an error is raised by one of the two streams.
655 @returns This function returns a reference on the current object, so the
656 user can test any states of the stream right away.
658 wxInputStream
Read(void * buffer
, size_t size
);
660 This function returns a reference on the current object
, so the user can test
661 any states of the stream right away
.
662 wxInputStream
& Read(wxOutputStream
& stream_out
);
666 Changes the stream current position.
672 One of wxFromStart, wxFromEnd, wxFromCurrent.
674 @returns The new stream position or wxInvalidOffset on error.
676 off_t
SeekI(off_t pos
, wxSeekMode mode
= wxFromStart
);
679 Returns the current stream position.
685 This function acts like the previous one except that it takes only one
686 character: it is sometimes shorter to use than the generic function.
688 size_t Ungetch(const char* buffer
, size_t size
);
689 Return value
bool Ungetch(char c
);
698 This class is the base class of most stream related classes in wxWidgets. It
700 not be used directly.
712 Creates a dummy stream object. It doesn't do anything.
722 This function returns the last error.
733 An End-Of-File occurred.
735 @b wxSTREAM_WRITE_ERROR
738 A generic error occurred on the last write call.
740 @b wxSTREAM_READ_ERROR
743 A generic error occurred on the last read call.
745 wxStreamError
GetLastError();
748 Returns the length of the stream in bytes. If the length cannot be determined
749 (this is always the case for socket streams for example), returns
752 This function is new since wxWidgets version 2.5.4
754 wxFileOffset
GetLength();
759 This function returns the size of the stream. For example, for a file it is the
765 Returns @true if no error occurred on the stream.
769 #define virtual bool IsOk() /* implementation is private */
772 Returns @true if the streams supports seeking to arbitrary offsets.
777 Internal function. It is called when the stream wants to read data of the
778 specified size. It should return the size that was actually read.
780 size_t OnSysRead(void* buffer
, size_t bufsize
);
783 Internal function. It is called when the stream needs to change the
786 off_t
OnSysSeek(off_t pos
, wxSeekMode mode
);
789 Internal function. Is is called when the stream needs to know the
797 size_t OnSysWrite(const void * buffer
, size_t bufsize
);