summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2021-07-16 14:48:25 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-07-17 09:12:26 +0200
commitb1df9c67349cf4cc5be4128d797aefb87f50e38f (patch)
tree171fbccaadecd8fac85e1e6212ce560162fabc7f /sal
parent3545caa5aac59022d5c00d4a0c2a74657cbcae8d (diff)
[API CHANGE] reduce cost of numeric conversion
on a hot path, since we already know the length of these strings. Which requires adding some new variants of our string conversion functions Change-Id: I1877f8f3c72934c07f14eec7e73bbe8d7b0f1808 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119065 Tested-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sal')
-rw-r--r--sal/rtl/string.cxx14
-rw-r--r--sal/rtl/strtmpl.hxx10
-rw-r--r--sal/util/sal.map6
3 files changed, 30 insertions, 0 deletions
diff --git a/sal/rtl/string.cxx b/sal/rtl/string.cxx
index 94be8029032a..6fc2df75698d 100644
--- a/sal/rtl/string.cxx
+++ b/sal/rtl/string.cxx
@@ -110,6 +110,14 @@ double SAL_CALL rtl_str_toDouble(char const * pStr) SAL_THROW_EXTERN_C()
nullptr, nullptr);
}
+double SAL_CALL rtl_str_toDouble_WithLength(const char* pStr,
+ sal_Int32 nStrLength) SAL_THROW_EXTERN_C()
+{
+ assert(pStr);
+ return rtl_math_stringToDouble(pStr, pStr + nStrLength, '.', 0,
+ nullptr, nullptr);
+}
+
/* ======================================================================= */
static int rtl_ImplGetFastUTF8ByteLen( const sal_Unicode* pStr, sal_Int32 nLen )
@@ -559,6 +567,12 @@ sal_Int32 SAL_CALL rtl_str_toInt32(const char* pStr, sal_Int16 nRadix) SAL_THROW
return rtl::str::toInt32(pStr, nRadix);
}
+sal_Int32 SAL_CALL rtl_str_toInt32_WithLength(const char* pStr, sal_Int16 nRadix,
+ sal_Int32 nStrLength) SAL_THROW_EXTERN_C()
+{
+ return rtl::str::toInt32_WithLength(pStr, nRadix, nStrLength);
+}
+
sal_Int64 SAL_CALL rtl_str_toInt64(const char* pStr, sal_Int16 nRadix) SAL_THROW_EXTERN_C()
{
return rtl::str::toInt64(pStr, nRadix);
diff --git a/sal/rtl/strtmpl.hxx b/sal/rtl/strtmpl.hxx
index 094a1cc1f2ab..493184f92efa 100644
--- a/sal/rtl/strtmpl.hxx
+++ b/sal/rtl/strtmpl.hxx
@@ -914,6 +914,16 @@ sal_Int32 toInt32 ( const IMPL_RTL_STRCODE* pStr,
}
template <typename IMPL_RTL_STRCODE>
+sal_Int32 toInt32_WithLength ( const IMPL_RTL_STRCODE* pStr,
+ sal_Int16 nRadix,
+ sal_Int32 nStrLength)
+
+{
+ assert(pStr);
+ return toInt_WithLength<sal_Int32, sal_uInt32>(pStr, nRadix, nStrLength);
+}
+
+template <typename IMPL_RTL_STRCODE>
sal_Int64 toInt64 ( const IMPL_RTL_STRCODE* pStr,
sal_Int16 nRadix )
{
diff --git a/sal/util/sal.map b/sal/util/sal.map
index 49efb2a436cd..e2339bdc13ac 100644
--- a/sal/util/sal.map
+++ b/sal/util/sal.map
@@ -755,6 +755,12 @@ PRIVATE_1.7 { # LibreOffice 7.1
rtl_uString_newReplaceAllFromIndexUtf16LUtf16L;
} PRIVATE_1.5;
+PRIVATE_1.8 { # LibreOffice 7.3
+ global:
+ rtl_str_toInt32_WithLength;
+ rtl_str_toDouble_WithLength;
+} PRIVATE_1.7;
+
PRIVATE_textenc.1 { # LibreOffice 3.6
global:
_ZN3sal6detail7textenc20convertCharToUnicode*;