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

Jan Holesovsky kendy at collabora.com
Fri Aug 8 01:37:01 PDT 2014


 writerfilter/inc/resourcemodel/TagLogger.hxx      |    1 
 writerfilter/source/dmapper/DomainMapper_Impl.hxx |    4 -
 writerfilter/source/ooxml/OOXMLFactory.cxx        |   18 -------
 writerfilter/source/ooxml/OOXMLFactory.hxx        |   21 ---------
 writerfilter/source/ooxml/factory_ns.py           |    2 
 writerfilter/source/ooxml/factoryimpl.py          |   11 ++--
 writerfilter/source/ooxml/factoryimpl_ns.py       |   50 +++++++++++++---------
 7 files changed, 40 insertions(+), 67 deletions(-)

New commits:
commit 024e53766c53916290dcfba08c5e9020a1325cd5
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Fri Aug 8 10:33:29 2014 +0200

    writerfilter: Move includes accordingly.
    
    Change-Id: I35c27dfa459fff3a2ee271333980c789d01fac56

diff --git a/writerfilter/inc/resourcemodel/TagLogger.hxx b/writerfilter/inc/resourcemodel/TagLogger.hxx
index 92ad860..94fc67a 100644
--- a/writerfilter/inc/resourcemodel/TagLogger.hxx
+++ b/writerfilter/inc/resourcemodel/TagLogger.hxx
@@ -24,7 +24,6 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <resourcemodel/WW8ResourceModel.hxx>
 #include <string>
-#include <boost/unordered_map.hpp>
 #include <boost/shared_ptr.hpp>
 #include <libxml/xmlwriter.h>
 
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 98d6b0c..e2f9c4b 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -31,10 +31,10 @@
 #include <stack>
 #include <queue>
 #include <boost/optional.hpp>
+#include <boost/unordered_map.hpp>
 
-#ifndef INCLUDED_RESOURCESIDS
 #include <ooxml/resourceids.hxx>
-#endif
+
 #include <dmapper/DomainMapper.hxx>
 #include "DomainMapperTableManager.hxx"
 #include "PropertyMap.hxx"
diff --git a/writerfilter/source/ooxml/OOXMLFactory.hxx b/writerfilter/source/ooxml/OOXMLFactory.hxx
index 094bd62..c90f729 100644
--- a/writerfilter/source/ooxml/OOXMLFactory.hxx
+++ b/writerfilter/source/ooxml/OOXMLFactory.hxx
@@ -20,7 +20,6 @@
 #ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFACTORY_HXX
 #define INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFACTORY_HXX
 
-#include <boost/unordered_map.hpp>
 #include <boost/shared_ptr.hpp>
 
 #include <resourcemodel/WW8ResourceModel.hxx>
commit c74de6c2e29a16fb4a458816cd17fa678edd16e7
Author: Jan Holesovsky <kendy at collabora.com>
Date:   Fri Aug 8 10:23:14 2014 +0200

    writerfilter: Kill CreateElement and CreateElementMap.
    
    The last bogus usage unordered_map is now gone.  Saves another 300k (stripped
    dbgutil build).
    
    Change-Id: I7be0c495d119e4b117eacc6eb5a5f19433582f73

diff --git a/writerfilter/source/ooxml/OOXMLFactory.cxx b/writerfilter/source/ooxml/OOXMLFactory.cxx
index 813982d..d692305 100644
--- a/writerfilter/source/ooxml/OOXMLFactory.cxx
+++ b/writerfilter/source/ooxml/OOXMLFactory.cxx
@@ -30,30 +30,12 @@ namespace ooxml {
 
 using namespace com::sun::star;
 
-CreateElement::CreateElement()
-:m_nResource(RT_NoResource), m_nId(0)
-{
-}
-
-CreateElement::CreateElement(ResourceType_t nResource, Id nId)
-: m_nResource(nResource), m_nId(nId)
-{
-}
-
 // class OOXMLFactory_ns
 
 OOXMLFactory_ns::~OOXMLFactory_ns()
 {
 }
 
-CreateElementMapPointer OOXMLFactory_ns::getCreateElementMap(Id nId)
-{
-    if (m_CreateElementsMap.find(nId) == m_CreateElementsMap.end())
-        m_CreateElementsMap[nId] = createCreateElementMap(nId);
-
-    return m_CreateElementsMap[nId];
-}
-
 // class OOXMLFactory
 
 typedef rtl::Static< osl::Mutex, OOXMLFactory > OOXMLFactory_Mutex;
diff --git a/writerfilter/source/ooxml/OOXMLFactory.hxx b/writerfilter/source/ooxml/OOXMLFactory.hxx
index 67a3e95..094bd62 100644
--- a/writerfilter/source/ooxml/OOXMLFactory.hxx
+++ b/writerfilter/source/ooxml/OOXMLFactory.hxx
@@ -64,19 +64,6 @@ struct AttributeInfo
     Id m_nRef;
 };
 
-struct CreateElement
-{
-    ResourceType_t m_nResource;
-    Id m_nId;
-
-    CreateElement(ResourceType_t nResource, Id nId);
-    CreateElement();
-};
-
-typedef boost::unordered_map<Token_t, CreateElement> CreateElementMap;
-typedef boost::shared_ptr<CreateElementMap> CreateElementMapPointer;
-typedef boost::unordered_map<Id, CreateElementMapPointer> CreateElementsMap;
-
 class OOXMLFactory_ns {
 public:
     typedef boost::shared_ptr<OOXMLFactory_ns> Pointer_t;
@@ -86,19 +73,14 @@ public:
     virtual void endAction(OOXMLFastContextHandler * pHandler);
     virtual void attributeAction(OOXMLFastContextHandler * pHandler, Token_t nToken, OOXMLValue::Pointer_t pValue);
 
-    CreateElementMapPointer getCreateElementMap(Id nId);
-
 protected:
     virtual ~OOXMLFactory_ns();
 
-    CreateElementsMap m_CreateElementsMap;
-
-    virtual CreateElementMapPointer createCreateElementMap(Id nId) = 0;
-
 public:
     virtual bool getListValue(Id nId, const OUString& rValue, sal_uInt32& rOutValue) = 0;
     virtual Id getResourceId(Id nDefine, sal_Int32 nToken) = 0;
     virtual const AttributeInfo* getAttributeInfoArray(Id nId) = 0;
+    virtual bool getElementId(Id nDefine, Id nId, ResourceType_t& rOutResource, Id& rOutElement) = 0;
 };
 
 class OOXMLFactory
diff --git a/writerfilter/source/ooxml/factory_ns.py b/writerfilter/source/ooxml/factory_ns.py
index f275ed4..38be6d2 100644
--- a/writerfilter/source/ooxml/factory_ns.py
+++ b/writerfilter/source/ooxml/factory_ns.py
@@ -36,7 +36,7 @@ public:
     static Pointer_t getInstance();
 
     virtual const AttributeInfo* getAttributeInfoArray(Id nId);
-    virtual CreateElementMapPointer createCreateElementMap(Id nId);
+    virtual bool getElementId(Id nDefine, Id nId, ResourceType_t& rOutResource, Id& rOutElement);
     virtual bool getListValue(Id nId, const OUString& rValue, sal_uInt32& rOutValue);
     virtual Id getResourceId(Id nDefine, sal_Int32 nToken);
 """ % nsToken)
diff --git a/writerfilter/source/ooxml/factoryimpl.py b/writerfilter/source/ooxml/factoryimpl.py
index 05284ee..8e7e74d 100644
--- a/writerfilter/source/ooxml/factoryimpl.py
+++ b/writerfilter/source/ooxml/factoryimpl.py
@@ -29,21 +29,20 @@ def createFastChildContextFromFactory(model):
 
     if (pFactory.get() != NULL)
     {
-        CreateElementMapPointer pMap = pFactory->getCreateElementMap(nDefine);
-
-        if (pMap.get() != NULL)
+        ResourceType_t nResource;
+        Id nElementId;
+        if (pFactory->getElementId(nDefine, Element, nResource, nElementId))
         {
             Id nId = pFactory->getResourceId(nDefine, Element);
-            CreateElement aCreateElement = (*pMap)[Element];
 
-            switch (aCreateElement.m_nResource)
+            switch (nResource)
             {""")
     resources = ["List", "Integer", "Hex", "String", "UniversalMeasure", "Boolean"]
     for resource in [r.getAttribute("resource") for r in model.getElementsByTagName("resource")]:
         if resource not in resources:
             resources.append(resource)
             print("""            case RT_%s:
-                aResult.set(OOXMLFastHelper<OOXMLFastContextHandler%s>::createAndSetParentAndDefine(pHandler, Element, nId, aCreateElement.m_nId));
+                aResult.set(OOXMLFastHelper<OOXMLFastContextHandler%s>::createAndSetParentAndDefine(pHandler, Element, nId, nElementId));
                 break;""" % (resource, resource))
     print("""            case RT_Any:
                 aResult.set(createFastChildContextFromStart(pHandler, Element));
diff --git a/writerfilter/source/ooxml/factoryimpl_ns.py b/writerfilter/source/ooxml/factoryimpl_ns.py
index e619ffd..6f04ba5 100644
--- a/writerfilter/source/ooxml/factoryimpl_ns.py
+++ b/writerfilter/source/ooxml/factoryimpl_ns.py
@@ -310,28 +310,27 @@ def idForRef(nsNode, refNode):
 def factoryCreateElementMapInner(files, nsNode, defineNode, resourceNamespaceNode=None):
     if not resourceNamespaceNode:
         resourceNamespaceNode = nsNode
-    ret = []
+    ret = {}
     for refNode in defineNode.getElementsByTagName("ref"):
         parent = refNode.parentNode
         if parent.localName in ("element", "attribute"):
             continue
         refName = refNode.getAttribute("name")
 
-        block = []
+        block = {}
         for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]:
             block = factoryCreateElementMapInner(files, nsNode, define)
 
         if len(block) == 0:
-            block1 = []
+            block1 = {}
             for namespaceNode in getChildrenByName(nsNode.parentNode, "namespace"):
                 for define in [i for i in getChildrenByName(getChildByName(namespaceNode, "grammar"), "define") if i.getAttribute("name") == refName]:
-                    block1.extend(factoryCreateElementMapInner(files, namespaceNode, define, nsNode))
+                    block1.update(factoryCreateElementMapInner(files, namespaceNode, define, nsNode))
         else:
             block1 = block
 
         if len(block1):
-            ret.append("         /* ref: %s*/" % refName)
-            ret.extend(block1)
+            ret.update(block1)
 
     for elementNode in defineNode.getElementsByTagName("element"):
         resource = ""
@@ -341,7 +340,7 @@ def factoryCreateElementMapInner(files, nsNode, defineNode, resourceNamespaceNod
             if len(resource):
                 break
         if len(resource):
-            ret.append("        (*pMap)[%s] = CreateElement(RT_%s, %s);" % (fastToken(elementNode), resource, idForRef(nsNode, getChildByName(elementNode, "ref"))))
+            ret[fastToken(elementNode)] = "        case %s: rOutResource = RT_%s; rOutElement = %s; break;" % (fastToken(elementNode), resource, idForRef(nsNode, getChildByName(elementNode, "ref")))
 
     return ret
 
@@ -354,31 +353,44 @@ def factoryCreateElementMapFromStart(files, nsNode):
             block = factoryCreateElementMapInner(files, nsNode, defineNode)
         print("        /* start: %s*/" % startName)
         if block:
-            print("\n".join(block))
-    print("""        break;
-    }
-
-    return pMap;
-}""")
-    print()
+            for k in block.keys():
+                print(block[k])
 
 
 def factoryCreateElementMap(files, nsNode):
-    print("""CreateElementMapPointer OOXMLFactory_%s::createCreateElementMap(Id nId)
+    print("""bool OOXMLFactory_%s::getElementId(Id nDefine, Id nId, ResourceType_t& rOutResource, Id& rOutElement)
 {
-    CreateElementMapPointer pMap(new CreateElementMap());
+    (void) rOutResource;
+    (void) rOutElement;
 
-    switch (nId)
+    switch (nDefine)
     {""" % nsToLabel(nsNode))
 
     for defineNode in getChildrenByName(getChildByName(nsNode, "grammar"), "define"):
-        inner = "\n".join(factoryCreateElementMapInner(files, nsNode, defineNode))
+        inner = factoryCreateElementMapInner(files, nsNode, defineNode)
         if len(inner):
             print("    case %s:" % idForDefine(nsNode, defineNode))
-            print(inner)
+            print("        switch (nId)")
+            print("        {")
+            for k in inner.keys():
+                print(inner[k])
+            print("        default: return false;")
+            print("        }")
+            print("        return true;")
             print("        break;")
     print("    default:")
+    print("        switch (nId)")
+    print("        {")
     factoryCreateElementMapFromStart(files, nsNode)
+    print("""        default: return false;
+        }
+        return true;
+        break;
+    }
+
+    return false;
+}
+""")
 
 
 # factoryActions


More information about the Libreoffice-commits mailing list