19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef __DOM_NODE_ITERATOR__
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define __DOM_NODE_ITERATOR__
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass NodeImpl;
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Iterator is used to visit DOM_TREE.
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <code>Attention</code>:The Iterator is not safe.
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * When the caller using the Iterator to access the tree,
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the underlying data was modified, the next() or prev() may not return the right result.
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * means we have a <code>restriction</code>: the Iterator can only be used in the case that the tree structure will
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not be modified before the end of iteration.
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass NodeIterator {
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NodeImpl* scopeNode;/** The specify the range of iterating */
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NodeImpl* endNode;  /** The specify the end position of iterating */
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NodeImpl* curNode;  /** The position of current node.*/
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Find the specify node's next order node.
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param node The specify node.
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The next order node when success.
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         NULL when has an error.
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NodeImpl* findNextOrderNode(NodeImpl* node);
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Find the specify node's previous order node.
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param node The specify node.
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return The previous order node when success.
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         NULL when has an error.
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NodeImpl* findPreviousOrderNode(NodeImpl* node);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Construct for NodeIterator.
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * we must specify <code>start</code> value when we want iterate the DOM_TREE.
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and we also can specify the <code>scope</code> if want restrict the range of iterator.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (eg: restrict the range of iterating at a subtree).otherwise it will iterate the whole DOM_TREE.
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param start The start position.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param scope The scope of iterating.
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param end The end position of iterating.
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NodeIterator(NodeImpl* start, NodeImpl* scope = NULL, NodeImpl* end = NULL);
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get next order node at current position in DOM_TREE.
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return NULL On there is not node can be get.
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         The pointer of node On can get next node.
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NodeImpl* next();
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Get next order node at current position in DOM_TREE.
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return NULL On there is not node can be get.
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         The pointer of node On can get previous node.
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    NodeImpl* prev();
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /*  __DOM_NODE_ITERATOR__ */
75