Reviewed by Dave.
[WebKit-https.git] / WebCore / khtml / html / html_miscimpl.h
index 3786b1e..5cec109 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;
 
@@ -83,8 +83,10 @@ public:
     // In case of multiple items named the same way
     NodeImpl *nextNamedItem( const DOMString &name ) const;
 
+    virtual QValueList<Node> namedItems( const DOMString &name ) const;
+
     struct CollectionInfo {
-        CollectionInfo() : version(0), current(0), position(0), length(0), hasLength(false) {}
+        CollectionInfo() : version(0), current(0), position(0), length(0), haslength(false) {}
         unsigned int version;
         NodeImpl *current;
         unsigned int position;
@@ -93,11 +95,10 @@ public:
      };
 
 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 = true) const;
-    virtual NodeImpl *nextNamedItemInternal( const DOMString &name ) const;
-    void resetCollectionInfo() const;
+    virtual NodeImpl *traverseNextItem(NodeImpl *start) const;
+    bool checkForNameMatch(NodeImpl *node, bool checkName, const DOMString &name, bool caseSensitive) const;
+    virtual unsigned long calcLength() const;
+    virtual void resetCollectionInfo() const;
     // the base node, the collection refers to
     NodeImpl *base;
     // The collection list the following elements
@@ -118,17 +119,30 @@ 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;
+
+    NodeImpl *namedItem ( const DOMString &name, bool caseSensitive = true ) const;
+    NodeImpl *nextNamedItem( const DOMString &name ) const;
+
+    virtual QValueList<Node> namedItems( const DOMString &name ) const;
 protected:
-    virtual unsigned long calcLength(NodeImpl* current) const;
-    virtual NodeImpl *getItem(NodeImpl *current, int index, int& pos) const;
+    virtual unsigned long calcLength() 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;
 };