// Modified by:
// Created: 04/01/98
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart and Markus Holzem
-// Licence: wxWindows license
+// Copyright: (c) Julian Smart
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "memory.h"
#endif
#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
// #pragma implementation
#endif
#ifndef WX_PRECOMP
#include "wx/utils.h"
#include "wx/app.h"
+#include "wx/hash.h"
#endif
#if wxUSE_THREADS
#include "wx/ioswrap.h"
-// Obsolete
-#if 0
-#if wxUSE_IOSTREAMH
- #include <fstream.h>
-#else
- #include <fstream>
-#endif
-#endif
-
#if !defined(__WATCOMC__) && !(defined(__VMS__) && ( __VMS_VER < 70000000 ) )\
&& !defined( __MWERKS__ ) && !defined(__SALFORDC__)
#include <memory.h>
#include <string.h>
#ifdef __WXMSW__
-#include <windows.h>
+#include "wx/msw/wrapwin.h"
#ifdef GetClassInfo
#undef GetClassInfo
#include "wx/memory.h"
+#if wxUSE_THREADS && defined(__WXDEBUG__) && !defined(__WXMAC__)
+#define USE_THREADSAFE_MEMORY_ALLOCATION 1
+#else
+#define USE_THREADSAFE_MEMORY_ALLOCATION 0
+#endif
+
+
#ifdef new
#undef new
#endif
}
else
{
- wxString msg("");
+ wxString msg(wxT(""));
if (m_fileName)
msg.Printf(wxT("%s(%d): "), m_fileName, (int)m_lineNum);
else
msg += wxT("unknown object class");
- wxString msg2("");
+ wxString msg2(wxT(""));
msg2.Printf(wxT(" at $%lX, size %d"), (long)GetActualData(), (int)RequestSize());
msg += msg2;
if (m_fileName)
msg.Printf(wxT("%s(%d): "), m_fileName, (int)m_lineNum);
- wxString msg2("");
+ wxString msg2(wxT(""));
msg2.Printf(wxT("non-object data at $%lX, size %d"), (long)GetActualData(), (int)RequestSize() );
msg += msg2;
wxLogMessage(msg);
#ifdef __WXDEBUG__
{
wxChar* appName = (wxChar*) wxT("application");
- wxString appNameStr("");
+ wxString appNameStr(wxT(""));
if (wxTheApp)
{
appNameStr = wxTheApp->GetAppName();
wxLogMessage( wxT("----- Memory dump -----") );
}
}
-
+
TraverseList ((PmSFV)&wxMemStruct::Dump, (checkPoint ? checkPoint->m_next : (wxMemStruct*)NULL));
wxLogMessage( wxT("") );
}
int n = 0;
- wxNode *node;
+ wxHashTable::compatibility_iterator node;
wxClassInfo *info;
wxClassInfo::sm_classTable->BeginFind();
node = wxClassInfo::sm_classTable->Next();
while (node)
{
- info = (wxClassInfo *)node->Data();
+ info = (wxClassInfo *)node->GetData();
if (info->GetClassName())
{
wxString msg(info->GetClassName());
return n ;
}
-#if wxUSE_THREADS
-static bool memSectionOk = false;
+#if USE_THREADSAFE_MEMORY_ALLOCATION
+static bool memSectionOk = FALSE;
class MemoryCriticalSection : public wxCriticalSection
{
public:
MemoryCriticalSection() {
- memSectionOk = true;
+ memSectionOk = TRUE;
}
};
inline MemoryCriticalSectionLocker(wxCriticalSection& critsect)
: m_critsect(critsect), m_locked(memSectionOk) { if(m_locked) m_critsect.Enter(); }
inline ~MemoryCriticalSectionLocker() { if(m_locked) m_critsect.Leave(); }
-
+
private:
// no assignment operator nor copy ctor
MemoryCriticalSectionLocker(const MemoryCriticalSectionLocker&);
MemoryCriticalSectionLocker& operator=(const MemoryCriticalSectionLocker&);
-
+
wxCriticalSection& m_critsect;
bool m_locked;
};
// TODO: store whether this is a vector or not.
void * wxDebugAlloc(size_t size, wxChar * fileName, int lineNum, bool isObject, bool WXUNUSED(isVect) )
{
-#if wxUSE_THREADS
+#if USE_THREADSAFE_MEMORY_ALLOCATION
MemoryCriticalSectionLocker lock(memLocker);
#endif
-
+
// If not in debugging allocation mode, do the normal thing
// so we don't leave any trace of ourselves in the node list.
// TODO: check whether was allocated as a vector
void wxDebugFree(void * buf, bool WXUNUSED(isVect) )
{
-#if wxUSE_THREADS
+#if USE_THREADSAFE_MEMORY_ALLOCATION
MemoryCriticalSectionLocker lock(memLocker);
#endif
-
+
if (!buf)
return;
}
#else // wxUSE_MEMORY_TRACING && defined(__WXDEBUG__)
+// Already defined in memory.h
+#if 0
void wxTrace(const char *WXUNUSED(fmt) ...)
{
}
{
}
#endif
+#endif