summaryrefslogtreecommitdiffstats
path: root/WebCore/dom/NodeIterator.h
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2008-12-17 18:05:15 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2008-12-17 18:05:15 -0800
commit1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353 (patch)
tree4457a7306ea5acb43fe05bfe0973b1f7faf97ba2 /WebCore/dom/NodeIterator.h
parent9364f22aed35e1a1e9d07c121510f80be3ab0502 (diff)
downloadexternal_webkit-1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353.zip
external_webkit-1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353.tar.gz
external_webkit-1cbdecfa9fc428ac2d8aca0fa91c9580b3d57353.tar.bz2
Code drop from //branches/cupcake/...@124589
Diffstat (limited to 'WebCore/dom/NodeIterator.h')
-rw-r--r--WebCore/dom/NodeIterator.h62
1 files changed, 35 insertions, 27 deletions
diff --git a/WebCore/dom/NodeIterator.h b/WebCore/dom/NodeIterator.h
index b737e57..842e71d 100644
--- a/WebCore/dom/NodeIterator.h
+++ b/WebCore/dom/NodeIterator.h
@@ -1,11 +1,9 @@
/*
- * This file is part of the DOM implementation for KDE.
- *
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
* Copyright (C) 2000 Frederik Holljen (frederik.holljen@hig.no)
* Copyright (C) 2001 Peter Kelly (pmk@post.com)
* Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
- * Copyright (C) 2004 Apple Computer, Inc.
+ * Copyright (C) 2004, 2008 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -27,46 +25,56 @@
#ifndef NodeIterator_h
#define NodeIterator_h
+#include "JSDOMBinding.h"
+#include "NodeFilter.h"
#include "Traversal.h"
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
namespace WebCore {
- class Document;
-
typedef int ExceptionCode;
- class NodeIterator : public Traversal {
+ class NodeIterator : public RefCounted<NodeIterator>, public Traversal {
public:
- NodeIterator(Node*, unsigned whatToShow, PassRefPtr<NodeFilter>, bool expandEntityReferences);
+ static PassRefPtr<NodeIterator> create(PassRefPtr<Node> rootNode, unsigned whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
+ {
+ return adoptRef(new NodeIterator(rootNode, whatToShow, filter, expandEntityReferences));
+ }
~NodeIterator();
- Node* nextNode(ExceptionCode&);
- Node* previousNode(ExceptionCode&);
+ PassRefPtr<Node> nextNode(JSC::ExecState*, ExceptionCode&);
+ PassRefPtr<Node> previousNode(JSC::ExecState*, ExceptionCode&);
void detach();
- Node* referenceNode() const { return m_referenceNode.get(); }
- bool pointerBeforeReferenceNode() const { return m_beforeReferenceNode; }
+ Node* referenceNode() const { return m_referenceNode.node.get(); }
+ bool pointerBeforeReferenceNode() const { return m_referenceNode.isPointerBeforeNode; }
+
+ // This function is called before any node is removed from the document tree.
+ void nodeWillBeRemoved(Node*);
- /**
- * This function has to be called if you delete a node from the
- * document tree and you want the Iterator to react if there
- * are any changes concerning it.
- */
- void notifyBeforeNodeRemoval(Node* removed);
+ // For non-JS bindings. Silently ignores the JavaScript exception if any.
+ PassRefPtr<Node> nextNode(ExceptionCode& ec) { return nextNode(execStateFromNode(referenceNode()), ec); }
+ PassRefPtr<Node> previousNode(ExceptionCode& ec) { return previousNode(execStateFromNode(referenceNode()), ec); }
private:
- void setReferenceNode(Node*);
- void setPointerBeforeReferenceNode(bool flag = true) { m_beforeReferenceNode = flag; }
- bool detached() const { return m_detached; }
- void setDetached(bool flag = true) { m_detached = flag; }
- Document* document() const { return m_doc.get(); }
- Node* findNextNode(Node*) const;
- Node* findPreviousNode(Node*) const;
+ NodeIterator(PassRefPtr<Node>, unsigned whatToShow, PassRefPtr<NodeFilter>, bool expandEntityReferences);
+
+ struct NodePointer {
+ RefPtr<Node> node;
+ bool isPointerBeforeNode;
+ NodePointer();
+ NodePointer(PassRefPtr<Node>, bool);
+ void clear();
+ bool moveToNext(Node* root);
+ bool moveToPrevious(Node* root);
+ };
+
+ void updateForNodeRemoval(Node* nodeToBeRemoved, NodePointer&) const;
- RefPtr<Node> m_referenceNode;
- bool m_beforeReferenceNode;
+ NodePointer m_referenceNode;
+ NodePointer m_candidateNode;
bool m_detached;
- RefPtr<Document> m_doc;
};
} // namespace WebCore