summaryrefslogtreecommitdiff
path: root/include/rtl
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2019-09-30 01:10:52 +0300
committerMike Kaganski <mike.kaganski@collabora.com>2019-09-30 10:17:34 +0200
commit65d8389fd7f7fcaf6e464be958b8e94918d5130a (patch)
treeee06b7a650edf7ba2f1c7fbb326c66ae6fc28251 /include/rtl
parentf0e0fb71fc6eefc65afdf1650100ffd4c64c18d0 (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>
Diffstat (limited to 'include/rtl')
-rw-r--r--include/rtl/stringconcat.hxx57
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 >