|
Simulateur Ferroviaire
Reconstruction et visualisation d'un réseau ferroviaire à partir de données GeoJSON — Win32 / WebView2 / Leaflet
|
Conteneur propriétaire du graphe PCC — nœuds, arêtes et index. Plus de détails...
#include <PCCGraph.h>
Fonctions membres publiques | |
| PCCGraph () | |
| ~PCCGraph ()=default | |
| PCCGraph (const PCCGraph &)=delete | |
| Interdit la copie — unique_ptr non copiable. | |
| PCCGraph & | operator= (const PCCGraph &)=delete |
| PCCGraph (PCCGraph &&)=default | |
| Déplacement autorisé. | |
| PCCGraph & | operator= (PCCGraph &&)=default |
| Logger & | getLogger () |
| Retourne une référence au logger PCC pour les classes consommatrices. | |
| PCCNode * | addStraightNode (StraightBlock *source) |
| Crée un nœud voie droite, l'indexe et le stocke. | |
| PCCNode * | addSwitchNode (SwitchBlock *source) |
| Crée un nœud aiguillage, l'indexe et le stocke. | |
| 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. | |
| PCCNode * | findNode (const std::string &sourceId) const |
| Recherche un nœud par l'identifiant de son bloc source. | |
| const std::vector< std::unique_ptr< PCCNode > > & | getNodes () const |
| Retourne la collection de nœuds (lecture seule). | |
| const std::vector< std::unique_ptr< PCCEdge > > & | getEdges () const |
| Retourne la collection d'arêtes (lecture seule). | |
| std::size_t | nodeCount () const |
| Retourne le nombre de nœuds dans le graphe. | |
| std::size_t | edgeCount () const |
| Retourne le nombre d'arêtes dans le graphe. | |
| bool | isEmpty () const |
| Indique si le graphe est vide. | |
| void | clear () |
| Vide le graphe — nœuds, arêtes et index. | |
Attributs privés | |
| Logger | m_logger { "PCC" } |
| std::vector< std::unique_ptr< PCCNode > > | m_nodes |
| std::vector< std::unique_ptr< PCCEdge > > | m_edges |
| std::unordered_map< std::string, PCCNode * > | m_index |
Conteneur propriétaire du graphe PCC — nœuds, arêtes et index.
Règles de copie / déplacement :
|
explicit |
|
default |
|
delete |
Interdit la copie — unique_ptr non copiable.
|
default |
Déplacement autorisé.
| PCCEdge * PCCGraph::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.
Crée une PCCEdge (from → to, rôle role), la stocke dans m_edges (ownership exclusif), puis appelle PCCNode::addEdge sur from et sur to pour enregistrer l'arête dans les deux sens.
Si role est PCCEdgeRole::ROOT, NORMAL ou DEVIATION et que from est un PCCSwitchNode, l'arête correspondante est également enregistrée via setRootEdge / setNormalEdge / setDeviationEdge.
| from | Nœud source. Ne doit pas être nullptr. |
| to | Nœud cible. Ne doit pas être nullptr. |
| role | Rôle sémantique de la connexion. |
| std::invalid_argument | Si from ou to est nullptr (propagé depuis PCCEdge). |
| PCCNode * PCCGraph::addStraightNode | ( | StraightBlock * | source | ) |
Crée un nœud voie droite, l'indexe et le stocke.
Crée un PCCStraightNode depuis source, le stocke dans m_nodes (ownership exclusif), l'indexe dans m_index, et retourne un pointeur non-propriétaire vers le nœud créé.
Le pointeur retourné reste valide tant que ce PCCGraph est en vie et que clear() n'a pas été appelé.
| source | Pointeur non-propriétaire vers le StraightBlock source. Ne doit pas être nullptr. |
source est valide.| std::invalid_argument | Si source est nullptr (propagé depuis PCCStraightNode). |
| PCCNode * PCCGraph::addSwitchNode | ( | SwitchBlock * | source | ) |
Crée un nœud aiguillage, l'indexe et le stocke.
Crée un PCCSwitchNode depuis source, le stocke dans m_nodes (ownership exclusif), l'indexe dans m_index, et retourne un pointeur non-propriétaire vers le nœud créé.
| source | Pointeur non-propriétaire vers le SwitchBlock source. Ne doit pas être nullptr. |
source est valide.| std::invalid_argument | Si source est nullptr (propagé depuis PCCSwitchNode). |
| void PCCGraph::clear | ( | ) |
Vide le graphe — nœuds, arêtes et index.
Libère tous les nœuds et arêtes (les unique_ptr sont détruits), vide l'index et remet le graphe dans son état initial.
À appeler depuis PCCPanel avant chaque reconstruction via PCCGraphBuilder, typiquement en réponse à WM_PARSING_SUCCESS.
|
inline |
Retourne le nombre d'arêtes dans le graphe.
| PCCNode * PCCGraph::findNode | ( | const std::string & | sourceId | ) | const |
Recherche un nœud par l'identifiant de son bloc source.
Lookup O(1) amorti dans m_index. Utilise find() et non operator[] pour éviter l'insertion implicite d'une entrée vide si la clé est absente.
| sourceId | Identifiant du bloc source (ex. "s/0", "sw/3"). |
nullptr si aucun nœud ne correspond à sourceId.
|
inline |
Retourne la collection d'arêtes (lecture seule).
|
inline |
Retourne une référence au logger PCC pour les classes consommatrices.
Permet à PCCGraphBuilder et PCCLayout d'utiliser le même logger sans couplage direct à PCCGraph.
Logger{"PCC"}.
|
inline |
Retourne la collection de nœuds (lecture seule).
|
inline |
Indique si le graphe est vide.
true si aucun nœud n'a été ajouté, false sinon.
|
inline |
Retourne le nombre de nœuds dans le graphe.
|
private |
Arêtes du graphe — propriétaires exclusives. Chaque arête est câblée sur ses deux nœuds extrémités via addEdge().
|
private |
Index de lookup O(1) : sourceId → PCCNode*. Construit incrémentalement par addStraightNode() et addSwitchNode(). Les pointeurs sont non-propriétaires — ownership dans m_nodes.
Utiliser find() pour la lecture — operator[] insèrerait une entrée vide si la clé est absente.
|
mutableprivate |
Logger dédié à la couche PCC, utilisé pour tracer les événements et erreurs liés à l'interface utilisateur.
|
private |
Nœuds du graphe — propriétaires exclusifs. Chaque entrée est un PCCStraightNode ou PCCSwitchNode. L'ordre d'insertion correspond à l'ordre de parsing.