// enough) -- luckily we don't need it then neither as static __thread
// variables are initialized by 0 anyhow then and so we can use the variable
// directly
- static Cache& GetCache()
+ WXEXPORT static Cache& GetCache()
{
static wxTLS_TYPE(Cache) s_cache;
return wxTLS_VALUE(s_cache);
}
-
+
// this helper struct is used to ensure that GetCache() is called during
// static initialization time, i.e. before any threads creation, as otherwise
// the static s_cache construction inside GetCache() wouldn't be MT-safe
// profiling seems to show a small but consistent gain if we use this
// simple loop instead of starting from the last used element (there are
// a lot of misses in this function...)
- // during destruction tls calls may return NULL, thus return NULL
- // immediately
- if ( GetCacheBegin() == NULL )
+ Cache::Element * const cacheBegin = GetCacheBegin();
+ #if !wxHAS_COMPILER_TLS
+ // during destruction tls calls may return NULL, in this case return NULL
+ // immediately without accessing anything else
+ if ( cacheBegin == NULL )
return NULL;
- for ( Cache::Element *c = GetCacheBegin(); c != GetCacheEnd(); c++ )
+#endif
+ Cache::Element * const cacheEnd = GetCacheEnd();
+ for ( Cache::Element *c = cacheBegin; c != cacheEnd; c++ )
{
if ( c->str == this )
return c;
#if !defined(__WXMSW__)
#define wxCRITSECT_IS_MUTEX 1
-#ifdef __WXMAC__
- #define wxCRITSECT_INLINE
-#else
- #define wxCRITSECT_INLINE inline
-#endif
+ #define wxCRITSECT_INLINE WXEXPORT inline
#else // MSW
#define wxCRITSECT_IS_MUTEX 0
DECLARE_NO_COPY_CLASS(wxCriticalSection)
};
-#if wxCRITSECT_IS_MUTEX && !defined(__WXMAC__)
+#if wxCRITSECT_IS_MUTEX
// implement wxCriticalSection using mutexes
inline wxCriticalSection::wxCriticalSection( wxCriticalSectionType critSecType )
: m_mutex( critSecType == wxCRITSEC_DEFAULT ? wxMUTEX_RECURSIVE : wxMUTEX_DEFAULT ) { }
}
};
+/*
+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
#define THR_ID(thr) ((long)(thr)->GetId())
#endif
-#ifdef __WXMAC__
-
- // implement wxCriticalSection using mutexes
-wxCriticalSection::wxCriticalSection( wxCriticalSectionType critSecType )
- : m_mutex( critSecType == wxCRITSEC_DEFAULT ? wxMUTEX_RECURSIVE : wxMUTEX_DEFAULT ) { }
-wxCriticalSection::~wxCriticalSection() { }
-
-void wxCriticalSection::Enter() { (void)m_mutex.Lock(); }
-void wxCriticalSection::Leave() { (void)m_mutex.Unlock(); }
-
-#endif
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------