00001 /// \file 00002 /// Définition des classe Node_Iterator et Edge_Iterator 00003 00004 #ifndef GUARD_ITERATOR_h 00005 #define GUARD_ITERATOR_h 00006 00007 #include "Node.hpp" 00008 /////////////////////////////////////////////////////////////////////////////// 00009 /// Parcourt les noeuds d'un graphe 00010 /// 00011 /// Les noeuds d'un graphe sont stockés dans une liste. Cette classe permet 00012 /// de parcourir les noeuds d'un graph sans connaissance de cette liste. 00013 /////////////////////////////////////////////////////////////////////////////// 00014 class Node_Iterator{ 00015 friend class Node_Leaf; 00016 friend class Node_Graph; 00017 /// Itérateur sur le vecteur de noeuds 00018 typedef vector<Node>::const_iterator itNode; 00019 /// itérateur du noeud courant 00020 itNode current; 00021 /// itérateur de fin 00022 itNode end; 00023 /// Constructeur à partir d'un noeud graphe 00024 Node_Iterator(const Node_Graph*); 00025 /// Constructeur à partir d'un noeud feuille 00026 Node_Iterator(const Node_Leaf*); 00027 public: 00028 /// Y'a-t-il un prochain élément ? 00029 /// \return vrai s'il y a encore un noeud 00030 bool hasNext(); 00031 /// Accède au prochain élément 00032 /// \return le noeud suivant 00033 Node next(); 00034 }; 00035 /////////////////////////////////////////////////////////////////////////////// 00036 /// Parcourt les arrêtes d'un graphe 00037 /// 00038 /// Les arrêtes d'un graphe sont stockés dans une liste. Cette classe permet 00039 /// de parcourir les arrêtes d'un graph sans connaissance de cette liste. 00040 /////////////////////////////////////////////////////////////////////////////// 00041 class Edge_Iterator{ 00042 friend class Node_Graph; 00043 friend class Node_Leaf; 00044 /// Itérateur sur le vecteur d'arrête 00045 typedef vector<Edge>::const_iterator itEdge; 00046 /// Constructeur à partir d'un noeud graphe 00047 Edge_Iterator(const Node_Graph*); 00048 /// Constructeur à partir d'un noeud feuille 00049 Edge_Iterator(const Node_Leaf*); 00050 /// itérateur de fin 00051 itEdge end; 00052 /// itérateur de l'arrête courante 00053 itEdge current; 00054 public: 00055 /// Y'a-t-il un prochain élément ? 00056 /// \return vrai s'il y a encore une arrête 00057 bool hasNext(); 00058 /// Accède au prochain élément 00059 /// \return l'arrête suivante 00060 Edge next(); 00061 }; 00062 #endif 00063