]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/string.cpp
wxGTK: Fixed printing to use fonts sizes adjustment consistent with wxMSW. In
[wxWidgets.git] / src / common / string.cpp
index c97125d2c46b1c6bd73fa3cd270ea54bae912297..595caf71257daa6259c51b4c006b22304f15a879 100644 (file)
 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()
+    {
+        // calling this function triggers s_cache initialization in it, and
+        // from now on it becomes safe to call from multiple threads
+        wxString::GetCache();
+    }
+};
+
+/*
+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__
@@ -73,11 +101,11 @@ struct wxStrCacheDumper
         for ( unsigned n = 0; n < wxString::Cache::SIZE; n++ )
         {
             const wxString::Cache::Element&
-                c = wxString::ms_cache.cached[n];
+                c = wxString::GetCacheBegin()[n];
 
             printf("\t%u%s\t%p: pos=(%lu, %lu), len=%ld\n",
                    n,
-                   n == wxString::ms_cache.lastUsed ? " [*]" : "",
+                   n == wxString::LastUsedCacheElement() ? " [*]" : "",
                    c.str,
                    (unsigned long)c.pos,
                    (unsigned long)c.impl,
@@ -94,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;
 
@@ -124,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
 
@@ -2098,10 +2123,14 @@ wxUTF8StringBufferLength::~wxUTF8StringBufferLength()
 // wxCharBufferType<T>
 // ----------------------------------------------------------------------------
 
+#ifndef __VMS_BROKEN_TEMPLATES
 template<>
+#endif
 wxCharTypeBuffer<char>::Data
 wxCharTypeBuffer<char>::NullData(NULL);
 
+#ifndef __VMS_BROKEN_TEMPLATES
 template<>
+#endif
 wxCharTypeBuffer<wchar_t>::Data
 wxCharTypeBuffer<wchar_t>::NullData(NULL);