]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/memory.cpp
swap all characters instead of just the last one in a loop in wxMBConv_iconv::ToWChar()
[wxWidgets.git] / src / common / memory.cpp
index 7c062d71a72cf7849712cd4f5f8fe08ff29454a0..4f593c3de1b5fe89c1112a4714e3a3349898acb0 100644 (file)
 
 #if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
 
+#include "wx/memory.h"
+
 #ifndef WX_PRECOMP
+    #ifdef __WXMSW__
+        #include "wx/msw/wrapwin.h"
+    #endif
     #include "wx/utils.h"
     #include "wx/app.h"
     #include "wx/hash.h"
+    #include "wx/log.h"
 #endif
 
 #if wxUSE_THREADS
     #include "wx/thread.h"
 #endif
 
-#include "wx/log.h"
 #include <stdlib.h>
 
 #include "wx/ioswrap.h"
 
 #if !defined(__WATCOMC__) && !(defined(__VMS__) && ( __VMS_VER < 70000000 ) )\
-     && !defined( __MWERKS__ ) && !defined(__SALFORDC__)
+     && !defined( __MWERKS__ )
 #include <memory.h>
 #endif
 
 #include <stdarg.h>
 #include <string.h>
 
-#ifdef __WXMSW__
-#include "wx/msw/wrapwin.h"
-
-#ifdef GetClassInfo
-#undef GetClassInfo
-#endif
-
-#ifdef GetClassName
-#undef GetClassName
-#endif
-
-#endif
-
-#include "wx/memory.h"
-
 #if wxUSE_THREADS && defined(__WXDEBUG__)
 #define USE_THREADSAFE_MEMORY_ALLOCATION 1
 #else
@@ -462,6 +452,9 @@ static wxMarkerType markerCalc[2];
 int wxDebugContext::m_balign = (int)((char *)&markerCalc[1] - (char*)&markerCalc[0]);
 int wxDebugContext::m_balignmask = (int)((char *)&markerCalc[1] - (char*)&markerCalc[0]) - 1;
 
+// Pointer to global function to call at shutdown
+wxShutdownNotifyFunction wxDebugContext::sm_shutdownFn;
+
 wxDebugContext::wxDebugContext(void)
 {
 }
@@ -756,14 +749,13 @@ bool wxDebugContext::PrintClasses(void)
   }
 
   int n = 0;
-  wxHashTable::compatibility_iterator node;
-  wxClassInfo *info;
+  const wxClassInfo *info;
 
-  wxClassInfo::sm_classTable->BeginFind();
-  node = wxClassInfo::sm_classTable->Next();
-  while (node)
+  for (wxClassInfo::const_iterator node = wxClassInfo::begin_classinfo(),
+                                    end = wxClassInfo::end_classinfo();
+       node != end; ++node)
   {
-    info = (wxClassInfo *)node->GetData();
+    info = *node;
     if (info->GetClassName())
     {
         wxString msg(info->GetClassName());
@@ -786,7 +778,6 @@ bool wxDebugContext::PrintClasses(void)
 
         wxLogMessage(msg);
     }
-    node = wxClassInfo::sm_classTable->Next();
     n ++;
   }
   wxLogMessage(wxEmptyString);
@@ -870,6 +861,11 @@ void wxDebugContext::OutputDumpLine(const wxChar *szFormat, ...)
     dbgout.Printf(buf);
 }
 
+void wxDebugContext::SetShutdownNotifyFunction(wxShutdownNotifyFunction shutdownFn)
+{
+    sm_shutdownFn = shutdownFn;
+}
+
 
 #if USE_THREADSAFE_MEMORY_ALLOCATION
 static bool memSectionOk = false;
@@ -1141,6 +1137,22 @@ void wxTraceLevel(int, const wxChar * ...)
 // All global variables are initialized to 0 at the very beginning, and this is just fine.
 int wxDebugContextDumpDelayCounter::sm_count;
 
+wxDebugContextDumpDelayCounter::wxDebugContextDumpDelayCounter()
+{
+    sm_count++;
+}
+
+wxDebugContextDumpDelayCounter::~wxDebugContextDumpDelayCounter()
+{
+    if ( !--sm_count )
+    {
+        // Notify app if we've been asked to do that
+        if( wxDebugContext::sm_shutdownFn )
+            wxDebugContext::sm_shutdownFn();
+        DoDump();
+    }
+}
+
 void wxDebugContextDumpDelayCounter::DoDump()
 {
     if (wxDebugContext::CountObjectsLeft(true) > 0)