X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad8ae78878ee48f0c4eb2deb0995ab07a1d23f72..c70d645d7f85d410fa8e25c3921f5f1c775c332c:/src/common/string.cpp diff --git a/src/common/string.cpp b/src/common/string.cpp index 827099f0a6..595caf7125 100644 --- a/src/common/string.cpp +++ b/src/common/string.cpp @@ -60,6 +60,12 @@ const size_t wxString::npos = (size_t) -1; #if wxUSE_STRING_POS_CACHE +#ifdef wxHAS_COMPILER_TLS + +wxTLS_TYPE(wxString::Cache) wxString::ms_cache; + +#else // !wxHAS_COMPILER_TLS + struct wxStrCacheInitializer { wxStrCacheInitializer() @@ -70,15 +76,23 @@ struct wxStrCacheInitializer } }; +/* +wxString::Cache& wxString::GetCache() +{ + static wxTLS_TYPE(Cache) s_cache; + + return wxTLS_VALUE(s_cache); +} +*/ + static wxStrCacheInitializer gs_stringCacheInit; +#endif // wxHAS_COMPILER_TLS/!wxHAS_COMPILER_TLS + // gdb seems to be unable to display thread-local variables correctly, at least // not my 6.4.98 version under amd64, so provide this debugging helper to do it #ifdef __WXDEBUG__ -namespace -{ - struct wxStrCacheDumper { static void ShowAll() @@ -100,8 +114,6 @@ struct wxStrCacheDumper } }; -} // anonymous namespace - void wxDumpStrCache() { wxStrCacheDumper::ShowAll(); } #endif // __WXDEBUG__ @@ -110,12 +122,9 @@ void wxDumpStrCache() { wxStrCacheDumper::ShowAll(); } wxString::CacheStats wxString::ms_cacheStats; -namespace +struct wxStrCacheStatsDumper { - -struct ShowCacheStats -{ - ~ShowCacheStats() + ~wxStrCacheStatsDumper() { const wxString::CacheStats& stats = wxString::ms_cacheStats; @@ -140,9 +149,9 @@ struct ShowCacheStats stats.lentot, 100.*float(stats.lenhits)/stats.lentot); } } -} s_showCacheStats; +}; -} // anonymous namespace +static wxStrCacheStatsDumper s_showCacheStats; #endif // wxPROFILE_STRING_CACHE @@ -2114,10 +2123,14 @@ wxUTF8StringBufferLength::~wxUTF8StringBufferLength() // wxCharBufferType // ---------------------------------------------------------------------------- +#ifndef __VMS_BROKEN_TEMPLATES template<> +#endif wxCharTypeBuffer::Data wxCharTypeBuffer::NullData(NULL); +#ifndef __VMS_BROKEN_TEMPLATES template<> +#endif wxCharTypeBuffer::Data wxCharTypeBuffer::NullData(NULL);