| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 | 
							- /////////////////////////////////////////////////////////////////////////////
 
- // Name:        buffer.h
 
- // Purpose:     interface of wxMemoryBuffer
 
- // Author:      wxWidgets team
 
- // Licence:     wxWindows licence
 
- /////////////////////////////////////////////////////////////////////////////
 
- /**
 
-     wxScopedCharTypeBuffer<T> is a template class for storing characters.
 
-     Data are stored in reference-counted buffer. In other words, making a copy
 
-     of wxScopedCharTypeBuffer<T> will @em not make another copy of the stored
 
-     string data, it will still point to the same location in memory.
 
-     wxScopedCharTypeBuffer<T> supports two storage modes: owned and non-owned.
 
-     "Owned" data buffer (created with CreateOwned() or wxCharTypeBuffer<T>
 
-     derived class) owns the data and frees them when the last buffer pointing
 
-     to them is destroyed.
 
-     "Non-owned" buffer (created with CreateNonOwned()), on the other hand,
 
-     references data owned by somebody else -- typical use is by
 
-     wxString::mb_str() or wxString::wc_str(), which may return non-owned buffer
 
-     pointing to wxString's internal store.
 
-     Because of this, the validity of data stored in wxScopedCharTypeBuffer<T>
 
-     is limited by the lifetime of the "parent" object that created the
 
-     buffer (e.g. the wxString on which mb_str() was called).
 
-     If you need to preserve the data for longer, assign it to
 
-     wxCharTypeBuffer<T> instead of wxScopedCharTypeBuffer<T>. On the other
 
-     hand, use wxScopedCharTypeBuffer<T> if the buffer is to be destroyed before
 
-     the "parent" object -- typical use would be creating it on the stack and
 
-     destroying when it goes out of scope (hence the class' name).
 
-     @tparam T
 
-         The type of the characters stored in this class.
 
-     @since 2.9.0
 
-     @nolibrary
 
-     @category{data}
 
- */
 
- template <typename T>
 
- class wxScopedCharTypeBuffer
 
- {
 
- public:
 
-     /// Stored characters type.
 
-     typedef T CharType;
 
-     /// Default constructor, creates NULL buffer.
 
-     wxScopedCharTypeBuffer();
 
-     /**
 
-         Creates non-owned buffer from string data @a str.
 
-         The buffer's destructor will not destroy @a str. The returned buffer's
 
-         data is valid only as long as @a str is valid.
 
-         @param str String data.
 
-         @param len If specified, length of the string, otherwise the string
 
-                    is considered to be NUL-terminated.
 
-      */
 
-     static const wxScopedCharTypeBuffer CreateNonOwned(const CharType *str, size_t len = wxNO_LEN);
 
-     /**
 
-         Creates owned buffer from @a str and takes ownership of it.
 
-         The buffer's destructor will free @a str when its reference count
 
-         reaches zero (initial count is 1).
 
-         @param str String data.
 
-         @param len If specified, length of the string, otherwise the string
 
-                    is considered to be NUL-terminated.
 
-      */
 
-     static const wxScopedCharTypeBuffer CreateOwned(CharType *str, size_t len = wxNO_LEN);
 
-     /**
 
-         Copy constructor.
 
-         Increases reference count on the data, does @em not make wxStrdup()
 
-         copy of the data.
 
-      */
 
-     wxScopedCharTypeBuffer(const wxScopedCharTypeBuffer& src);
 
-     /// Assignment operator behaves in the same way as the copy constructor.
 
-     wxScopedCharTypeBuffer& operator=(const wxScopedCharTypeBuffer& src);
 
-     /**
 
-         Destructor. Frees stored data if it is in "owned" mode and data's
 
-         reference count reaches zero.
 
-      */
 
-     ~wxScopedCharTypeBuffer();
 
-     /// Resets the buffer to NULL, freeing the data if necessary.
 
-     void reset();
 
-     /// Returns pointer to the stored data.
 
-     CharType *data();
 
-     /// Returns const pointer to the stored data.
 
-     const CharType *data() const;
 
-     /// Returns length of the string stored.
 
-     size_t length() const;
 
-     /// Implicit conversion to C string.
 
-     operator const CharType *() const;
 
-     /// Random access to the stored C string.
 
-     CharType operator[](size_t n) const;
 
- };
 
- /// Scoped char buffer.
 
- typedef wxScopedCharTypeBuffer<char> wxScopedCharBuffer;
 
- /// Scoped wchar_t buffer.
 
- typedef wxScopedCharTypeBuffer<wchar_t> wxScopedWCharBuffer;
 
- /**
 
-     wxCharTypeBuffer<T> is a template class for storing characters.
 
-     The difference from wxScopedCharTypeBuffer<T> is that this class
 
-     doesn't have non-owned mode and the data stored in it are valid for
 
-     as long as the buffer instance exists. Other than that, this class'
 
-     behaviour is the same as wxScopedCharTypeBuffer<T>'s -- in particular,
 
-     the data are reference-counted and copying the buffer is cheap.
 
-     wxScopedCharTypeBuffer<T> buffers can be converted into wxCharTypeBuffer<T>.
 
-     @tparam T
 
-         The type of the characters stored in this class.
 
-     @since 2.9.0
 
-     @nolibrary
 
-     @category{data}
 
- */
 
- template <typename T>
 
- class wxCharTypeBuffer : public wxScopedCharTypeBuffer<T>
 
- {
 
- public:
 
-     /**
 
-         Creates (owned) buffer from @a str and takes ownership of it.
 
-         @param str String data.
 
-         @param len If specified, length of the string, otherwise the string
 
-                    is considered to be NUL-terminated.
 
-         @see wxScopedCharTypeBuffer<T>::CreateOwned()
 
-      */
 
-     wxCharTypeBuffer(const CharType *str = NULL, size_t len = wxNO_LEN);
 
-     /**
 
-         Creates (owned) buffer of size @a len.
 
-         @see wxScopedCharTypeBuffer<T>::CreateOwned()
 
-      */
 
-     wxCharTypeBuffer(size_t len);
 
-     /**
 
-         Copy constructor.
 
-         Increases reference count on the data, does @em not make wxStrdup()
 
-         copy of the data.
 
-      */
 
-     wxCharTypeBuffer(const wxCharTypeBuffer& src);
 
-     /**
 
-         Makes a copy of scoped buffer @a src.
 
-         If @a src is a non-owned buffer, a copy of its data is made using
 
-         wxStrdup(). If @a src is an owned buffer, this constructor behaves
 
-         in the usual way (reference count on buffer data is incremented).
 
-      */
 
-     wxCharTypeBuffer(const wxScopedCharTypeBuffer<T>& src);
 
-     /**
 
-         Assigns @a str to this buffer and takes ownership of it (i.e.\ the
 
-         buffer becomes "owned").
 
-      */
 
-     wxCharTypeBuffer& operator=(const CharType *str);
 
-     /// Assignment operator behaves in the same way as the copy constructor.
 
-     wxCharTypeBuffer& operator=(const wxCharTypeBuffer& src);
 
-     /**
 
-         Assigns a scoped buffer to this buffer.
 
-         If @a src is a non-owned buffer, a copy of its data is made using
 
-         wxStrdup(). If @a src is an owned buffer, the assignment behaves
 
-         in the usual way (reference count on buffer data is incremented).
 
-      */
 
-     wxCharTypeBuffer& operator=(const wxScopedCharTypeBuffer<T>& src);
 
-     /**
 
-         Extends the buffer to have size @a len.
 
-         Can only be called on buffers that don't share data with another
 
-         buffer (i.e. reference count of the data is 1).
 
-         @see shrink()
 
-      */
 
-     bool extend(size_t len);
 
-     /**
 
-         Shrinks the buffer to have size @a len and NUL-terminates the string
 
-         at this length.
 
-         Can only be called on buffers that don't share data with another
 
-         buffer (i.e. reference count of the data is 1).
 
-         @param len Length to shrink to. Must not be larger than current length.
 
-         @note The string is not reallocated to take less memory.
 
-         @since 2.9.0
 
-         @see extend()
 
-      */
 
-     bool shrink(size_t len);
 
- };
 
- /**
 
-     This is a specialization of wxCharTypeBuffer<T> for @c char type.
 
-     @nolibrary
 
-     @category{data}
 
- */
 
- class wxCharBuffer : public wxCharTypeBuffer<char>
 
- {
 
- public:
 
-     typedef wxCharTypeBuffer<char> wxCharTypeBufferBase;
 
-     typedef wxScopedCharTypeBuffer<char> wxScopedCharTypeBufferBase;
 
-     wxCharBuffer(const wxCharTypeBufferBase& buf);
 
-     wxCharBuffer(const wxScopedCharTypeBufferBase& buf);
 
-     wxCharBuffer(const CharType *str = NULL);
 
-     wxCharBuffer(size_t len);
 
-     wxCharBuffer(const wxCStrData& cstr);
 
- };
 
- /**
 
-     This is a specialization of wxCharTypeBuffer<T> for @c wchar_t type.
 
-     @nolibrary
 
-     @category{data}
 
- */
 
- class wxWCharBuffer : public wxCharTypeBuffer<wchar_t>
 
- {
 
- public:
 
-     typedef wxCharTypeBuffer<wchar_t> wxCharTypeBufferBase;
 
-     typedef wxScopedCharTypeBuffer<wchar_t> wxScopedCharTypeBufferBase;
 
-     wxWCharBuffer(const wxCharTypeBufferBase& buf);
 
-     wxWCharBuffer(const wxScopedCharTypeBufferBase& buf);
 
-     wxWCharBuffer(const CharType *str = NULL);
 
-     wxWCharBuffer(size_t len);
 
-     wxWCharBuffer(const wxCStrData& cstr);
 
- };
 
- /**
 
-     @class wxMemoryBuffer
 
-     A @b wxMemoryBuffer is a useful data structure for storing arbitrary sized
 
-     blocks of memory. wxMemoryBuffer guarantees deletion of the memory block when
 
-     the object is destroyed.
 
-     @library{wxbase}
 
-     @category{data}
 
- */
 
- class wxMemoryBuffer
 
- {
 
- public:
 
-     /**
 
-         Copy constructor, refcounting is used for performance, but wxMemoryBuffer
 
-         is not a copy-on-write structure so changes made to one buffer effect all
 
-         copies made from it.
 
-         @see @ref overview_refcount
 
-     */
 
-     wxMemoryBuffer(const wxMemoryBuffer& src);
 
-     /**
 
-         Create a new buffer.
 
-         @param size
 
-             size of the new buffer, 1KiB by default.
 
-     */
 
-     wxMemoryBuffer(size_t size = 1024);
 
-     /**
 
-         Append a single byte to the buffer.
 
-         @param data
 
-             New byte to append to the buffer.
 
-     */
 
-     void AppendByte(char data);
 
-     /**
 
-         Single call to append a data block to the buffer.
 
-         @param data
 
-             Pointer to block to append to the buffer.
 
-         @param len
 
-             Length of data to append.
 
-     */
 
-     void AppendData(const void *data, size_t len);
 
-     /**
 
-         Clear the buffer contents.
 
-         The buffer won't contain any data after this method is called.
 
-         @see IsEmpty()
 
-         @since 2.9.4
 
-      */
 
-     void Clear();
 
-     /**
 
-         Ensure that the buffer is big enough and return a pointer to the start
 
-         of the empty space in the buffer. This pointer can be used to directly
 
-         write data into the buffer, this new data will be appended to the
 
-         existing data.
 
-         @param sizeNeeded
 
-             Amount of extra space required in the buffer for
 
-             the append operation
 
-     */
 
-     void* GetAppendBuf(size_t sizeNeeded);
 
-     /**
 
-         Returns the size of the buffer.
 
-     */
 
-     size_t GetBufSize() const;
 
-     /**
 
-         Return a pointer to the data in the buffer.
 
-     */
 
-     void* GetData() const;
 
-     /**
 
-         Returns the length of the valid data in the buffer.
 
-     */
 
-     size_t GetDataLen() const;
 
-     /**
 
-         Ensure the buffer is big enough and return a pointer to the
 
-         buffer which can be used to directly write into the buffer
 
-         up to @a sizeNeeded bytes.
 
-     */
 
-     void* GetWriteBuf(size_t sizeNeeded);
 
-     /**
 
-         Returns true if the buffer contains no data.
 
-         @see Clear()
 
-         @since 2.9.4
 
-      */
 
-     bool IsEmpty() const;
 
-     /**
 
-         Ensures the buffer has at least @a size bytes available.
 
-     */
 
-     void SetBufSize(size_t size);
 
-     /**
 
-         Sets the length of the data stored in the buffer.
 
-         Mainly useful for truncating existing data.
 
-         @param size
 
-             New length of the valid data in the buffer. This is
 
-             distinct from the allocated size
 
-     */
 
-     void SetDataLen(size_t size);
 
-     /**
 
-         Update the length after completing a direct append, which
 
-         you must have used GetAppendBuf() to initialise.
 
-         @param sizeUsed
 
-             This is the amount of new data that has been
 
-             appended.
 
-     */
 
-     void UngetAppendBuf(size_t sizeUsed);
 
-     /**
 
-         Update the buffer after completing a direct write, which
 
-         you must have used GetWriteBuf() to initialise.
 
-         @param sizeUsed
 
-             The amount of data written in to buffer
 
-             by the direct write
 
-     */
 
-     void UngetWriteBuf(size_t sizeUsed);
 
- };
 
 
  |