diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2019-09-30 01:10:52 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2019-09-30 10:17:34 +0200 |
commit | 65d8389fd7f7fcaf6e464be958b8e94918d5130a (patch) | |
tree | ee06b7a650edf7ba2f1c7fbb326c66ae6fc28251 | |
parent | f0e0fb71fc6eefc65afdf1650100ffd4c64c18d0 (diff) |
Slightly DRY the O(U)StringNumber code
At least don't repeat the "O(U)StringNumber" in template argument
of base class, and the number type in ctor argument
Change-Id: I65cbe49a8fbbf5d9839cae9efc218130756a6710
Reviewed-on: https://gerrit.libreoffice.org/79822
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
-rw-r--r-- | include/rtl/stringconcat.hxx | 57 |
1 files changed, 28 insertions, 29 deletions
diff --git a/include/rtl/stringconcat.hxx b/include/rtl/stringconcat.hxx index ae2048e80233..10d8489244de 100644 --- a/include/rtl/stringconcat.hxx +++ b/include/rtl/stringconcat.hxx @@ -324,16 +324,17 @@ OString::number() to OString. template< typename T > struct OStringNumber; -template <class Derived, int nBufSize> struct OStringNumberBase +template <typename Number, int nBufSize> struct OStringNumberBase { + using number_t = Number; // OString::number(value).getStr() is very common (writing xml code, ...), // so implement that one also here, to avoid having to explicitly to convert // to OString in all such places const char * getStr() const SAL_RETURNS_NONNULL { return buf; } - Derived&& toAsciiUpperCase() + OStringNumber<number_t>&& toAsciiUpperCase() { rtl_str_toAsciiUpperCase_WithLength(buf, length); - return std::move(*static_cast<Derived*>(this)); + return std::move(*static_cast<OStringNumber<number_t>*>(this)); } operator std::string_view() const { return std::string_view(buf, length); } char buf[nBufSize]; @@ -342,38 +343,37 @@ template <class Derived, int nBufSize> struct OStringNumberBase template<> struct OStringNumber< int > - : public OStringNumberBase<OStringNumber<int>, RTL_STR_MAX_VALUEOFINT32> + : public OStringNumberBase<int, RTL_STR_MAX_VALUEOFINT32> { - OStringNumber(int i, sal_Int16 radix) { length = rtl_str_valueOfInt32(buf, i, radix); } + OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfInt32(buf, i, radix); } }; template<> struct OStringNumber< long long > - : public OStringNumberBase<OStringNumber<long long>, RTL_STR_MAX_VALUEOFINT64> + : public OStringNumberBase<long long, RTL_STR_MAX_VALUEOFINT64> { - OStringNumber(long long ll, sal_Int16 radix) { length = rtl_str_valueOfInt64(buf, ll, radix); } + OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfInt64(buf, i, radix); } }; template<> struct OStringNumber< unsigned long long > - : public OStringNumberBase<OStringNumber<unsigned long long>, RTL_STR_MAX_VALUEOFUINT64> + : public OStringNumberBase<unsigned long long, RTL_STR_MAX_VALUEOFUINT64> { - OStringNumber( unsigned long long ll, sal_Int16 radix ) - { length = rtl_str_valueOfUInt64(buf, ll, radix); } + OStringNumber(number_t i, sal_Int16 radix) { length = rtl_str_valueOfUInt64(buf, i, radix); } }; template<> struct OStringNumber< float > - : public OStringNumberBase<OStringNumber<float>, RTL_STR_MAX_VALUEOFFLOAT> + : public OStringNumberBase<float, RTL_STR_MAX_VALUEOFFLOAT> { - OStringNumber(float f) { length = rtl_str_valueOfFloat(buf, f); } + OStringNumber(number_t f) { length = rtl_str_valueOfFloat(buf, f); } }; template<> struct OStringNumber< double > - : public OStringNumberBase<OStringNumber<double>, RTL_STR_MAX_VALUEOFDOUBLE> + : public OStringNumberBase<double, RTL_STR_MAX_VALUEOFDOUBLE> { - OStringNumber(double d) { length = rtl_str_valueOfDouble(buf, d); } + OStringNumber(number_t d) { length = rtl_str_valueOfDouble(buf, d); } }; template< typename T > @@ -397,12 +397,13 @@ OUString::number() to OUString. template< typename T > struct OUStringNumber; -template <class Derived, int nBufSize> struct OUStringNumberBase +template <typename Number, int nBufSize> struct OUStringNumberBase { - Derived&& toAsciiUpperCase() + using number_t = Number; + OUStringNumber<number_t>&& toAsciiUpperCase() { rtl_ustr_toAsciiUpperCase_WithLength(buf, length); - return std::move(*static_cast<Derived*>(this)); + return std::move(*static_cast<OUStringNumber<number_t>*>(this)); } operator std::u16string_view() const { return std::u16string_view(buf, length); } sal_Unicode buf[nBufSize]; @@ -411,39 +412,37 @@ template <class Derived, int nBufSize> struct OUStringNumberBase template<> struct OUStringNumber< int > - : public OUStringNumberBase<OUStringNumber<int>, RTL_USTR_MAX_VALUEOFINT32> + : public OUStringNumberBase<int, RTL_USTR_MAX_VALUEOFINT32> { - OUStringNumber(int i, sal_Int16 radix) { length = rtl_ustr_valueOfInt32(buf, i, radix); } + OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfInt32(buf, i, radix); } }; template<> struct OUStringNumber< long long > - : public OUStringNumberBase<OUStringNumber<long long>, RTL_USTR_MAX_VALUEOFINT64> + : public OUStringNumberBase<long long, RTL_USTR_MAX_VALUEOFINT64> { - OUStringNumber( long long ll, sal_Int16 radix ) - { length = rtl_ustr_valueOfInt64(buf, ll, radix); } + OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfInt64(buf, i, radix); } }; template<> struct OUStringNumber< unsigned long long > - : public OUStringNumberBase<OUStringNumber<unsigned long long>, RTL_USTR_MAX_VALUEOFUINT64> + : public OUStringNumberBase<unsigned long long, RTL_USTR_MAX_VALUEOFUINT64> { - OUStringNumber( unsigned long long ll, sal_Int16 radix ) - { length = rtl_ustr_valueOfUInt64(buf, ll, radix); } + OUStringNumber(number_t i, sal_Int16 radix) { length = rtl_ustr_valueOfUInt64(buf, i, radix); } }; template<> struct OUStringNumber< float > - : public OUStringNumberBase<OUStringNumber<float>, RTL_USTR_MAX_VALUEOFFLOAT> + : public OUStringNumberBase<float, RTL_USTR_MAX_VALUEOFFLOAT> { - OUStringNumber(float f) { length = rtl_ustr_valueOfFloat(buf, f); } + OUStringNumber(number_t f) { length = rtl_ustr_valueOfFloat(buf, f); } }; template<> struct OUStringNumber< double > - : public OUStringNumberBase<OUStringNumber<double>, RTL_USTR_MAX_VALUEOFDOUBLE> + : public OUStringNumberBase<double, RTL_USTR_MAX_VALUEOFDOUBLE> { - OUStringNumber(double d) { length = rtl_ustr_valueOfDouble(buf, d); } + OUStringNumber(number_t d) { length = rtl_ustr_valueOfDouble(buf, d); } }; template< typename T > |