]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/defs.h
Faster Deselect
[wxWidgets.git] / include / wx / defs.h
index fb6d8b018cb443f5ff79eaeedefadadca0ad1156..76ded59ec7caabc0505adbc5315f9ff9163f41bc 100644 (file)
 #ifndef _WX_DEFS_H_
 #define _WX_DEFS_H_
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma interface "defs.h"
-#endif
-
 /*  ---------------------------------------------------------------------------- */
 /*  compiler and OS identification */
 /*  ---------------------------------------------------------------------------- */
@@ -477,7 +473,18 @@ typedef int wxWindowID;
 /*  appending the current line number to the given identifier to reduce the */
 /*  probability of the conflict (it may still happen if this is used in the */
 /*  headers, hence you should avoid doing it or provide unique prefixes then) */
-#define wxCONCAT_LINE(text)         wxCONCAT(text, __LINE__)
+#if defined(__VISUALC__) && (__VISUALC__ >= 1300)
+    /*
+       __LINE__ handling is completely broken in VC++ when using "Edit and
+       Continue" (/ZI option) and results in preprocessor errors if we use it
+       inside the macros. Luckily VC7 has another standard macro which can be
+       used like this and is even better than __LINE__ because it is globally
+       unique.
+     */
+#   define wxCONCAT_LINE(text)         wxCONCAT(text, __COUNTER__)
+#else /* normal compilers */
+#   define wxCONCAT_LINE(text)         wxCONCAT(text, __LINE__)
+#endif
 #define wxMAKE_UNIQUE_NAME(text)    wxCONCAT_LINE(text)
 
 /*  symbolic constant used by all Find()-like functions returning positive */
@@ -779,8 +786,8 @@ typedef wxUint32 wxDword;
 #endif
 
 #ifdef __cplusplus
-/* And also define a simple function to cast pointer to it. */
-inline wxUIntPtr wxPtrToUInt(void *p)
+/* And also define a couple of simple functions to cast pointer to/from it. */
+inline wxUIntPtr wxPtrToUInt(const void *p)
 {
     /*
        VC++ 7.1 gives warnings about casts such as below even when they're
@@ -797,6 +804,19 @@ inline wxUIntPtr wxPtrToUInt(void *p)
     #pragma warning(default: 4311)
 #endif
 }
+
+inline void *wxUIntToPtr(wxUIntPtr p)
+{
+#ifdef __VISUALC__
+    #pragma warning(disable: 4312) /* conversion to type of greater size */
+#endif
+
+    return wx_reinterpret_cast(void *, p);
+
+#ifdef __VISUALC__
+    #pragma warning(default: 4312)
+#endif
+}
 #endif /*__cplusplus*/
 
 
@@ -1048,12 +1068,6 @@ typedef float wxFloat32;
     #define wxUINT64_SWAP_ON_BE(val)  (val)
 #endif
 
-/*  Macros to convert from unsigned long to void pointer. */
-/*  High order truncation occurs if the respective type is not large enough. */
-#define WXPTRULONGSLICE (((wxBYTE_ORDER==wxBIG_ENDIAN)&&(sizeof(void*)==8)&&(sizeof(unsigned long)<8))?1:0)
-#define wxPtrToULong(p) (((unsigned long*)(&(p)))[WXPTRULONGSLICE])
-#define wxULongToPtr(p,n) (p=NULL,wxPtrToULong(p)=(unsigned long)(n),p)
-
 /*  ---------------------------------------------------------------------------- */
 /*  Geometric flags */
 /*  ---------------------------------------------------------------------------- */