Page principale | Hiérarchie des classes | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier

Node.hpp

Aller à la documentation de ce fichier.
00001 /// \file 00002 /// Définition de la classe Node 00003 #ifndef GUARD_Node_h 00004 #define GUARD_Node_h 00005 00006 #include <string> 00007 #include <list> 00008 #include <iostream> 00009 #include <sstream> 00010 #include <iomanip> 00011 #include <fstream> 00012 #include <assert.h> 00013 00014 #include "Debug.hpp" 00015 00016 #include "PNG.hpp" 00017 #include "EPSWriter.hpp" 00018 00019 using namespace std; 00020 00021 static Channel channelGraph(&cout); 00022 class Edge; 00023 class Node_Iterator; 00024 class Edge_Iterator; 00025 class PixelMap; 00026 /////////////////////////////////////////////////////////////////////////////// 00027 /// Interface sur une classe de noeud 00028 /// 00029 /// Gère un compteur de références 00030 /// La pluspart des méthodes sont redirigées vers une instance héritées de 00031 /// Node_Base 00032 /////////////////////////////////////////////////////////////////////////////// 00033 class Node{ 00034 friend class Node_Leaf; 00035 friend class Node_Graph; 00036 friend class Node_Iterator; 00037 friend class Edge_Iterator; 00038 /// Pointeur sur un noeud 00039 Node_Leaf* p; 00040 /// Constructeur privé 00041 Node(Node_Leaf*); 00042 public: 00043 /// Constructeur par défaut 00044 Node(); 00045 /// Crée un noeud feuille 00046 static Node CreateLeaf(string = ""); 00047 /// Crée un noeud graphe 00048 static Node Node::CreateGraph(string = ""); 00049 /// Crée un grid graphe à partir d'une image 00050 static Node CreateGridGraph(PNG, string = ""); 00051 /// Constructeur de copie 00052 Node(const Node&); 00053 /// Opérateur d'affectation 00054 Node& operator=(const Node&); 00055 /// Destructeur 00056 ~Node(); 00057 /// Retourne une chaîne de caractères détaillée 00058 string toString(int, bool child = false, bool edge = false)const; 00059 /// Retourne le rang du noeud 00060 int getRank() const; 00061 /// Fixe le rang du noeud 00062 void setRank(int); 00063 /// Retourne le pixel du noeud 00064 Pixel getPixel()const; 00065 /// Fixe le pixel du noeud 00066 void setPixel(Pixel); 00067 /// Retourne le poids du noeuds 00068 double getWeight(); 00069 /// Fixe le poids du noeuds 00070 void setWeight(double); 00071 /// Produit une carte d'un noeud 00072 PixelMap* makeMap(int)const; 00073 /// Produit un fichier PNG du graphe 00074 void drawPNG(string, int)const; 00075 /// Produit un fichier PNG des bords du graphe 00076 void drawBorderPNG(string, int)const; 00077 /// Produit un fichier PS du graphe 00078 void drawEPS(string, int)const; 00079 /// Retourne le nombre d'enfants 00080 int getNodeSize(); 00081 /// Retourne le nombre de feuilles 00082 int getLeafSize(); 00083 /// Retourne le nombre d'arrêtes 00084 int getEdgeSize(); 00085 /// Trie les arrêtes par leur poids 00086 void sortEdge(); 00087 /// Trie les arrêtes par leur poids et récupère les valeurs extrêmes 00088 void sortEdge(float& min, float& max); 00089 /// Ajoute un noeud 00090 void addNode(Node); 00091 /// Ajoute une arrête 00092 void addEdge(Edge); 00093 /// Retourne un itérateur des noeuds 00094 Node_Iterator getNodeIterator(); 00095 /// Retourne un itérateur des arrêtes 00096 Edge_Iterator getEdgeIterator(); 00097 /// Fusionne avec un autre noeud 00098 void merge(Node); 00099 }; 00100 #include "Edge.hpp" 00101 #include "Iterator.hpp" 00102 #include "PixelMap.hpp" 00103 /////////////////////////////////////////////////////////////////////////////// 00104 /// Noeud de type feuille 00105 /// 00106 /// Classe de base avec compteur de references 00107 /////////////////////////////////////////////////////////////////////////////// 00108 class Node_Leaf { 00109 friend class Node; 00110 friend class Node_Graph; 00111 friend class Node_Iterator; 00112 friend class Edge_Iterator; 00113 // Constructeur privé 00114 Node_Leaf(); 00115 protected: 00116 /// Compteur de références 00117 int use; 00118 /// Rang 00119 int rank; 00120 /// Poids du noeud 00121 double weight; 00122 /// Retourne une chaîne de caractères détaillée 00123 virtual string toString(int level, bool child, bool edge) const; 00124 /// Pixel 00125 Pixel pixel; 00126 /// Retourne le rang du noeud 00127 int getRank()const; 00128 /// Fixe le rang du noeud 00129 void setRank(int); 00130 /// Retourne le poids du noeud 00131 double getWeight() const; 00132 /// Fixe le poids du noeud 00133 void setWeight(double); 00134 /// Retourne le pixel du noeud 00135 Pixel getPixel() const; 00136 /// Fixe le pixel du noeud 00137 void setPixel(Pixel); 00138 /// Produit une carte d'un noeud 00139 virtual PixelMap* makeMap(PixelMap*, int, int, int)const; 00140 /// Dessin des noeuds du graphe pour un fichier PNG 00141 virtual void drawPNG(PNG, int, Color, int); 00142 /// Dessin des noeuds du graphe pour un fichier PS 00143 virtual void drawNodeEPS(EPSWriter&, int, Color, int, int); 00144 /// Dessin des arrêtes d'une feuille pour un fichier PS 00145 virtual void drawEdgeEPS(EPSWriter&, int){} 00146 /// Retourne le nombre d'enfant : 1 00147 virtual int getNodeSize()const; 00148 /// Retourne le nombre de feuilles : 1 00149 virtual int getLeafSize()const; 00150 /// Retourne le nombre d'arrête : 0 00151 virtual int getEdgeSize()const; 00152 /// Ajoute un noeud : ne fait rien 00153 virtual void addNode(Node); 00154 /// Ajoute une arrête : ne fait rien 00155 virtual void addEdge(Edge); 00156 /// Trie les arrête : ne fait rien 00157 virtual void sortEdge(){} 00158 /// Trie les arrête : ne fait rien 00159 virtual void sortEdge(float&, float&){} 00160 /// Fusionne avec un autre noeud : ne fait rien 00161 virtual void merge(Node){} 00162 /// Retourne un itérateur des noeuds 00163 virtual Node_Iterator getNodeIterator() const ; 00164 /// Retourne un itérateur des arrêtes 00165 virtual Edge_Iterator getEdgeIterator() const ; 00166 /// Fonction auxilliaire pour le dessin 00167 virtual void _size(int&, int&, int&, int&); 00168 }; 00169 /////////////////////////////////////////////////////////////////////////////// 00170 /// Noeud de type feuille 00171 /// 00172 /// Classe de base avec compteur de references 00173 /////////////////////////////////////////////////////////////////////////////// 00174 class Node_Graph : public Node_Leaf { 00175 /// sdfasd 00176 friend class Node_Leaf; 00177 /// dfasdfas 00178 friend class Node; 00179 /// dsafasdf 00180 friend class Node_Iterator; 00181 /// asdfsd 00182 friend class Edge_Iterator; 00183 /// Les noeuds du graphe 00184 vector<Node> vNode; 00185 /// Les arrêtes du graphe 00186 vector<Edge> vEdge; 00187 /// Constructeur privé 00188 Node_Graph(); 00189 /// Retourne une chaîne de caractères détaillée 00190 string toString(int, bool, bool) const ; 00191 /// Fonction auxilliaire pour le dessin 00192 void _size(int&, int&, int&, int&); 00193 /// Produit une carte d'un noeud 00194 PixelMap* makeMap(PixelMap*, int, int, int)const; 00195 /// Produit un fichier PNG d'un noeud 00196 void drawPNG(PNG, int, Color, int); 00197 /// Produit les noeuds pour un fichier PS 00198 void drawNodeEPS(EPSWriter&, int, Color, int, int); 00199 /// Produit les arrêtes pour un fichier PS 00200 void drawEdgeEPS(EPSWriter&, int); 00201 /// Retourne le nombre d'enfants 00202 int getNodeSize() const; 00203 /// Retourne le nombre de feuilles 00204 int getLeafSize() const; 00205 /// Retourne le nombre d'arrête 00206 int getEdgeSize() const; 00207 /// Trie les arrête 00208 void sortEdge(); 00209 /// Trie les arrêtes et récupère les valeurs extrêmes 00210 void sortEdge(float&, float&); 00211 /// Ajoute un noeud 00212 void addNode(Node); 00213 /// Ajoute une arrête 00214 void addEdge(Edge); 00215 /// Fusionnne avec un autre noeud 00216 void merge(Node); 00217 /// Retourne un itérateur des noeuds 00218 Node_Iterator getNodeIterator() const; 00219 /// Retourne un itérateur des arrêtes 00220 Edge_Iterator getEdgeIterator() const; 00221 00222 00223 }; 00224 #endif 00225 00226 00227

Généré le Sun Jun 27 15:59:32 2004 pour segment par doxygen 1.3.7