summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Boles <dboles@src.gnome.org>2017-09-01 12:47:08 +0100
committerDaniel Boles <dboles@src.gnome.org>2017-09-01 12:47:08 +0100
commit75f5d2a139a886178a88c704770f62de84d2ef84 (patch)
treed697d29df9f1f4db8d8f5cee5f49c40df70314f1
parent8986d68b3e9d4934d5ffc410201c9c825fdf9e62 (diff)
downloadglibmm-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
-rw-r--r--glib/glibmm/ustring.h176
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();
}