From 0021013b0ab2c480ac1c00042ff83f7290af2d30 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Mon, 2 Jun 2014 01:17:54 +0000 Subject: [PATCH] Support: add 6-parameter format Since we cannot yet use variadic templates, add a specialisation for 6-parameters to format. This is motivated by a need for the additional parameter for formatting information for an unwind decoder for Windows on ARM. llvm-svn: 209999 --- llvm/include/llvm/Support/Format.h | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/llvm/include/llvm/Support/Format.h b/llvm/include/llvm/Support/Format.h index a62801f16658..8d8665ffcea3 100644 --- a/llvm/include/llvm/Support/Format.h +++ b/llvm/include/llvm/Support/Format.h @@ -170,6 +170,30 @@ public: } }; +/// format_object6 - This is a templated helper class used by the format +/// function that captures the object to be formated and the format string. When +/// actually printed, this synthesizes the string into a temporary buffer +/// provided and returns whether or not it is big enough. +template +class format_object6 : public format_object_base { + T1 Val1; + T2 Val2; + T3 Val3; + T4 Val4; + T5 Val5; + T6 Val6; +public: + format_object6(const char *Fmt, const T1 &Val1, const T2 &Val2, + const T3 &Val3, const T4 &Val4, const T5 &Val5, const T6 &Val6) + : format_object_base(Fmt), Val1(Val1), Val2(Val2), Val3(Val3), Val4(Val4), + Val5(Val5), Val6(Val6) { } + + int snprint(char *Buffer, unsigned BufferSize) const override { + return snprintf(Buffer, BufferSize, Fmt, Val1, Val2, Val3, Val4, Val5, Val6); + } +}; + /// This is a helper function that is used to produce formatted output. /// /// This is typically used like: @@ -231,6 +255,21 @@ inline format_object5 format(const char *Fmt,const T1 &Val1, return format_object5(Fmt, Val1, Val2, Val3, Val4, Val5); } +/// This is a helper function that is used to produce formatted output. +/// +/// This is typically used like: +/// \code +/// OS << format("%0.4f", myfloat) << '\n'; +/// \endcode +template +inline format_object6 +format(const char *Fmt, const T1 &Val1, const T2 &Val2, const T3 &Val3, + const T4 &Val4, const T5 &Val5, const T6 &Val6) { + return format_object6(Fmt, Val1, Val2, Val3, Val4, + Val5, Val6); +} + } // end namespace llvm #endif