]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/stream.h
avoid infinite recursion for richtooltops, (hopefully) fixes #15070
[wxWidgets.git] / interface / wx / stream.h
index 7ab40df6608cca70441fbb29be5e92853ae1e013..6fd27a412607116e8657c04d7c8e1de30eff55aa 100644 (file)
@@ -80,6 +80,18 @@ public:
     */
     virtual bool IsSeekable() const;
 
+    /**
+        Resets the stream state.
+
+        By default, resets the stream to good state, i.e. clears any errors.
+        Since wxWidgets 2.9.3 can be also used to explicitly set the state to
+        the specified error (the @a error argument didn't exist in the previous
+        versions).
+
+        @see GetLastError()
+     */
+    void Reset(wxStreamError error = wxSTREAM_NO_ERROR);
+
     /**
         Returns the opposite of IsOk().
         You can use this function to test the validity of the stream as if
@@ -138,6 +150,13 @@ protected:
 class wxStreamBuffer
 {
 public:
+    /** BufMode flags */
+    enum BufMode
+    {
+        read,
+        write,
+        read_write
+    };
 
     /**
         Constructor, creates a new stream buffer using @a stream as a parent stream
@@ -229,7 +248,7 @@ public:
         Destructor.
         It finalizes all IO calls and frees all internal buffers if necessary.
     */
-    wxStreamBuffer();
+    ~wxStreamBuffer();
 
     /**
         Fill the IO buffer.
@@ -589,7 +608,7 @@ public:
 
     /**
         Reads the specified amount of bytes and stores the data in buffer.
-        To check if the call was successfull you must use LastRead() to check
+        To check if the call was successful you must use LastRead() to check
         if this call did actually read @a size bytes (if it didn't, GetLastError()
         should return a meaningful value).
 
@@ -668,7 +687,7 @@ protected:
         reached or an error occurred (in this last case the internal @c m_lasterror
         variable should be set accordingly as well).
     */
-    size_t OnSysRead(void* buffer, size_t bufsize);
+    size_t OnSysRead(void* buffer, size_t bufsize) = 0;
 };
 
 
@@ -1047,3 +1066,57 @@ public:
 };
 
 
+/**
+    @class wxWrapperInputStream
+
+    A wrapper input stream is a kind of filter stream which forwards all the
+    operations to its base stream. This is useful to build utility classes such
+    as wxFSInputStream.
+
+    @note
+    The interface of this class is the same as that of wxInputStream.
+    Only a constructor differs and it is documented below.
+
+    @library{wxbase}
+    @category{streams}
+
+    @see wxFSInputStream, wxFilterInputStream
+    @since 2.9.4
+*/
+class wxWrapperInputStream : public wxFilterInputStream
+{
+public:
+    //@{
+    /**
+        Initializes a wrapper stream.
+
+        If the parent stream is passed as a pointer then the new wrapper stream
+        takes ownership of it. If it is passed by reference then it does not.
+    */
+    wxWrapperInputStream(wxInputStream& stream);
+    wxWrapperInputStream(wxInputStream* stream);
+    //@}
+
+protected:
+    /**
+        Default constructor, use InitParentStream() to finish initialization.
+
+        This constructor can be used by the derived classes from their own
+        constructors when the parent stream can't be specified immediately.
+        The derived class must call InitParentStream() later to do it.
+     */
+    wxWrapperInputStream();
+
+    //@{
+    /**
+        Set up the wrapped stream for an object initialized using the default
+        constructor.
+
+        The ownership logic is the same as for the non-default constructor,
+        i.e. this object takes ownership of the stream if it's passed by
+        pointer but not if it's passed by reference.
+     */
+    void InitParentStream(wxInputStream& stream);
+    void InitParentStream(wxInputStream* stream);
+    //@}
+};