From 1c6f24145ec676f8943c0133d7568fbea1bb161e Mon Sep 17 00:00:00 2001 From: =?utf8?q?W=C5=82odzimierz=20Skiba?= Date: Wed, 20 Oct 2004 01:20:58 +0000 Subject: [PATCH] Correct fix to the compile time assert under OW. Kudos to Vadim to the tip. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30030 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/debug.h | 13 +++++- include/wx/thread.h | 11 +---- src/common/filename.cpp | 3 +- src/msw/cursor.cpp | 90 ++++++++++++++++++++--------------------- src/msw/listctrl.cpp | 8 ++-- src/msw/thread.cpp | 3 ++ 6 files changed, 67 insertions(+), 61 deletions(-) diff --git a/include/wx/debug.h b/include/wx/debug.h index 6af819ed92..2876fa5286 100644 --- a/include/wx/debug.h +++ b/include/wx/debug.h @@ -198,8 +198,17 @@ It may be used both within a function and in the global scope. */ -#define wxCOMPILE_TIME_ASSERT(expr, msg) \ - struct wxMAKE_UNIQUE_ASSERT_NAME { unsigned int msg: expr; } +#ifdef __WATCOMC__ + /* avoid "unused symbol" warning */ + #define wxCOMPILE_TIME_ASSERT(expr, msg) \ + class wxMAKE_UNIQUE_ASSERT_NAME { \ + unsigned int msg: expr; \ + wxMAKE_UNIQUE_ASSERT_NAME(){wxUnusedVar(msg);} \ + } +#else + #define wxCOMPILE_TIME_ASSERT(expr, msg) \ + struct wxMAKE_UNIQUE_ASSERT_NAME { unsigned int msg: expr; } +#endif /* for compatibility only, don't use any more, not needed */ diff --git a/include/wx/thread.h b/include/wx/thread.h index 07f886e973..7c7bab4351 100644 --- a/include/wx/thread.h +++ b/include/wx/thread.h @@ -32,10 +32,6 @@ #undef Yield #endif -#ifdef __WXMSW__ - #include "wx/msw/wrapwin.h" -#endif - // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- @@ -247,7 +243,8 @@ private: // include windows.h from this public header and we also have to use the // union to force the correct (i.e. maximal) alignment // - // if CRITICAL_SECTION size changes in Windows, you'll get an assert below + // if CRITICAL_SECTION size changes in Windows, you'll get an assert from + // thread.cpp and will need to increase the buffer size // // finally, we need this typedef instead of declaring m_buffer directly // because otherwise the assert mentioned above wouldn't compile with some @@ -257,10 +254,6 @@ private: #else // __WIN32__ typedef char wxCritSectBuffer[24]; #endif - -wxCOMPILE_TIME_ASSERT( sizeof(CRITICAL_SECTION) <= sizeof(wxCritSectBuffer), - wxCriticalSectionBufferTooSmall ); - union { unsigned long m_dummy1; diff --git a/src/common/filename.cpp b/src/common/filename.cpp index 1fd38e5e25..f32a1f848f 100644 --- a/src/common/filename.cpp +++ b/src/common/filename.cpp @@ -1190,8 +1190,9 @@ wxString wxFileName::GetForbiddenChars(wxPathFormat format) // Inits to forbidden characters that are common to (almost) all platforms. wxString strForbiddenChars = wxT("*?"); - // In case of a new path format + // If asserts, wxPathFormat has been changed. In case of a new path format // addition, the following code might have to be updated. + wxCOMPILE_TIME_ASSERT(wxPATH_MAX == 5, wxPathFormatChanged); switch ( GetFormat(format) ) { default : diff --git a/src/msw/cursor.cpp b/src/msw/cursor.cpp index 28108588a1..f546bd06b3 100644 --- a/src/msw/cursor.cpp +++ b/src/msw/cursor.cpp @@ -275,54 +275,54 @@ wxCursor::wxCursor(const wxString& filename, } } -// all wxWidgets standard cursors -static const struct StdCursor -{ - // is this a standard Windows cursor? - bool isStd; - - // the cursor name or id - LPCTSTR name; -} stdCursors[] = -{ - { true, NULL }, // wxCURSOR_NONE - { true, IDC_ARROW }, // wxCURSOR_ARROW - { false, _T("WXCURSOR_RIGHT_ARROW") }, // wxCURSOR_RIGHT_ARROW - { false, _T("WXCURSOR_BULLSEYE") }, // wxCURSOR_BULLSEYE - { true, IDC_ARROW }, // WXCURSOR_CHAR - { true, IDC_CROSS }, // WXCURSOR_CROSS - { false, _T("WXCURSOR_HAND") }, // wxCURSOR_HAND - { true, IDC_IBEAM }, // WXCURSOR_IBEAM - { true, IDC_ARROW }, // WXCURSOR_LEFT_BUTTON - { false, _T("WXCURSOR_MAGNIFIER") }, // wxCURSOR_MAGNIFIER - { true, IDC_ARROW }, // WXCURSOR_MIDDLE_BUTTON - { true, IDC_NO }, // WXCURSOR_NO_ENTRY - { false, _T("WXCURSOR_PBRUSH") }, // wxCURSOR_PAINT_BRUSH - { false, _T("WXCURSOR_PENCIL") }, // wxCURSOR_PENCIL - { false, _T("WXCURSOR_PLEFT") }, // wxCURSOR_POINT_LEFT - { false, _T("WXCURSOR_PRIGHT") }, // wxCURSOR_POINT_RIGHT - { true, IDC_HELP }, // WXCURSOR_QUESTION_ARROW - { true, IDC_ARROW }, // WXCURSOR_RIGHT_BUTTON - { true, IDC_SIZENESW }, // WXCURSOR_SIZENESW - { true, IDC_SIZENS }, // WXCURSOR_SIZENS - { true, IDC_SIZENWSE }, // WXCURSOR_SIZENWSE - { true, IDC_SIZEWE }, // WXCURSOR_SIZEWE - { true, IDC_SIZEALL }, // WXCURSOR_SIZING - { false, _T("WXCURSOR_PBRUSH") }, // wxCURSOR_SPRAYCAN - { true, IDC_WAIT }, // WXCURSOR_WAIT - { false, _T("WXCURSOR_WATCH") }, // WXCURSOR_WATCH - { false, _T("WXCURSOR_BLANK") }, // wxCURSOR_BLANK - { true, IDC_APPSTARTING }, // wxCURSOR_ARROWWAIT - - // no entry for wxCURSOR_MAX -}; - -wxCOMPILE_TIME_ASSERT( WXSIZEOF(stdCursors) == wxCURSOR_MAX, - CursorsIdArrayMismatch ); - // Cursors by stock number wxCursor::wxCursor(int idCursor) { + // all wxWidgets standard cursors + static const struct StdCursor + { + // is this a standard Windows cursor? + bool isStd; + + // the cursor name or id + LPCTSTR name; + } stdCursors[] = + { + { true, NULL }, // wxCURSOR_NONE + { true, IDC_ARROW }, // wxCURSOR_ARROW + { false, _T("WXCURSOR_RIGHT_ARROW") }, // wxCURSOR_RIGHT_ARROW + { false, _T("WXCURSOR_BULLSEYE") }, // wxCURSOR_BULLSEYE + { true, IDC_ARROW }, // WXCURSOR_CHAR + { true, IDC_CROSS }, // WXCURSOR_CROSS + { false, _T("WXCURSOR_HAND") }, // wxCURSOR_HAND + { true, IDC_IBEAM }, // WXCURSOR_IBEAM + { true, IDC_ARROW }, // WXCURSOR_LEFT_BUTTON + { false, _T("WXCURSOR_MAGNIFIER") }, // wxCURSOR_MAGNIFIER + { true, IDC_ARROW }, // WXCURSOR_MIDDLE_BUTTON + { true, IDC_NO }, // WXCURSOR_NO_ENTRY + { false, _T("WXCURSOR_PBRUSH") }, // wxCURSOR_PAINT_BRUSH + { false, _T("WXCURSOR_PENCIL") }, // wxCURSOR_PENCIL + { false, _T("WXCURSOR_PLEFT") }, // wxCURSOR_POINT_LEFT + { false, _T("WXCURSOR_PRIGHT") }, // wxCURSOR_POINT_RIGHT + { true, IDC_HELP }, // WXCURSOR_QUESTION_ARROW + { true, IDC_ARROW }, // WXCURSOR_RIGHT_BUTTON + { true, IDC_SIZENESW }, // WXCURSOR_SIZENESW + { true, IDC_SIZENS }, // WXCURSOR_SIZENS + { true, IDC_SIZENWSE }, // WXCURSOR_SIZENWSE + { true, IDC_SIZEWE }, // WXCURSOR_SIZEWE + { true, IDC_SIZEALL }, // WXCURSOR_SIZING + { false, _T("WXCURSOR_PBRUSH") }, // wxCURSOR_SPRAYCAN + { true, IDC_WAIT }, // WXCURSOR_WAIT + { false, _T("WXCURSOR_WATCH") }, // WXCURSOR_WATCH + { false, _T("WXCURSOR_BLANK") }, // wxCURSOR_BLANK + { true, IDC_APPSTARTING }, // wxCURSOR_ARROWWAIT + + // no entry for wxCURSOR_MAX + }; + + wxCOMPILE_TIME_ASSERT( WXSIZEOF(stdCursors) == wxCURSOR_MAX, + CursorsIdArrayMismatch ); + wxCHECK_RET( idCursor > 0 && (size_t)idCursor < WXSIZEOF(stdCursors), _T("invalid cursor id in wxCursor() ctor") ); diff --git a/src/msw/listctrl.cpp b/src/msw/listctrl.cpp index 4347b84820..d933639972 100644 --- a/src/msw/listctrl.cpp +++ b/src/msw/listctrl.cpp @@ -113,16 +113,16 @@ public: m_pItem = &item; } - // memcpy() in Init() can't work if the struct sizes are different - wxCOMPILE_TIME_ASSERT( sizeof(LV_ITEM_OTHER) == sizeof(LV_ITEM_NATIVE), - CodeCantWorkIfDiffSizes); - // init with conversion void Init(LV_ITEM_OTHER& item) { // avoid unnecessary dynamic memory allocation, jjust make m_pItem // point to our own m_item + // memcpy() can't work if the struct sizes are different + wxCOMPILE_TIME_ASSERT( sizeof(LV_ITEM_OTHER) == sizeof(LV_ITEM_NATIVE), + CodeCantWorkIfDiffSizes); + memcpy(&m_item, &item, sizeof(LV_ITEM_NATIVE)); // convert text from ANSI to Unicod if necessary diff --git a/src/msw/thread.cpp b/src/msw/thread.cpp index 54279fb6b4..0a1d611ca4 100644 --- a/src/msw/thread.cpp +++ b/src/msw/thread.cpp @@ -144,6 +144,9 @@ static bool gs_waitingForThread = false; wxCriticalSection::wxCriticalSection() { + wxCOMPILE_TIME_ASSERT( sizeof(CRITICAL_SECTION) <= sizeof(wxCritSectBuffer), + wxCriticalSectionBufferTooSmall ); + ::InitializeCriticalSection((CRITICAL_SECTION *)m_buffer); } -- 2.45.2