diff options
author | Daniel Boles <dboles@src.gnome.org> | 2017-09-01 12:47:08 +0100 |
---|---|---|
committer | Daniel Boles <dboles@src.gnome.org> | 2017-09-01 12:47:08 +0100 |
commit | 75f5d2a139a886178a88c704770f62de84d2ef84 (patch) | |
tree | d697d29df9f1f4db8d8f5cee5f49c40df70314f1 /glib/glibmm/ustring.h | |
parent | 8986d68b3e9d4934d5ffc410201c9c825fdf9e62 (diff) | |
download | glibmm-wip/dboles/ustring.tar.gz |
ustring: Replace 8×format() with 1 variadic templatewip/dboles/ustring
as per the previous commit for Glib::ustring.
Now, users can pass format() as many arguments as their compiler or
stack will allow, rather than being limited to a maximum of 8.
https://bugzilla.gnome.org/show_bug.cgi?id=784211
Diffstat (limited to 'glib/glibmm/ustring.h')
-rw-r--r-- | glib/glibmm/ustring.h | 176 |
1 files changed, 23 insertions, 153 deletions
diff --git a/glib/glibmm/ustring.h b/glib/glibmm/ustring.h index dd0423f3..dd23a885 100644 --- a/glib/glibmm/ustring.h +++ b/glib/glibmm/ustring.h @@ -668,7 +668,7 @@ public: template <class... Ts> static inline ustring compose(const ustring& fmt, const Ts&... args); - /*! Format the argument to its string representation. + /*! Format the argument(s) to a string representation. * Applies the arguments in order to an std::wostringstream and returns the * resulting string. I/O manipulators may also be used as arguments. This * greatly simplifies the common task of converting a number to a string, as @@ -692,67 +692,15 @@ public: * ustring text = ustring::format(std::setfill(L'0'), std::setw(6), 123); * @endcode * - * @param a1 A streamable value or an I/O manipulator. + * @param args One or more streamable values or I/O manipulators. * @return The string representation of the argument stream. * @throw Glib::ConvertError * - * @newin{2,16} - */ - template <class T1> - static inline ustring format(const T1& a1); - - /* See the documentation for format(const T1& a1). - * - * @newin{2,16} - */ - template <class T1, class T2> - static inline ustring format(const T1& a1, const T2& a2); - - /* See the documentation for format(const T1& a1). - * - * @newin{2,16} - */ - template <class T1, class T2, class T3> - static inline ustring format(const T1& a1, const T2& a2, const T3& a3); - - /* See the documentation for format(const T1& a1). - * - * @newin{2,16} - */ - template <class T1, class T2, class T3, class T4> - static inline ustring format(const T1& a1, const T2& a2, const T3& a3, const T4& a4); - - /* See the documentation for format(const T1& a1). - * - * @newin{2,16} - */ - template <class T1, class T2, class T3, class T4, class T5> - static inline ustring format( - const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5); - - /* See the documentation for format(const T1& a1). - * - * @newin{2,16} - */ - template <class T1, class T2, class T3, class T4, class T5, class T6> - static inline ustring format( - const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, const T6& a6); - - /* See the documentation for format(const T1& a1). - * - * @newin{2,16} + * @newin{2,56} */ - template <class T1, class T2, class T3, class T4, class T5, class T6, class T7> - static inline ustring format(const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, - const T6& a6, const T7& a7); + template <class... Ts> + static inline ustring format(const Ts&... args); - /* See the documentation for format(const T1& a1). - * - * @newin{2,16} - */ - template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8> - static inline ustring format(const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, - const T6& a6, const T7& a7, const T8& a8); //! @} private: @@ -775,9 +723,15 @@ private: template <class T> class Stringify; + static ustring compose_private(const ustring& fmt, std::initializer_list<const ustring*> ilist); + class FormatStream; - static ustring compose_private(const ustring& fmt, std::initializer_list<const ustring*> ilist); + template<class T> + static inline void format_private(FormatStream& buf, const T& arg); + + template<class T1, class... Ts> + static inline void format_private(FormatStream& buf, const T1& a1, const Ts&... args); #endif /* DOXYGEN_SHOULD_SKIP_THIS */ @@ -1092,114 +1046,30 @@ ustring::raw() const return string_; } -template <class T1> -inline // static - ustring - ustring::format(const T1& a1) -{ - ustring::FormatStream buf; - buf.stream(a1); - return buf.to_string(); -} - -template <class T1, class T2> -inline // static - ustring - ustring::format(const T1& a1, const T2& a2) -{ - ustring::FormatStream buf; - buf.stream(a1); - buf.stream(a2); - return buf.to_string(); -} - -template <class T1, class T2, class T3> -inline // static - ustring - ustring::format(const T1& a1, const T2& a2, const T3& a3) -{ - ustring::FormatStream buf; - buf.stream(a1); - buf.stream(a2); - buf.stream(a3); - return buf.to_string(); -} - -template <class T1, class T2, class T3, class T4> -inline // static - ustring - ustring::format(const T1& a1, const T2& a2, const T3& a3, const T4& a4) -{ - ustring::FormatStream buf; - buf.stream(a1); - buf.stream(a2); - buf.stream(a3); - buf.stream(a4); - return buf.to_string(); -} - -template <class T1, class T2, class T3, class T4, class T5> +template <class T> inline // static - ustring - ustring::format(const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5) + void + ustring::format_private(FormatStream& buf, const T& arg) { - ustring::FormatStream buf; - buf.stream(a1); - buf.stream(a2); - buf.stream(a3); - buf.stream(a4); - buf.stream(a5); - return buf.to_string(); + buf.stream(arg); } -template <class T1, class T2, class T3, class T4, class T5, class T6> +template <class T1, class... Ts> inline // static - ustring - ustring::format( - const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, const T6& a6) + void + ustring::format_private(FormatStream& buf, const T1& a1, const Ts&... args) { - ustring::FormatStream buf; buf.stream(a1); - buf.stream(a2); - buf.stream(a3); - buf.stream(a4); - buf.stream(a5); - buf.stream(a6); - return buf.to_string(); + return format_private(buf, args...); } -template <class T1, class T2, class T3, class T4, class T5, class T6, class T7> -inline // static - ustring - ustring::format(const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, - const T6& a6, const T7& a7) -{ - ustring::FormatStream buf; - buf.stream(a1); - buf.stream(a2); - buf.stream(a3); - buf.stream(a4); - buf.stream(a5); - buf.stream(a6); - buf.stream(a7); - return buf.to_string(); -} - -template <class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8> +template <class... Ts> inline // static ustring - ustring::format(const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, - const T6& a6, const T7& a7, const T8& a8) + ustring::format(const Ts&... args) { ustring::FormatStream buf; - buf.stream(a1); - buf.stream(a2); - buf.stream(a3); - buf.stream(a4); - buf.stream(a5); - buf.stream(a6); - buf.stream(a7); - buf.stream(a8); + format_private(buf, args...); return buf.to_string(); } |