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

Jeff Stedfast jeff at xamarin.com
Sat Jul 26 10:50:59 PDT 2014


 writerfilter/source/ooxml/OOXMLFactory.cxx            |    2 -
 writerfilter/source/ooxml/OOXMLFastContextHandler.cxx |    8 +----
 writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx    |   28 ++++++++++++++----
 writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx    |    3 +
 4 files changed, 30 insertions(+), 11 deletions(-)

New commits:
commit b3d434a9701daab054981c891c645eefe1685b51
Author: Jeff Stedfast <jeff at xamarin.com>
Date:   Sat Jul 26 13:51:59 2014 -0400

    fdo#80908 - avoid lots of alloc/free of 2x boolean values.
    
    Change-Id: I04c680813e997b98d8c1aae70953a61e5c28c4cd

diff --git a/writerfilter/source/ooxml/OOXMLFactory.cxx b/writerfilter/source/ooxml/OOXMLFactory.cxx
index eb5e4b4..7546096 100644
--- a/writerfilter/source/ooxml/OOXMLFactory.cxx
+++ b/writerfilter/source/ooxml/OOXMLFactory.cxx
@@ -149,7 +149,7 @@ void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
                     {
                         const char *pValue = "";
                         pAttribs->getAsChar(nToken, pValue);
-                        OOXMLValue::Pointer_t xValue(new OOXMLBooleanValue(pValue));
+                        OOXMLValue::Pointer_t xValue(OOXMLBooleanValue::Create(pValue));
                         pHandler->newProperty(nId, xValue);
                         pFactory->attributeAction(pHandler, nToken, xValue);
                     }
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index c66d190..be6319f 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -1298,7 +1298,7 @@ void OOXMLFastContextHandlerValue::setDefaultBooleanValue()
 {
     if (mpValue.get() == NULL)
     {
-        OOXMLValue::Pointer_t pValue(new OOXMLBooleanValue(true));
+        OOXMLValue::Pointer_t pValue = OOXMLBooleanValue::Create(true);
         setValue(pValue);
     }
 }
@@ -1482,8 +1482,7 @@ void OOXMLFastContextHandlerTextTableCell::endCell()
             pProps->add(pProp);
         }
         {
-            OOXMLValue::Pointer_t pVal
-                (new OOXMLBooleanValue(mnTableDepth > 0));
+            OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0);
             OOXMLProperty::Pointer_t pProp
                 (new OOXMLPropertyImpl(NS_ooxml::LN_tblCell, pVal, OOXMLPropertyImpl::SPRM));
             pProps->add(pProp);
@@ -1582,8 +1581,7 @@ void OOXMLFastContextHandlerTextTableRow::handleGridBefore( OOXMLValue::Pointer_
                 pProps->add(pProp);
             }
             {
-                OOXMLValue::Pointer_t pVal
-                    (new OOXMLBooleanValue(mnTableDepth > 0));
+                OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0);
                 OOXMLProperty::Pointer_t pProp
                     (new OOXMLPropertyImpl(NS_ooxml::LN_tblCell, pVal, OOXMLPropertyImpl::SPRM));
                 pProps->add(pProp);
diff --git a/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
index 4061de2..2589225 100644
--- a/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
@@ -259,6 +259,28 @@ OOXMLValue * OOXMLBinaryValue::clone() const
   class OOXMLBooleanValue
 */
 
+static bool GetBooleanValue(const char *pValue)
+{
+    return !strcmp(pValue, "true")
+           || !strcmp(pValue, "True")
+           || !strcmp(pValue, "1")
+           || !strcmp(pValue, "on")
+           || !strcmp(pValue, "On");
+}
+
+OOXMLValue::Pointer_t OOXMLBooleanValue::Create(bool bValue)
+{
+    static OOXMLValue::Pointer_t False(new OOXMLBooleanValue (false));
+    static OOXMLValue::Pointer_t True(new OOXMLBooleanValue (true));
+
+    return bValue ? True : False;
+}
+
+OOXMLValue::Pointer_t OOXMLBooleanValue::Create(const char *pValue)
+{
+    return Create (GetBooleanValue(pValue));
+}
+
 OOXMLBooleanValue::OOXMLBooleanValue(bool bValue)
 : mbValue(bValue)
 {
@@ -267,11 +289,7 @@ OOXMLBooleanValue::OOXMLBooleanValue(bool bValue)
 OOXMLBooleanValue::OOXMLBooleanValue(const char *pValue)
 : mbValue(false)
 {
-    mbValue = !strcmp(pValue, "true")
-           || !strcmp(pValue, "True")
-           || !strcmp(pValue, "1")
-           || !strcmp(pValue, "on")
-           || !strcmp(pValue, "On");
+    mbValue = GetBooleanValue(pValue);
 }
 
 OOXMLBooleanValue::~OOXMLBooleanValue()
diff --git a/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx b/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx
index 96197b6..bade784 100644
--- a/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx
+++ b/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx
@@ -104,6 +104,9 @@ class OOXMLBooleanValue : public OOXMLValue
 protected:
     bool mbValue;
 public:
+    static OOXMLValue::Pointer_t Create (bool bValue);
+    static OOXMLValue::Pointer_t Create (const char *pValue);
+
     explicit OOXMLBooleanValue(bool bValue);
     explicit OOXMLBooleanValue(const char *pValue);
     virtual ~OOXMLBooleanValue();


More information about the Libreoffice-commits mailing list