bool m_owned;
};
-// this has to be defined inside the DLL (and not e.g. as a static variable
-// inside an inline function) as otherwise MSVC gives link errors when the
-// functions are effectively inlined (i.e. in non-debug build)
-//
// NB: this is defined in string.cpp and not the (non-existent) buffer.cpp
-extern WXDLLIMPEXP_DATA_BASE(UntypedBufferData * const) untypedNullDataPtr;
+WXDLLIMPEXP_BASE UntypedBufferData * GetUntypedNullData();
} // namespace wxPrivate
if ( m_data == GetNullData() )
return NULL;
- wxASSERT_MSG( m_data->m_owned, _T("can't release non-owned buffer") );
- wxASSERT_MSG( m_data->m_ref == 1, _T("can't release shared buffer") );
+ wxASSERT_MSG( m_data->m_owned, wxT("can't release non-owned buffer") );
+ wxASSERT_MSG( m_data->m_ref == 1, wxT("can't release shared buffer") );
CharType * const p = m_data->Get();
// placeholder for NULL string, to simplify this code
static Data *GetNullData()
{
- return static_cast<Data *>(wxPrivate::untypedNullDataPtr);
+ return static_cast<Data *>(wxPrivate::GetUntypedNullData());
}
void IncRef()
return true;
}
+
+ 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( wxScopedCharTypeBuffer<char> )
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxCharTypeBuffer<char> )
class wxCharBuffer : public wxCharTypeBuffer<char>
wxCharBuffer(const wxCStrData& cstr);
};
-#if wxUSE_WCHAR_T
+WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxScopedCharTypeBuffer<wchar_t> )
WXDLLIMPEXP_TEMPLATE_INSTANCE_BASE( wxCharTypeBuffer<wchar_t> )
class wxWCharBuffer : public wxCharTypeBuffer<wchar_t>
wxWCharBuffer(const wxCStrData& cstr);
};
-#endif // wxUSE_WCHAR_T
// wxCharTypeBuffer<T> implicitly convertible to T*
template <typename T>
#define wxWX2WCbuf wxWCharBuffer
#endif // Unicode/ANSI
-// type of the value returned by wxString::utf8_str()
-#if wxUSE_UNICODE_UTF8
- #define wxUTF8Buf char *
-#else
- #define wxUTF8Buf wxCharBuffer
-#endif
-
// ----------------------------------------------------------------------------
// A class for holding growable data buffers (not necessarily strings)
// ----------------------------------------------------------------------------
// Other ways to append to the buffer
void AppendByte(char data)
{
- wxCHECK_RET( m_bufdata->m_data, _T("invalid wxMemoryBuffer") );
+ wxCHECK_RET( m_bufdata->m_data, wxT("invalid wxMemoryBuffer") );
m_bufdata->ResizeIfNeeded(m_bufdata->m_len + 1);
*(((char*)m_bufdata->m_data) + m_bufdata->m_len) = data;