[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