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