00001 /*! \file 00002 * X-Forge Util <br> 00003 * Copyright 2000-2003 Fathammer Ltd 00004 * 00005 * \brief N-Tree iterator template 00006 * 00007 * $Id: XFuNTreeRandomAccessIterator.h,v 1.5 2003/03/20 13:19:59 jetro Exp $ 00008 * $Date: 2003/03/20 13:19:59 $ 00009 * $Revision: 1.5 $ 00010 */ 00011 00012 #ifndef XFUNTREERANDOMACCESSITERATOR_H_INCLUDED 00013 #define XFUNTREERANDOMACCESSITERATOR_H_INCLUDED 00014 00015 #include <xfutil/XFuNTreeAbstractIterator.h> 00016 00017 template<class T> class XFuNTree; 00018 template<class T> class XFuNTreeNode; 00019 00020 00021 template<class T> class XFuNTreeRandomAccessIterator : 00022 public XFuNTreeAbstractIterator<T> 00023 { 00024 public: 00025 //! Advances to the Nth child node. 00026 /*! 00027 * \return Reference to Nth child node. 00028 */ 00029 XFuNTreeRandomAccessIterator<T> & advance(const UINT32 aChildIndex); 00030 //! Backs up to parent node. 00031 /*! 00032 * \return Reference to parent node. 00033 */ 00034 XFuNTreeRandomAccessIterator<T> & backup(); 00035 00036 //! Returns an iterator pointing to the Nth child node. 00037 /*! 00038 * \return Iterator pointing to the Nth child node if possible, otherwise default iterator. 00039 */ 00040 XFuNTreeRandomAccessIterator<T> getChild(const UINT32 aIndex) const; 00041 00042 //! Creates an empty iterator. 00043 XFuNTreeRandomAccessIterator(); 00044 //! Creates an iterator pointing to a node. 00045 XFuNTreeRandomAccessIterator(XFuNTreeNode<T> *aNode, 00046 const UINT32 aChildNodes); 00047 //! Clones an iterator. 00048 XFuNTreeRandomAccessIterator(const XFuNTreeAbstractIterator<T> &aClone); 00049 }; 00050 00051 00052 template<class T> 00053 XFuNTreeRandomAccessIterator<T> & 00054 XFuNTreeRandomAccessIterator<T>::advance(const UINT32 aChildIndex) 00055 { 00056 if (mNode != NULL) 00057 mNode = mNode->getChild(aChildIndex); 00058 00059 return *this; 00060 } 00061 00062 00063 template<class T> 00064 XFuNTreeRandomAccessIterator<T> & XFuNTreeRandomAccessIterator<T>::backup() 00065 { 00066 if (mNode != NULL) 00067 mNode = mParent; 00068 00069 return *this; 00070 } 00071 00072 00073 template<class T> XFuNTreeRandomAccessIterator<T> 00074 XFuNTreeRandomAccessIterator<T>::getChild(const UINT32 aIndex) const 00075 { 00076 if (mNode != NULL) 00077 return XFuNTreeRandomAccessIterator<T>(mNode->getChild(aIndex), mChildNodes); 00078 else 00079 return XFuNTreeRandomAccessIterator<T>(); 00080 } 00081 00082 00083 template<class T> 00084 XFuNTreeRandomAccessIterator<T>::XFuNTreeRandomAccessIterator() 00085 { 00086 mNode = NULL; 00087 } 00088 00089 00090 template<class T> 00091 XFuNTreeRandomAccessIterator<T>::XFuNTreeRandomAccessIterator( 00092 XFuNTreeNode<T> *aNode, 00093 const UINT32 aChildNodes) 00094 { 00095 if (aNode != NULL) 00096 { 00097 mNode = aNode; 00098 mChildNodes = aChildNodes; 00099 } 00100 } 00101 00102 00103 template<class T> 00104 XFuNTreeRandomAccessIterator<T>::XFuNTreeRandomAccessIterator( 00105 const XFuNTreeAbstractIterator<T> &aClone) : XFuNTreeAbstractIterator<T>(aClone) 00106 { 00107 } 00108 00109 00110 #endif // !XFUNTREERANDOMACCESSITERATOR_H_INCLUDED
![]() | ||||
![]() |
Confidential Copyright © 2002-2003 Fathammer | with doxygen by Dimitri van Heesch |