Reviewed by Darin.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 20 Nov 2004 02:24:08 +0000 (02:24 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 20 Nov 2004 02:24:08 +0000 (02:24 +0000)
<rdar://problem/3482935> JavaScript so slow it seems like a hang (hrweb.apple.com) (HTMLCollection?)
<rdar://problem/3759149> PeopleSoft page in Safari twice as slow as Mozilla engine (HTMLFormCollection)
<rdar://problem/3888368> selecting an item on the Apache bugzilla query page can be improved 95% (HTMLFormCollection)

Many optimizations to HTMLFormCollection. Iterating it should not
be N^2 any more, though finding items by name could still be.

        * khtml/html/html_formimpl.cpp:
        (DOM::HTMLFormElementImpl::~HTMLFormElementImpl):
        (DOM::HTMLFormElementImpl::length):
        (DOM::HTMLFormElementImpl::submitClick):
        (DOM::HTMLFormElementImpl::formData):
        (DOM::HTMLFormElementImpl::submit):
        (DOM::HTMLFormElementImpl::reset):
        (DOM::HTMLFormElementImpl::radioClicked):
        (DOM::appendToVector):
        (DOM::removeFromVector):
        (DOM::HTMLFormElementImpl::registerFormElement):
        (DOM::HTMLFormElementImpl::removeFormElement):
        (DOM::HTMLFormElementImpl::makeFormElementDormant):
        (DOM::HTMLFormElementImpl::registerImgElement):
        (DOM::HTMLFormElementImpl::removeImgElement):
        * khtml/html/html_formimpl.h:
        * khtml/html/html_miscimpl.cpp:
        (HTMLFormCollectionImpl::FormCollectionInfo::FormCollectionInfo):
        (void::HTMLFormCollectionImpl::FormCollectionInfo::reset):
        (HTMLFormCollectionImpl::resetCollectionInfo):
        (HTMLFormCollectionImpl::calcLength):
        (HTMLFormCollectionImpl::item):
        (HTMLFormCollectionImpl::getNamedItem):
        (HTMLFormCollectionImpl::getNamedFormItem):
        (HTMLFormCollectionImpl::firstItem):
        (HTMLFormCollectionImpl::nextItem):
        * khtml/html/html_miscimpl.h:
        (DOM::HTMLFormCollectionImpl::~HTMLFormCollectionImpl):
        * khtml/xml/dom_elementimpl.cpp:
        (ElementImpl::setAttribute):
        (ElementImpl::setAttributeMap):
        * kwq/KWQPtrVector.h:
        (QPtrVector::findRef):
        * kwq/KWQVectorImpl.h:
        * kwq/KWQVectorImpl.mm:
        (KWQVectorImpl::findRef):
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge elementWithName:inForm:]):
        (-[WebCoreBridge controlsInForm:]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8057 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/html/html_formimpl.cpp
WebCore/khtml/html/html_formimpl.h
WebCore/khtml/html/html_miscimpl.cpp
WebCore/khtml/html/html_miscimpl.h
WebCore/khtml/xml/dom_elementimpl.cpp
WebCore/kwq/KWQPtrVector.h
WebCore/kwq/KWQVectorImpl.h
WebCore/kwq/KWQVectorImpl.mm
WebCore/kwq/WebCoreBridge.mm

index fc691ae..18eb248 100644 (file)
@@ -1,3 +1,54 @@
+2004-11-19  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+
+       <rdar://problem/3482935> JavaScript so slow it seems like a hang (hrweb.apple.com) (HTMLCollection?)
+       <rdar://problem/3759149> PeopleSoft page in Safari twice as slow as Mozilla engine (HTMLFormCollection)
+       <rdar://problem/3888368> selecting an item on the Apache bugzilla query page can be improved 95% (HTMLFormCollection)
+
+       Many optimizations to HTMLFormCollection. Iterating it should not
+       be N^2 any more, though finding items by name could still be.
+       
+        * khtml/html/html_formimpl.cpp:
+        (DOM::HTMLFormElementImpl::~HTMLFormElementImpl):
+        (DOM::HTMLFormElementImpl::length):
+        (DOM::HTMLFormElementImpl::submitClick):
+        (DOM::HTMLFormElementImpl::formData):
+        (DOM::HTMLFormElementImpl::submit):
+        (DOM::HTMLFormElementImpl::reset):
+        (DOM::HTMLFormElementImpl::radioClicked):
+        (DOM::appendToVector):
+        (DOM::removeFromVector):
+        (DOM::HTMLFormElementImpl::registerFormElement):
+        (DOM::HTMLFormElementImpl::removeFormElement):
+        (DOM::HTMLFormElementImpl::makeFormElementDormant):
+        (DOM::HTMLFormElementImpl::registerImgElement):
+        (DOM::HTMLFormElementImpl::removeImgElement):
+        * khtml/html/html_formimpl.h:
+        * khtml/html/html_miscimpl.cpp:
+        (HTMLFormCollectionImpl::FormCollectionInfo::FormCollectionInfo):
+        (void::HTMLFormCollectionImpl::FormCollectionInfo::reset):
+        (HTMLFormCollectionImpl::resetCollectionInfo):
+        (HTMLFormCollectionImpl::calcLength):
+        (HTMLFormCollectionImpl::item):
+        (HTMLFormCollectionImpl::getNamedItem):
+        (HTMLFormCollectionImpl::getNamedFormItem):
+        (HTMLFormCollectionImpl::firstItem):
+        (HTMLFormCollectionImpl::nextItem):
+        * khtml/html/html_miscimpl.h:
+        (DOM::HTMLFormCollectionImpl::~HTMLFormCollectionImpl):
+        * khtml/xml/dom_elementimpl.cpp:
+        (ElementImpl::setAttribute):
+        (ElementImpl::setAttributeMap):
+        * kwq/KWQPtrVector.h:
+        (QPtrVector::findRef):
+        * kwq/KWQVectorImpl.h:
+        * kwq/KWQVectorImpl.mm:
+        (KWQVectorImpl::findRef):
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge elementWithName:inForm:]):
+        (-[WebCoreBridge controlsInForm:]):
+
 2004-11-19  David Harrison  <harrison@apple.com>
 
         Reviewed by Ken and Darin.
index 3a70d7e..bf9fbdf 100644 (file)
@@ -109,15 +109,12 @@ HTMLFormElementImpl::HTMLFormElementImpl(DocumentPtr *doc)
 
 HTMLFormElementImpl::~HTMLFormElementImpl()
 {
-    QPtrListIterator<HTMLGenericFormElementImpl> it(formElements);
-    for (; it.current(); ++it)
-        it.current()->m_form = 0;
-    QPtrListIterator<HTMLGenericFormElementImpl> it2(dormantFormElements);
-    for (; it2.current(); ++it2)
-        it2.current()->m_form = 0;
-    QPtrListIterator<HTMLImageElementImpl> it3(imgElements);
-    for (; it3.current(); ++it3)
-        it3.current()->m_form = 0;
+    for (unsigned i = 0; i < formElements.count(); ++i)
+        formElements[i]->m_form = 0;
+    for (unsigned i = 0; i < dormantFormElements.count(); ++i)
+        dormantFormElements[i]->m_form = 0;
+    for (unsigned i = 0; i < imgElements.count(); ++i)
+        imgElements[i]->m_form = 0;
 }
 
 NodeImpl::Id HTMLFormElementImpl::id() const
@@ -169,9 +166,8 @@ void HTMLFormElementImpl::detach()
 long HTMLFormElementImpl::length() const
 {
     int len = 0;
-    QPtrListIterator<HTMLGenericFormElementImpl> it(formElements);
-    for (; it.current(); ++it)
-       if (it.current()->isEnumeratable())
+    for (unsigned i = 0; i < formElements.count(); ++i)
+       if (formElements[i]->isEnumeratable())
            ++len;
 
     return len;
@@ -182,10 +178,9 @@ long HTMLFormElementImpl::length() const
 void HTMLFormElementImpl::submitClick()
 {
     bool submitFound = false;
-    QPtrListIterator<HTMLGenericFormElementImpl> it(formElements);
-    for (; it.current(); ++it) {
-        if (it.current()->id() == ID_INPUT) {
-            HTMLInputElementImpl *element = static_cast<HTMLInputElementImpl *>(it.current());
+    for (unsigned i = 0; i < formElements.count(); ++i) {
+        if (formElements[i]->id() == ID_INPUT) {
+            HTMLInputElementImpl *element = static_cast<HTMLInputElementImpl *>(formElements[i]);
             if (element->isSuccessfulSubmitButton() && element->renderer()) {
                 submitFound = true;
                 element->click();
@@ -353,8 +348,8 @@ bool HTMLFormElementImpl::formData(FormData &form_data) const
     QStringList fileUploads;
 #endif
 
-    for (QPtrListIterator<HTMLGenericFormElementImpl> it(formElements); it.current(); ++it) {
-        HTMLGenericFormElementImpl* current = it.current();
+    for (unsigned i = 0; i < formElements.count(); ++i) {
+        HTMLGenericFormElementImpl* current = formElements[i];
         FormDataList lst(codec);
 
         if (!current->disabled() && current->appendFormData(lst, m_multipart))
@@ -525,8 +520,8 @@ void HTMLFormElementImpl::submit( bool activateSubmitButton )
 #if APPLE_CHANGES
     KWQ(part)->clearRecordedFormValues();
 #endif
-    for (QPtrListIterator<HTMLGenericFormElementImpl> it(formElements); it.current(); ++it) {
-        HTMLGenericFormElementImpl* current = it.current();
+    for (unsigned i = 0; i < formElements.count(); ++i) {
+        HTMLGenericFormElementImpl* current = formElements[i];
 #if APPLE_CHANGES
         // Our app needs to get form values for password fields for doing password autocomplete,
         // so we are more lenient in pushing values, and let the app decide what to save when.
@@ -603,8 +598,8 @@ void HTMLFormElementImpl::reset(  )
         return;
     }
 
-    for (QPtrListIterator<HTMLGenericFormElementImpl> it(formElements); it.current(); ++it)
-        it.current()->reset();
+    for (unsigned i = 0; i < formElements.count(); ++i)
+        formElements[i]->reset();
 
     m_inreset = false;
 }
@@ -690,8 +685,8 @@ void HTMLFormElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr)
 
 void HTMLFormElementImpl::radioClicked( HTMLGenericFormElementImpl *caller )
 {
-    for (QPtrListIterator<HTMLGenericFormElementImpl> it(formElements); it.current(); ++it) {
-        HTMLGenericFormElementImpl *current = it.current();
+    for (unsigned i = 0; i < formElements.count(); ++i) {
+        HTMLGenericFormElementImpl *current = formElements[i];
         if (current->id() == ID_INPUT &&
             static_cast<HTMLInputElementImpl*>(current)->inputType() == HTMLInputElementImpl::RADIO &&
             current != caller && current->form() == caller->form() && current->name() == caller->name()) {
@@ -700,22 +695,44 @@ void HTMLFormElementImpl::radioClicked( HTMLGenericFormElementImpl *caller )
     }
 }
 
+template<class T> static void appendToVector(QPtrVector<T> &vec, T *item)
+{
+    unsigned size = vec.size();
+    unsigned count = vec.count();
+    if (size == count)
+        vec.resize(size == 0 ? 8 : (int)(size * 1.5));
+    vec.insert(count, item);
+}
+
+template<class T> static void removeFromVector(QPtrVector<T> &vec, T *item)
+{
+    int pos = vec.findRef(item);
+    int count = vec.count();
+    if (pos < 0)
+        return;
+
+    for (int i = pos; i < count - 2; i++) {
+        vec.insert(i, vec[i+1]);
+    }
+    vec.remove(count - 1);
+}
+
 void HTMLFormElementImpl::registerFormElement(HTMLGenericFormElementImpl *e)
 {
-    formElements.append(e);
-    dormantFormElements.remove(e);
+    appendToVector(formElements, e);
+    removeFromVector(dormantFormElements, e);
 }
 
 void HTMLFormElementImpl::removeFormElement(HTMLGenericFormElementImpl *e)
 {
-    formElements.remove(e);
-    dormantFormElements.remove(e);
+    removeFromVector(formElements, e);
+    removeFromVector(dormantFormElements, e);
 }
 
 void HTMLFormElementImpl::makeFormElementDormant(HTMLGenericFormElementImpl *e)
 {
-    dormantFormElements.append(e);
-    formElements.remove(e);
+    appendToVector(dormantFormElements, e);
+    removeFromVector(formElements, e);
 }
 
 bool HTMLFormElementImpl::isURLAttribute(AttributeImpl *attr) const
@@ -725,12 +742,12 @@ bool HTMLFormElementImpl::isURLAttribute(AttributeImpl *attr) const
 
 void HTMLFormElementImpl::registerImgElement(HTMLImageElementImpl *e)
 {
-    imgElements.append(e);
+    appendToVector(imgElements, e);
 }
 
 void HTMLFormElementImpl::removeImgElement(HTMLImageElementImpl *e)
 {
-    imgElements.remove(e);
+    removeFromVector(imgElements, e);
 }
 
 // -------------------------------------------------------------------------
index 85dd55f..5a727c5 100644 (file)
@@ -28,7 +28,7 @@
 #include "html/html_elementimpl.h"
 #include "dom/html_element.h"
 
-#include <qptrlist.h>
+#include <qptrvector.h>
 #include <qmemarray.h>
 
 class KHTMLView;
@@ -111,9 +111,9 @@ public:
     friend class HTMLFormElement;
     friend class HTMLFormCollectionImpl;
 
-    QPtrList<HTMLGenericFormElementImpl> formElements;
-    QPtrList<HTMLGenericFormElementImpl> dormantFormElements;
-    QPtrList<HTMLImageElementImpl> imgElements;
+    QPtrVector<HTMLGenericFormElementImpl> formElements;
+    QPtrVector<HTMLGenericFormElementImpl> dormantFormElements;
+    QPtrVector<HTMLImageElementImpl> imgElements;
     DOMString m_url;
     DOMString m_target;
     DOMString m_enctype;
index 26f8b47..15af794 100644 (file)
@@ -514,9 +514,28 @@ NodeImpl *HTMLCollectionImpl::nextNamedItemInternal( const DOMString &name ) con
 
 // -----------------------------------------------------------------------------
 
+HTMLFormCollectionImpl::FormCollectionInfo::FormCollectionInfo()
+{
+    reset();
+}
+
+void::HTMLFormCollectionImpl::FormCollectionInfo::reset()
+{
+    elementsArrayPosition = 0;
+}
+
+void HTMLFormCollectionImpl::resetCollectionInfo() const
+{
+    unsigned int docversion = static_cast<HTMLDocumentImpl*>(base->getDocument())->domTreeVersion();
+    if (info->version != docversion) {
+        formInfo.reset();
+    }
+    HTMLCollectionImpl::resetCollectionInfo();
+}
+
 unsigned long HTMLFormCollectionImpl::calcLength(NodeImpl*) const
 {
-    QPtrList<HTMLGenericFormElementImpl> l = static_cast<HTMLFormElementImpl*>( base )->formElements;
+    QPtrVector<HTMLGenericFormElementImpl> &l = static_cast<HTMLFormElementImpl*>( base )->formElements;
 
     int len = 0;
     for ( unsigned i = 0; i < l.count(); i++ )
@@ -526,17 +545,35 @@ unsigned long HTMLFormCollectionImpl::calcLength(NodeImpl*) const
     return len;
 }
 
-NodeImpl* HTMLFormCollectionImpl::getItem(NodeImpl *, int index, int&) const
+NodeImpl *HTMLFormCollectionImpl::item(unsigned long index) const
 {
-    QPtrList<HTMLGenericFormElementImpl> l = static_cast<HTMLFormElementImpl*>( base )->formElements;
+    resetCollectionInfo();
 
-    for ( unsigned i = 0; i < l.count(); i++ ) {
+    if (info->current && info->position == index) {
+        return info->current;
+    }
+    if (info->haslength && info->length <= index) {
+        return 0;
+    }
+    if (!info->current || info->position > index) {
+        info->current = 0;
+        info->position = 0;
+        formInfo.elementsArrayPosition = 0;
+    }
 
-        if( l.at( i )->isEnumeratable() ) {
-            if ( !index )
-                return l.at( i );
+    QPtrVector<HTMLGenericFormElementImpl> &l = static_cast<HTMLFormElementImpl*>( base )->formElements;
+    unsigned currentIndex = info->position;
+    
+    for (unsigned i = formInfo.elementsArrayPosition; i < l.count(); i++) {
+        if (l[i]->isEnumeratable() ) {
+            if (index == currentIndex) {
+                info->position = index;
+                info->current = l[i];
+                formInfo.elementsArrayPosition = i;
+                return l[i];
+            }
 
-            --index;
+            currentIndex++;
         }
     }
 
@@ -545,7 +582,7 @@ NodeImpl* HTMLFormCollectionImpl::getItem(NodeImpl *, int index, int&) const
 
 NodeImpl* HTMLFormCollectionImpl::getNamedItem(NodeImpl*, int attr_id, const DOMString& name, bool caseSensitive) const
 {
-    currentPos = 0;
+    info->position = 0;
     return getNamedFormItem( attr_id, name, 0, caseSensitive );
 }
 
@@ -553,14 +590,14 @@ NodeImpl* HTMLFormCollectionImpl::getNamedFormItem(int attr_id, const DOMString&
 {
     if(base->nodeType() == Node::ELEMENT_NODE)
     {
-        HTMLElementImpl* e = static_cast<HTMLElementImpl*>(base);
+        HTMLElementImpl* baseElement = static_cast<HTMLElementImpl*>(base);
         bool foundInputElements = false;
-        if(e->id() == ID_FORM)
+        if(baseElement->id() == ID_FORM)
         {
-            HTMLFormElementImpl* f = static_cast<HTMLFormElementImpl*>(e);
-
-            for(HTMLGenericFormElementImpl* e = f->formElements.first(); e; e = f->formElements.next())
-                if(e->isEnumeratable()) {
+            HTMLFormElementImpl* f = static_cast<HTMLFormElementImpl*>(baseElement);
+            for (unsigned i = 0; i < f->formElements.count(); ++i) {
+                HTMLGenericFormElementImpl* e = f->formElements[i];
+                if (e->isEnumeratable()) {
                     bool found;
                     if (caseSensitive)
                         found = e->getAttribute(attr_id) == name;
@@ -573,14 +610,16 @@ NodeImpl* HTMLFormCollectionImpl::getNamedFormItem(int attr_id, const DOMString&
                         --duplicateNumber;
                     }
                 }
+            }
         }
 
         if ( !foundInputElements )
         {
-            HTMLFormElementImpl* f = static_cast<HTMLFormElementImpl*>(e);
+            HTMLFormElementImpl* f = static_cast<HTMLFormElementImpl*>(baseElement);
 
-            for(HTMLImageElementImpl* e = f->imgElements.first(); e; e = f->imgElements.next())
+            for(unsigned i = 0; i < f->imgElements.count(); ++i)
             {
+                HTMLImageElementImpl* e = f->imgElements[i];
                 bool found;
                 if (caseSensitive)
                     found = e->getAttribute(attr_id) == name;
@@ -599,16 +638,12 @@ NodeImpl* HTMLFormCollectionImpl::getNamedFormItem(int attr_id, const DOMString&
 
 NodeImpl * HTMLFormCollectionImpl::firstItem() const
 {
-    currentPos = 0;
-    int dummy = 0;
-    return getItem(0 /*base->firstChild() unused*/, currentPos, dummy);
+    return item(0);
 }
 
 NodeImpl * HTMLFormCollectionImpl::nextItem() const
 {
-    // This implementation loses the whole benefit of firstItem/nextItem :(
-    int dummy = 0;
-    return getItem(0 /*base->firstChild() unused*/, ++currentPos, dummy);
+    return item(info->position + 1);
 }
 
 NodeImpl * HTMLFormCollectionImpl::nextNamedItemInternal( const DOMString &name ) const
index 9a48bb7..72656f5 100644 (file)
@@ -71,11 +71,11 @@ public:
     };
 
     HTMLCollectionImpl(NodeImpl *_base, int _tagId);
-
     virtual ~HTMLCollectionImpl();
+    
     unsigned long length() const;
-    // This method is o(n), so you should't use it to iterate over all items. Use firstItem/nextItem instead.
-    NodeImpl *item ( unsigned long index ) const;
+    
+    virtual NodeImpl *item ( unsigned long index ) const;
     virtual NodeImpl *firstItem() const;
     virtual NodeImpl *nextItem() const;
 
@@ -97,7 +97,7 @@ protected:
     virtual NodeImpl *getItem(NodeImpl *current, int index, int &pos) const;
     virtual NodeImpl *getNamedItem(NodeImpl *current, int attr_id, const DOMString &name, bool caseSensitive = true) const;
     virtual NodeImpl *nextNamedItemInternal( const DOMString &name ) const;
-    void resetCollectionInfo() const;
+    virtual void resetCollectionInfo() const;
     // the base node, the collection refers to
     NodeImpl *base;
     // The collection list the following elements
@@ -118,17 +118,25 @@ public:
     HTMLFormCollectionImpl(NodeImpl* _base)
         : HTMLCollectionImpl(_base, 0)
     {};
-    ~HTMLFormCollectionImpl() { };
+    ~HTMLFormCollectionImpl() {}
+
+    struct FormCollectionInfo {
+        FormCollectionInfo(); 
+        void reset();
+        int elementsArrayPosition;
+     };
 
+    virtual NodeImpl *item ( unsigned long index ) const;
     virtual NodeImpl *firstItem() const;
     virtual NodeImpl *nextItem() const;
 protected:
     virtual unsigned long calcLength(NodeImpl* current) const;
-    virtual NodeImpl *getItem(NodeImpl *current, int index, int& pos) const;
     virtual NodeImpl *getNamedItem(NodeImpl* current, int attr_id, const DOMString& name, bool caseSensitive) const;
     virtual NodeImpl *nextNamedItemInternal( const DOMString &name ) const;
 private:
+    virtual void resetCollectionInfo() const;
     NodeImpl* getNamedFormItem(int attr_id, const DOMString& name, int duplicateNumber, bool caseSensitive) const;
+    mutable FormCollectionInfo formInfo;
     mutable int currentPos;
 };
 
index 0a572de..56697ee 100644 (file)
@@ -258,6 +258,9 @@ const AtomicString& ElementImpl::getAttributeNS(const DOMString &namespaceURI,
 
 void ElementImpl::setAttribute(NodeImpl::Id id, DOMStringImpl* value, int &exceptioncode )
 {
+    if (inDocument())
+        getDocument()->incDOMTreeVersion();
+
     // allocate attributemap if necessary
     AttributeImpl* old = attributes(false)->getAttributeItem(id);
 
@@ -288,6 +291,9 @@ AttributeImpl* ElementImpl::createAttribute(NodeImpl::Id id, DOMStringImpl* valu
 
 void ElementImpl::setAttributeMap( NamedAttrMapImpl* list )
 {
+    if (inDocument())
+        getDocument()->incDOMTreeVersion();
+
     // If setting the whole map changes the id attribute, we need to
     // call updateId.
 
index 24e14fa..47859ca 100644 (file)
@@ -57,6 +57,7 @@ public:
     bool insert(uint n, T *item) {return impl.insert(n, item, del_item); }
     T *at(int n) const {return (T *)impl.at(n); }
     T **data() {return (T **)impl.data(); }
+    int findRef(T *item) {return impl.findRef(item);}
 
     virtual int compareItems(void *a, void *b) { return a != b; }
 
index 9333be1..f1d6006 100644 (file)
@@ -47,6 +47,7 @@ class KWQVectorImpl
     bool insert(uint n, void *item, bool delItems);
     void *at(uint n) const { return m_data[n]; }
     void **data() { return m_data; }
+    int findRef(void *item);
 
   private:
     KWQVectorImpl &operator=(const KWQVectorImpl&);
index d269182..30e3fd3 100644 (file)
@@ -131,6 +131,18 @@ bool KWQVectorImpl::insert(uint n, void *item, bool delItems)
     return true;
 }
 
+int KWQVectorImpl::findRef(void *item)
+{
+    for (unsigned i = 0; i < m_count; i++) {
+        if (m_data[i] == item) {
+            return i;
+        }
+    }
+    
+    return -1;
+}
+
+
 KWQVectorImpl &KWQVectorImpl::assign(KWQVectorImpl &vi, bool delItems)
 {
     clear(delItems);
index 94ad024..067122b 100644 (file)
@@ -886,7 +886,7 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
 {
     HTMLFormElementImpl *formElement = formElementFromDOMElement(form);
     if (formElement) {
-        QPtrList<HTMLGenericFormElementImpl> elements = formElement->formElements;
+        QPtrVector<HTMLGenericFormElementImpl> &elements = formElement->formElements;
         QString targetName = QString::fromNSString(name);
         for (unsigned int i = 0; i < elements.count(); i++) {
             HTMLGenericFormElementImpl *elt = elements.at(i);
@@ -937,7 +937,7 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
     NSMutableArray *results = nil;
     HTMLFormElementImpl *formElement = formElementFromDOMElement(form);
     if (formElement) {
-        QPtrList<HTMLGenericFormElementImpl> elements = formElement->formElements;
+        QPtrVector<HTMLGenericFormElementImpl> &elements = formElement->formElements;
         for (unsigned int i = 0; i < elements.count(); i++) {
             if (elements.at(i)->isEnumeratable()) {            // Skip option elements, other duds
                 NSView *view = viewForElement(elements.at(i));