git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59939
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
+
+ void shrink(size_t len)
+ {
+ wxASSERT_MSG( this->m_data->m_owned, "cannot shrink non-owned buffer" );
+ wxASSERT_MSG( this->m_data->m_ref == 1, "can't shrink shared buffer" );
+
+ wxASSERT( len <= this->length() );
+
+ this->m_data->m_length = len;
+ this->data()[len] = 0;
+ }
};
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxCharTypeBuffer<char> )
};
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxCharTypeBuffer<char> )
Can only be called on buffers that don't share data with another
buffer (i.e. reference count of the data is 1).
Can only be called on buffers that don't share data with another
buffer (i.e. reference count of the data is 1).
*/
bool extend(size_t len);
*/
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);
- wxCharTypeBuffer<CharType> Convert(const CharType *format)
+ wxScopedCharTypeBuffer<CharType> Convert(const CharType *format)
{
// this is reset to NULL if we modify the format string
m_fmtOrig = format;
{
// this is reset to NULL if we modify the format string
m_fmtOrig = format;
// format
if ( m_fmtOrig )
{
// format
if ( m_fmtOrig )
{
- return wxCharTypeBuffer<CharType>::CreateNonOwned(m_fmtOrig);
+ return wxScopedCharTypeBuffer<CharType>::CreateNonOwned(m_fmtOrig);
- // NULL-terminate converted format string:
- *m_fmtLast = 0;
+ // shrink converted format string to actual size (instead of
+ // over-sized allocation from CopyAllBefore()) and NUL-terminate
+ // it:
+ m_fmt.shrink(m_fmtLast - m_fmt.data());