소스 검색

HPCC-16308 Avoid using the decimal stack for decimal->string conversion

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
Gavin Halliday 8 년 전
부모
커밋
219a7430b4
1개의 변경된 파일16개의 추가작업 그리고 10개의 파일을 삭제
  1. 16 10
      rtl/eclrtl/rtlxml.cpp

+ 16 - 10
rtl/eclrtl/rtlxml.cpp

@@ -38,6 +38,8 @@
 #include "jmd5.hpp"
 #include "rtlqstr.ipp"
 
+#include "nbcd.hpp"
+
 //---------------------------------------------------------------------------
 
 void outputXmlString(unsigned len, const char *field, const char *fieldname, StringBuffer &out)
@@ -95,42 +97,46 @@ void outputXmlReal(double field, const char *fieldname, StringBuffer &out)
 }
 void outputXmlDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname, StringBuffer &out)
 {
-    char dec[50];
     if (fieldname && *fieldname)
         out.append('<').append(fieldname).append('>');
-    DecLock();
+
     if (DecValid(true, size*2-1, field))
     {
-        DecPushDecimal(field, size, precision);
-        DecPopCString(sizeof(dec), dec);
+        Decimal temp;
+        char dec[50];
+        temp.setDecimal(size, precision, field);
+        temp.getCString(sizeof(dec), dec);
+
         const char *finger = dec;
         while(isspace(*finger)) finger++;
         out.append(finger);
     }
     else
         out.append("####");
-    DecUnlock();
+
     if (fieldname && *fieldname)
         out.append("</").append(fieldname).append('>');
 }
 
 void outputXmlUDecimal(const void *field, unsigned size, unsigned precision, const char *fieldname, StringBuffer &out)
 {
-    char dec[50];
     if (fieldname && *fieldname)
         out.append('<').append(fieldname).append('>');
-    DecLock();
+
     if (DecValid(false, size*2, field))
     {
-        DecPushUDecimal(field, size, precision);
-        DecPopCString(sizeof(dec), dec);
+        Decimal temp;
+        char dec[50];
+        temp.setUDecimal(size, precision, field);
+        temp.getCString(sizeof(dec), dec);
+
         const char *finger = dec;
         while(isspace(*finger)) finger++;
         out.append(finger);
     }
     else
         out.append("####");
-    DecUnlock();
+
     if (fieldname && *fieldname)
         out.append("</").append(fieldname).append('>');
 }