You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by am...@apache.org on 2008/05/01 18:55:03 UTC

svn commit: r652575 - in /xerces/c/branches/xerces-2/src/xercesc/framework/psvi: PSVIAttributeList.cpp PSVIAttributeList.hpp

Author: amassari
Date: Thu May  1 09:55:02 2008
New Revision: 652575

URL: http://svn.apache.org/viewvc?rev=652575&view=rev
Log:
Rewrite the storage mechanism to avoid cast (XERCESC-1678)

Modified:
    xerces/c/branches/xerces-2/src/xercesc/framework/psvi/PSVIAttributeList.cpp
    xerces/c/branches/xerces-2/src/xercesc/framework/psvi/PSVIAttributeList.hpp

Modified: xerces/c/branches/xerces-2/src/xercesc/framework/psvi/PSVIAttributeList.cpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2/src/xercesc/framework/psvi/PSVIAttributeList.cpp?rev=652575&r1=652574&r2=652575&view=diff
==============================================================================
--- xerces/c/branches/xerces-2/src/xercesc/framework/psvi/PSVIAttributeList.cpp (original)
+++ xerces/c/branches/xerces-2/src/xercesc/framework/psvi/PSVIAttributeList.cpp Thu May  1 09:55:02 2008
@@ -26,15 +26,11 @@
 XERCES_CPP_NAMESPACE_BEGIN
 
 PSVIAttributeList::PSVIAttributeList( MemoryManager* const manager ):  
-        fMemoryManager(manager)
-        , fAttrList(0)
-        , fAttrNameList(0)
-        , fAttrNSList(0)
-        , fAttrPos(0)
-{
-    fAttrList= new (fMemoryManager) RefVectorOf<PSVIAttribute> (10, true, fMemoryManager);
-    fAttrNameList= new (fMemoryManager) RefArrayVectorOf<XMLCh> (10, false, fMemoryManager);
-    fAttrNSList= new (fMemoryManager) RefArrayVectorOf<XMLCh> (10, false, fMemoryManager);
+    fMemoryManager(manager)
+  , fAttrList(0)
+  , fAttrPos(0)
+{
+    fAttrList= new (fMemoryManager) RefVectorOf<PSVIAttributeStorage> (10, true, fMemoryManager);
 }
 
 /*
@@ -58,7 +54,7 @@
 {
     if(index >= fAttrPos)
         return 0;
-    return fAttrList->elementAt(index);
+    return fAttrList->elementAt(index)->fPSVIAttribute;
 }
 
 /*
@@ -74,7 +70,7 @@
     
     if(index >= fAttrPos)
         return 0;
-    return fAttrNameList->elementAt(index);
+    return fAttrList->elementAt(index)->fAttributeName;
 }
 
 /*
@@ -89,7 +85,7 @@
 {
     if(index >= fAttrPos)
         return 0;
-    return fAttrNSList->elementAt(index);
+    return fAttrList->elementAt(index)->fAttributeNamespace;
 }
 
 /*
@@ -103,9 +99,10 @@
                 , const XMLCh * attrNamespace)
 {
     for (unsigned int index=0; index < fAttrPos; index++) {
-        if (XMLString::equals(attrName,fAttrNameList->elementAt(index))
-                && XMLString::equals(attrNamespace,fAttrNSList->elementAt(index)))
-            return fAttrList->elementAt(index);
+        PSVIAttributeStorage* storage = fAttrList->elementAt(index);
+        if (XMLString::equals(attrName,storage->fAttributeName) && 
+            XMLString::equals(attrNamespace,storage->fAttributeNamespace))
+            return storage->fPSVIAttribute;
     }
     return 0;
 }

Modified: xerces/c/branches/xerces-2/src/xercesc/framework/psvi/PSVIAttributeList.hpp
URL: http://svn.apache.org/viewvc/xerces/c/branches/xerces-2/src/xercesc/framework/psvi/PSVIAttributeList.hpp?rev=652575&r1=652574&r2=652575&view=diff
==============================================================================
--- xerces/c/branches/xerces-2/src/xercesc/framework/psvi/PSVIAttributeList.hpp (original)
+++ xerces/c/branches/xerces-2/src/xercesc/framework/psvi/PSVIAttributeList.hpp Thu May  1 09:55:02 2008
@@ -24,7 +24,7 @@
 
 #include <xercesc/util/PlatformUtils.hpp>
 #include <xercesc/framework/psvi/PSVIAttribute.hpp>
-#include <xercesc/util/ValueVectorOf.hpp>
+#include <xercesc/util/RefVectorOf.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
@@ -36,6 +36,25 @@
  * under what conditions it may be relied upon to have meaningful contents.
  */
 
+class XMLPARSER_EXPORT PSVIAttributeStorage : public XMemory
+{
+public:
+    PSVIAttributeStorage() :
+        fPSVIAttribute(0)
+      , fAttributeName(0)
+      , fAttributeNamespace(0)
+    {
+    }
+
+    ~PSVIAttributeStorage()
+    {
+        delete fPSVIAttribute;
+    }
+
+    PSVIAttribute* fPSVIAttribute;
+    const XMLCh*   fAttributeName;
+    const XMLCh*   fAttributeNamespace;
+};
 
 class XMLPARSER_EXPORT PSVIAttributeList : public XMemory
 {
@@ -153,47 +172,37 @@
     //  handler to provide dynamically-need memory
     // fAttrList
     //  list of PSVIAttributes contained by this object
-    // fAttrNameList
-    //  list of the names of the initialized PSVIAttribute objects contained
-    //  in this listing
-    // fAttrNSList
-    //  list of the namespaces of the initialized PSVIAttribute objects contained
-    //  in this listing
     // fAttrPos
     //  current number of initialized PSVIAttributes in fAttrList
-    MemoryManager*                  fMemoryManager;    
-    RefVectorOf<PSVIAttribute>*     fAttrList;
-    RefArrayVectorOf<XMLCh>*        fAttrNameList;
-    RefArrayVectorOf<XMLCh>*        fAttrNSList;
-    unsigned int                    fAttrPos;
+    MemoryManager*                      fMemoryManager;    
+    RefVectorOf<PSVIAttributeStorage>*  fAttrList;
+    unsigned int                        fAttrPos;
 };
+
 inline PSVIAttributeList::~PSVIAttributeList() 
 {
     delete fAttrList;
-    delete fAttrNameList;
-    delete fAttrNSList;
 }
 
 inline PSVIAttribute *PSVIAttributeList::getPSVIAttributeToFill(
             const XMLCh *attrName
             , const XMLCh * attrNS)
 {
-    PSVIAttribute *retAttr = 0;
+    PSVIAttributeStorage* storage = 0;
     if(fAttrPos == fAttrList->size())
     {
-        retAttr = new (fMemoryManager)PSVIAttribute(fMemoryManager);
-        fAttrList->addElement(retAttr);
-        fAttrNameList->addElement((XMLCh *)attrName);
-        fAttrNSList->addElement((XMLCh *)attrNS);
+        storage = new (fMemoryManager) PSVIAttributeStorage();
+        storage->fPSVIAttribute = new (fMemoryManager) PSVIAttribute(fMemoryManager);
+        fAttrList->addElement(storage);
     }
     else
     {
-        retAttr = fAttrList->elementAt(fAttrPos);
-        fAttrNameList->setElementAt((XMLCh *)attrName, fAttrPos);
-        fAttrNSList->setElementAt((XMLCh *)attrNS, fAttrPos);
+        storage = fAttrList->elementAt(fAttrPos);
     }
+    storage->fAttributeName = attrName;
+    storage->fAttributeNamespace = attrNS;
     fAttrPos++;
-    return retAttr;
+    return storage->fPSVIAttribute;
 }
 
 inline void PSVIAttributeList::reset()



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org