]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/cpp.h
Ensure IDs don't clash with wxRichTextCtrl.
[wxWidgets.git] / include / wx / cpp.h
index 37c58706f857b99b7a95814d551ed3b2e85e2800..eb012f530883f094dbe6f1702bfe9d00d66447b0 100644 (file)
 #define wxCONCAT_HELPER(text, line) text ## line
 #define wxCONCAT(text, line)        wxCONCAT_HELPER(text, line)
 
 #define wxCONCAT_HELPER(text, line) text ## line
 #define wxCONCAT(text, line)        wxCONCAT_HELPER(text, line)
 
+#define wxCONCAT3(x1, x2, x3) wxCONCAT(wxCONCAT(x1, x2), x3)
+#define wxCONCAT4(x1, x2, x3, x4) wxCONCAT(wxCONCAT3(x1, x2, x3), x4)
+#define wxCONCAT5(x1, x2, x3, x4, x5) wxCONCAT(wxCONCAT4(x1, x2, x3, x4), x5)
+
 /* wxSTRINGIZE works as the preprocessor # operator but also works with macros */
 #define wxSTRINGIZE_HELPER(x)       #x
 #define wxSTRINGIZE(x)              wxSTRINGIZE_HELPER(x)
 
 /* wxSTRINGIZE works as the preprocessor # operator but also works with macros */
 #define wxSTRINGIZE_HELPER(x)       #x
 #define wxSTRINGIZE(x)              wxSTRINGIZE_HELPER(x)
 
+/* a Unicode-friendly version of wxSTRINGIZE_T */
+#define wxSTRINGIZE_T(x)            wxAPPLY_T(wxSTRINGIZE(x))
+
+/*
+    Special workarounds for compilers with broken "##" operator. For all the
+    other ones we can just use it directly.
+ */
+#ifdef wxCOMPILER_BROKEN_CONCAT_OPER
+    #define wxPREPEND_L(x)      L ## x
+    #define wxAPPEND_i64(x)     x ## i64
+    #define wxAPPEND_ui64(x)    x ## ui64
+#endif /* wxCOMPILER_BROKEN_CONCAT_OPER */
+
 /*
    Helper macros for wxMAKE_UNIQUE_NAME: normally this works by appending the
    current line number to the given identifier to reduce the probability of the
 /*
    Helper macros for wxMAKE_UNIQUE_NAME: normally this works by appending the
    current line number to the given identifier to reduce the probability of the
 /* Create a "unique" name with the given prefix */
 #define wxMAKE_UNIQUE_NAME(text)    wxCONCAT_LINE(text)
 
 /* Create a "unique" name with the given prefix */
 #define wxMAKE_UNIQUE_NAME(text)    wxCONCAT_LINE(text)
 
-#endif // _WX_CPP_H_
+/*
+   This macro can be passed as argument to another macro when you don't have
+   anything to pass in fact.
+ */
+#define wxEMPTY_PARAMETER_VALUE /* Fake macro parameter value */
+
+/*
+    Define __WXFUNCTION__ which is like standard __FUNCTION__ but defined as
+    NULL for the compilers which don't support the latter.
+ */
+#ifndef __WXFUNCTION__
+    /* TODO: add more compilers supporting __FUNCTION__ */
+    #if defined(__DMC__)
+        /*
+           __FUNCTION__ happens to be not defined within class members
+           http://www.digitalmars.com/drn-bin/wwwnews?c%2B%2B.beta/485
+        */
+        #define __WXFUNCTION__ (NULL)
+    #elif defined(__GNUC__) || \
+          (defined(_MSC_VER) && _MSC_VER >= 1300) || \
+          defined(__FUNCTION__)
+        #define __WXFUNCTION__ __FUNCTION__
+    #else
+        /* still define __WXFUNCTION__ to avoid #ifdefs elsewhere */
+        #define __WXFUNCTION__ (NULL)
+    #endif
+#endif /* __WXFUNCTION__ already defined */
+
+#endif /* _WX_CPP_H_ */