Conteneur propriétaire des StraightBlock et SwitchBlock.
Plus de détails...
#include <BlockSet.h>
◆ clear()
◆ rebuildStraightIndex()
| void BlockSet::rebuildStraightIndex |
( |
| ) |
|
|
inline |
Reconstruit tous les index straight depuis straights et straightEndpoints (après absorption Phase7).
Recrée straightsByNode, straightByEndpointPair et straightByDirectedPair en parcourant les endpoints enregistrés. Ignore les sous-blocs internes (frontierNodeId == SIZE_MAX).
◆ totalCount()
| size_t BlockSet::totalCount |
( |
| ) |
const |
|
inline |
◆ straightByDirectedPair
| std::unordered_map<size_t, std::vector<StraightBlock*> > BlockSet::straightByDirectedPair |
Clé directionnelle : (from * 1'000'000 + to) → liste de StraightBlock* adjacents au nœud from vers le nœud to.
- Multi-valué — indispensable pour les crossovers
- Quand deux straights relient les mêmes deux nœuds frontières (voie double ou crossover), les deux entrées sont conservées dans le vecteur. Phase6_BlockExtractor::extractSwitches consomme les entrées dans l'ordre via un ensemble
usedStraights par switch pour éviter d'attribuer le même straight à deux branches distinctes.
- Sens de traversal
- directedKey(switchNode, frontierNode) → sous-bloc adjacent au switch
- directedKey(frontierNode, switchNode) → sous-bloc adjacent au frontier
Valide pour < 1 000 000 nœuds (réseau typique ~420 nœuds).
◆ straightByEndpointPair
| std::unordered_map<size_t, StraightBlock*> BlockSet::straightByEndpointPair |
Cantor(min(A,B), max(A,B)) → premier StraightBlock* depuis A. Utilisé par rebuildStraightIndex(). Pour la résolution des endpoints de switches, préférer straightByDirectedPair.
◆ straightEndpoints
Index parallèle à straights. Pour un sous-bloc interne (subdivision), frontierNodeId == SIZE_MAX et neighbourId est vide — Phase8_RepositoryTransfer ne doit PAS écraser les pointeurs de chaîne pour ces entrées.
◆ straights
◆ straightsByNode
| std::unordered_map<size_t, std::vector<StraightBlock*> > BlockSet::straightsByNode |
nodeId → liste de StraightBlock* adjacents. Multi-valué : un nœud SWITCH est adjacent à plusieurs straights.
◆ switchByNode
| std::unordered_map<size_t, SwitchBlock*> BlockSet::switchByNode |
nodeId → SwitchBlock* correspondant.
◆ switchEndpoints
| std::vector<std::array<BlockEndpoint, 3> > BlockSet::switchEndpoints |
Index parallèle à switches — 3 endpoints par switch.
◆ switches
| std::vector<std::unique_ptr<SwitchBlock> > BlockSet::switches |
La documentation de cette structure a été générée à partir du fichier suivant :
- SimulateurFerroviaire/Modules/GeoParser/Pipeline/BlockSet.h