[Libreoffice-commits] core.git: sw/source

Matteo Casalin matteo.casalin at yahoo.com
Thu Aug 15 08:00:05 PDT 2013


 sw/source/filter/writer/writer.cxx |   51 ++++++++++++++++++-------------------
 1 file changed, 25 insertions(+), 26 deletions(-)

New commits:
commit 98a9577c315e7727befa4f2b968bad3bfebe29c5
Author: Matteo Casalin <matteo.casalin at yahoo.com>
Date:   Thu Aug 15 00:34:37 2013 +0200

    Writer::Out(U)Long: share code and avoid a global buffer
    
    Change-Id: I6845ff1e74b1cbbedea721bf1d2ad6ac3963bac8
    Reviewed-on: https://gerrit.libreoffice.org/5427
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    Tested-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sw/source/filter/writer/writer.cxx b/sw/source/filter/writer/writer.cxx
index 45da4f5..e60d85b 100644
--- a/sw/source/filter/writer/writer.cxx
+++ b/sw/source/filter/writer/writer.cxx
@@ -35,10 +35,28 @@
 
 using namespace ::com::sun::star;
 
+namespace
+{
+
+SvStream& lcl_OutLongExt( SvStream& rStrm, sal_uLong nVal, bool bNeg )
+{
+    sal_Char aBuf[28];
+
+    int i = SAL_N_ELEMENTS(aBuf);
+    aBuf[--i] = 0;
+    do
+    {
+        aBuf[--i] = '0' + static_cast<sal_Char>(nVal % 10);
+        nVal /= 10;
+    } while (nVal);
+
+    if (bNeg)
+        aBuf[--i] = '-';
+
+    return rStrm << &aBuf[i];
+}
 
-// Stringbuffer for the converted numbers
-static sal_Char aNToABuf[] = "0000000000000000000000000";
-#define NTOABUFLEN (sizeof(aNToABuf))
+}
 
 typedef std::multimap<sal_uLong, const ::sw::mark::IMark*> SwBookmarkNodeTable;
 
@@ -218,35 +236,16 @@ void Writer::SetStream(SvStream *const pStream)
 
 SvStream& Writer::OutLong( SvStream& rStrm, long nVal )
 {
-    // Set the Pointer at the end of the buffer
-    sal_Char* pStr = aNToABuf + (NTOABUFLEN-1);
-
-    int bNeg = nVal < 0;
-    if( bNeg )
+    const bool bNeg = nVal < 0;
+    if (bNeg)
         nVal = -nVal;
 
-    do {
-        *(--pStr) = (sal_Char)(nVal % 10 ) + 48;
-        nVal /= 10;
-    } while( nVal );
-
-    // is the number negative, then in addition -
-    if( bNeg )
-        *(--pStr) = '-';
-
-    return rStrm << pStr;
+    return lcl_OutLongExt(rStrm, static_cast<sal_uLong>(nVal), bNeg);
 }
 
 SvStream& Writer::OutULong( SvStream& rStrm, sal_uLong nVal )
 {
-    // Set the Pointer at the end of the buffer
-    sal_Char* pStr = aNToABuf + (NTOABUFLEN-1);
-
-    do {
-        *(--pStr) = (sal_Char)(nVal % 10 ) + 48;
-        nVal /= 10;
-    } while ( nVal );
-    return rStrm << pStr;
+    return lcl_OutLongExt(rStrm, nVal, false);
 }
 
 


More information about the Libreoffice-commits mailing list