]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/strvararg.h
add possibility to specify the conversion to use in wxStringOutputStream; use it...
[wxWidgets.git] / include / wx / strvararg.h
index ae06ff1e5a0262c9d2deb66c2fd5f3e792f2500b..4cbe39b3aa0dfb940c5e33a51fd497cdc561e015 100644 (file)
@@ -178,16 +178,8 @@ private:
 #endif // wxUSE_UNICODE && !wxUSE_UTF8_LOCALE_ONLY
 
 private:
-#ifdef __VISUALC__
-    // "struct 'ConvertedBuffer<T>' needs to have dll-interface to be used by
-    // clients of class 'wxString'" - this is private, we don't care
-    #pragma warning (disable:4251)
-#endif
     wxCharBuffer  m_char;
     wxWCharBuffer m_wchar;
-#ifdef __VISUALC__
-    #pragma warning (default:4251)
-#endif
 
     // NB: we can use a pointer here, because wxFormatString is only used
     //     as function argument, so it has shorter life than the string
@@ -195,7 +187,7 @@ private:
     const wxString * const m_str;
     const wxCStrData * const m_cstr;
 
-    DECLARE_NO_COPY_CLASS(wxFormatString)
+    DECLARE_NO_ASSIGN_CLASS(wxFormatString)
 };
 
 // these two helper classes are used to find wxFormatString argument among fixed
@@ -217,16 +209,27 @@ struct wxFormatStringArgument
 };
 
 template<typename T>
-inline wxFormatStringArgument wxFindFormatStringArgument(T WXUNUSED(arg))
+struct wxFormatStringArgumentFinder
+{
+    static wxFormatStringArgument find(T)
+    {
+        // by default, arguments are not format strings, so return "not found"
+        return wxFormatStringArgument();
+    }
+};
+
+template<>
+struct wxFormatStringArgumentFinder<const wxFormatString&>
 {
-    // by default, arguments are not format strings, so return "not found"
-    return wxFormatStringArgument();
-}
+    static wxFormatStringArgument find(const wxFormatString& arg)
+        { return wxFormatStringArgument(&arg); }
+};
 
-inline wxFormatStringArgument
-wxFindFormatStringArgument(const wxFormatString& arg)
+template<>
+struct wxFormatStringArgumentFinder<wxFormatString>
 {
-    return wxFormatStringArgument(&arg);
+    static wxFormatStringArgument find(const wxFormatString& arg)
+        { return wxFormatStringArgument(&arg); }
 };
 
 
@@ -715,6 +718,15 @@ private:
 #define _WX_VARARG_FIXED_UNUSED_EXPAND_4(t1,t2,t3,t4) \
          t1 WXUNUSED(f1), t2 WXUNUSED(f2), t3 WXUNUSED(f3), t4 WXUNUSED(f4)
 
+#define _WX_VARARG_FIXED_TYPEDEFS_1(t1) \
+             typedef t1 TF1
+#define _WX_VARARG_FIXED_TYPEDEFS_2(t1,t2) \
+             _WX_VARARG_FIXED_TYPEDEFS_1(t1); typedef t2 TF2
+#define _WX_VARARG_FIXED_TYPEDEFS_3(t1,t2,t3) \
+             _WX_VARARG_FIXED_TYPEDEFS_2(t1,t2); typedef t3 TF3
+#define _WX_VARARG_FIXED_TYPEDEFS_4(t1,t2,t3,t4) \
+             _WX_VARARG_FIXED_TYPEDEFS_3(t1,t2,t3); typedef t4 TF4
+
 // This macro expands N-items tuple of fixed arguments types into part of
 // function's declaration. For example,
 // "_WX_VARARG_FIXED_EXPAND(3, (int, char*, int))" expands into
@@ -730,6 +742,14 @@ private:
 #define _WX_VARARG_FIXED_UNUSED_EXPAND_IMPL(N, args) \
                 _WX_VARARG_FIXED_UNUSED_EXPAND_##N args
 
+// Declarates typedefs for fixed arguments types; i-th fixed argument types
+// will have TFi typedef.
+#define _WX_VARARG_FIXED_TYPEDEFS(N, args) \
+                _WX_VARARG_FIXED_TYPEDEFS_IMPL(N, args)
+#define _WX_VARARG_FIXED_TYPEDEFS_IMPL(N, args) \
+                _WX_VARARG_FIXED_TYPEDEFS_##N args
+
+
 // This macro calls another macro 'm' passed as second argument 'N' times,
 // with its only argument set to 1..N, and concatenates the results using
 // comma as separator.
@@ -784,9 +804,11 @@ private:
 // And the same for fixed arguments, _not_ normalizing it:
 #define _WX_VARARG_PASS_FIXED(i)        f##i
 
-#define _WX_VARARG_FIND_FMT(i)          (wxFindFormatStringArgument(f##i))
+#define _WX_VARARG_FIND_FMT(i) \
+            (wxFormatStringArgumentFinder<TF##i>::find(f##i))
 
 #define _WX_VARARG_FORMAT_STRING(numfixed, fixed)                             \
+    _WX_VARARG_FIXED_TYPEDEFS(numfixed, fixed);                               \
     const wxFormatString *fmt =                                               \
             (_WX_VARARG_JOIN(numfixed, _WX_VARARG_FIND_FMT))
 
@@ -943,6 +965,8 @@ private:
 #define _WX_VARARG_WATCOM_UNPACK(N, convfixed) \
         _WX_VARARG_WATCOM_UNPACK_##N convfixed
 
+#define _WX_VARARG_PASS_WATCOM(i) a##i
+
 #define _WX_VARARG_WATCOM_WORKAROUND(N, rettype, name,                        \
                                      convfixed, dummy, numfixed, fixed)       \
     template<_WX_VARARG_JOIN(N, _WX_VARARG_TEMPL)>                            \
@@ -950,7 +974,7 @@ private:
                  _WX_VARARG_JOIN(N, _WX_VARARG_ARG))                          \
     {                                                                         \
          return name(_WX_VARARG_WATCOM_UNPACK(numfixed, convfixed),           \
-                     _WX_VARARG_JOIN(N, _WX_VARARG_PASS_WCHAR));              \
+                     _WX_VARARG_JOIN(N, _WX_VARARG_PASS_WATCOM));             \
     }
 
 #define _WX_VARARG_WATCOM_WORKAROUND_CTOR(N, dummy1, name,                    \
@@ -960,7 +984,7 @@ private:
                  _WX_VARARG_JOIN(N, _WX_VARARG_ARG))                          \
     {                                                                         \
          name(_WX_VARARG_WATCOM_UNPACK(numfixed, convfixed),                  \
-                     _WX_VARARG_JOIN(N, _WX_VARARG_PASS_WCHAR));              \
+                     _WX_VARARG_JOIN(N, _WX_VARARG_PASS_WATCOM));             \
     }
 
 #endif // __WATCOMC__