m_nCopied = 0;
}
- 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;
while ( *format )
{
- if ( CopyFmtChar(*format++) == _T('%') )
+ if ( CopyFmtChar(*format++) == wxT('%') )
{
// skip any flags
while ( IsFlagChar(*format) )
CopyFmtChar(*format++);
// and possible width
- if ( *format == _T('*') )
+ if ( *format == wxT('*') )
CopyFmtChar(*format++);
else
SkipDigits(&format);
// precision?
- if ( *format == _T('.') )
+ if ( *format == wxT('.') )
{
CopyFmtChar(*format++);
- if ( *format == _T('*') )
+ if ( *format == wxT('*') )
CopyFmtChar(*format++);
else
SkipDigits(&format);
// and finally we should have the type
switch ( *format )
{
- case _T('S'):
- case _T('s'):
+ case wxT('S'):
+ case wxT('s'):
// all strings were converted into the same form by
// wxArgNormalizer<T>, this form depends on the context
// in which the value is used (scanf/printf/wprintf):
HandleString(*format, size, outConv, outSize);
break;
- case _T('C'):
- case _T('c'):
+ case wxT('C'):
+ case wxT('c'):
HandleChar(*format, size, outConv, outSize);
break;
switch ( outSize )
{
case Size_Long:
- InsertFmtChar(_T('l'));
+ InsertFmtChar(wxT('l'));
break;
case Size_Short:
- InsertFmtChar(_T('h'));
+ InsertFmtChar(wxT('h'));
break;
case Size_Default:
// format
if ( m_fmtOrig )
{
- return wxCharTypeBuffer<CharType>::CreateNonOwned(m_fmtOrig);
+ return wxScopedCharTypeBuffer<CharType>::CreateNonOwned(m_fmtOrig);
}
else
{
- // 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());
return m_fmt;
}
}
static bool IsFlagChar(CharType ch)
{
- return ch == _T('-') || ch == _T('+') ||
- ch == _T('0') || ch == _T(' ') || ch == _T('#');
+ return ch == wxT('-') || ch == wxT('+') ||
+ ch == wxT('0') || ch == wxT(' ') || ch == wxT('#');
}
void SkipDigits(const CharType **ptpc)
{
- while ( **ptpc >= _T('0') && **ptpc <= _T('9') )
+ while ( **ptpc >= wxT('0') && **ptpc <= wxT('9') )
CopyFmtChar(*(*ptpc)++);
}
size_t m_nCopied;
};
-
-
-#ifdef __WINDOWS
+#ifdef __WINDOWS__
// on Windows, we should use %s and %c regardless of the build:
class wxPrintfFormatConverterWchar : public wxFormatConverterBase<wchar_t>
}
};
-const wxWCharBuffer wxScanfConvertFormatW(const wchar_t *format)
+const wxScopedWCharBuffer wxScanfConvertFormatW(const wchar_t *format)
{
return wxScanfFormatConverterWchar().Convert(format);
}