Simulateur Ferroviaire
Reconstruction et visualisation d'un réseau ferroviaire à partir de données GeoJSON — Win32 / WebView2 / Leaflet
Chargement...
Recherche...
Aucune correspondance
PCCGraph.h
Aller à la documentation de ce fichier.
1
24#pragma once
25
26#include <memory>
27#include <string>
28#include <unordered_map>
29#include <vector>
30
31#include "PCCEdge.h"
32#include "PCCNode.h"
33#include "PCCStraightNode.h"
34#include "PCCSwitchNode.h"
35
37
40
50{
51public:
52
53 // =========================================================================
54 // Construction
55 // =========================================================================
56
57 explicit PCCGraph();
58 ~PCCGraph() = default;
59
61 PCCGraph(const PCCGraph&) = delete;
62 PCCGraph& operator=(const PCCGraph&) = delete;
63
65 PCCGraph(PCCGraph&&) = default;
67
76 [[nodiscard]] Logger& getLogger() { return m_logger; }
77
78 // =========================================================================
79 // Construction du graphe — appelée par PCCGraphBuilder
80 // =========================================================================
81
102
120
141 PCCEdge* addEdge(PCCNode* from, PCCNode* to, PCCEdgeRole role);
142
143 // =========================================================================
144 // Lookup
145 // =========================================================================
146
159 [[nodiscard]] PCCNode* findNode(const std::string& sourceId) const;
160
161 // =========================================================================
162 // Accesseurs — lecture seule pour PCCLayout et TCORenderer
163 // =========================================================================
164
171 [[nodiscard]] const std::vector<std::unique_ptr<PCCNode>>& getNodes() const { return m_nodes; }
172
178 [[nodiscard]] const std::vector<std::unique_ptr<PCCEdge>>& getEdges() const { return m_edges; }
179
185 [[nodiscard]] std::size_t nodeCount() const { return m_nodes.size(); }
186
192 [[nodiscard]] std::size_t edgeCount() const { return m_edges.size(); }
193
199 [[nodiscard]] bool isEmpty() const { return m_nodes.empty(); }
200
201 // =========================================================================
202 // Remise à zéro
203 // =========================================================================
204
217 void clear();
218
219private:
221 mutable Logger m_logger{ "PCC" };
222
228 std::vector<std::unique_ptr<PCCNode>> m_nodes;
229
234 std::vector<std::unique_ptr<PCCEdge>> m_edges;
235
244 std::unordered_map<std::string, PCCNode*> m_index;
245
246};
Système de journalisation à 5 niveaux de trace, un fichier par moteur.
Connexion orientée entre deux nœuds du graphe PCC.
PCCEdgeRole
Rôle sémantique d'une arête dans la topologie ferroviaire.
Definition PCCEdge.h:34
Nœud abstrait du graphe PCC représentant un bloc ferroviaire.
Nœud PCC représentant un StraightBlock.
Nœud PCC représentant un SwitchBlock.
Modèle de domaine d'un bloc de voie droite (Straight).
Modèle de domaine d'un aiguillage ferroviaire à 3 branches.
Journaliseur associé à un moteur nommé.
Definition Logger.h:99
Connexion orientée entre deux PCCNode du PCCGraph.
Definition PCCEdge.h:50
Conteneur propriétaire du graphe PCC — nœuds, arêtes et index.
Definition PCCGraph.h:50
~PCCGraph()=default
Logger & getLogger()
Retourne une référence au logger PCC pour les classes consommatrices.
Definition PCCGraph.h:76
PCCGraph(const PCCGraph &)=delete
Interdit la copie — unique_ptr non copiable.
void clear()
Vide le graphe — nœuds, arêtes et index.
Definition PCCGraph.cpp:87
const std::vector< std::unique_ptr< PCCEdge > > & getEdges() const
Retourne la collection d'arêtes (lecture seule).
Definition PCCGraph.h:178
PCCGraph()
Definition PCCGraph.cpp:10
std::vector< std::unique_ptr< PCCNode > > m_nodes
Definition PCCGraph.h:228
PCCGraph & operator=(const PCCGraph &)=delete
std::vector< std::unique_ptr< PCCEdge > > m_edges
Definition PCCGraph.h:234
PCCNode * addStraightNode(StraightBlock *source)
Crée un nœud voie droite, l'indexe et le stocke.
Definition PCCGraph.cpp:19
bool isEmpty() const
Indique si le graphe est vide.
Definition PCCGraph.h:199
PCCNode * addSwitchNode(SwitchBlock *source)
Crée un nœud aiguillage, l'indexe et le stocke.
Definition PCCGraph.cpp:29
std::size_t edgeCount() const
Retourne le nombre d'arêtes dans le graphe.
Definition PCCGraph.h:192
PCCEdge * addEdge(PCCNode *from, PCCNode *to, PCCEdgeRole role)
Crée une arête orientée entre deux nœuds et la câble sur les deux.
Definition PCCGraph.cpp:38
PCCGraph & operator=(PCCGraph &&)=default
const std::vector< std::unique_ptr< PCCNode > > & getNodes() const
Retourne la collection de nœuds (lecture seule).
Definition PCCGraph.h:171
PCCNode * findNode(const std::string &sourceId) const
Recherche un nœud par l'identifiant de son bloc source.
Definition PCCGraph.cpp:69
std::size_t nodeCount() const
Retourne le nombre de nœuds dans le graphe.
Definition PCCGraph.h:185
PCCGraph(PCCGraph &&)=default
Déplacement autorisé.
std::unordered_map< std::string, PCCNode * > m_index
Definition PCCGraph.h:244
Logger m_logger
Definition PCCGraph.h:221
Nœud abstrait du graphe PCC.
Definition PCCNode.h:70
Definition StraightBlock.h:24
Definition SwitchBlock.h:41