]> 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 72169f2735aa64c1ee31a06f431fc199a968d43e..4f593c3de1b5fe89c1112a4714e3a3349898acb0 100644 (file)
@@ -39,7 +39,7 @@
 #include "wx/ioswrap.h"
 
 #if !defined(__WATCOMC__) && !(defined(__VMS__) && ( __VMS_VER < 70000000 ) )\
-     && !defined( __MWERKS__ ) && !defined(__SALFORDC__)
+     && !defined( __MWERKS__ )
 #include <memory.h>
 #endif
 
@@ -452,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)
 {
 }
@@ -746,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());
@@ -776,7 +778,6 @@ bool wxDebugContext::PrintClasses(void)
 
         wxLogMessage(msg);
     }
-    node = wxClassInfo::sm_classTable->Next();
     n ++;
   }
   wxLogMessage(wxEmptyString);
@@ -860,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;
@@ -1131,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)