# ilgobbo00/railway architecture

> Architecture diagram of the GitHub repository ilgobbo00/railway, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ilgobbo00/railway
- Repository: https://github.com/ilgobbo00/railway

## Overview

Railway is a C++ railway-line simulator: it loads station and timetable descriptions, builds a line and its trains, then advances simulated time until every train reaches its destination. During simulation, trains move and interact with stations, while the central Railway coordinates station updates and checks conflicts between trains; stations manage platforms, parking, and priority-based access. The README also describes train hierarchy and queuing to let higher-priority trains pass. Runtime wiring beyond the sampled excerpts is shown only where supported by the interfaces or explicit comments.

Main entry points: [`Railway.cpp`](https://github.com/ilgobbo00/railway/blob/master/Railway.cpp) (Railway controller), [`Station.cpp`](https://github.com/ilgobbo00/railway/blob/master/Station.cpp) (Station behavior), [`mainRailway.cpp`](https://github.com/ilgobbo00/railway/blob/master/mainRailway.cpp) (Simulation entry), [`Railway.h`](https://github.com/ilgobbo00/railway/blob/master/Railway.h) (Train movement)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_simulation["Simulation core"]
  node_entry["Simulation entry<br/>[mainRailway.cpp]"]
  node_railway["Railway controller<br/>[Railway.cpp]"]
  node_conflicts["Train interaction checks<br/>[Railway.cpp]"]
  node_completion["Completion check<br/>[Railway.cpp]"]
end

subgraph group_domain["Railway domain"]
  node_line_setup["Station line setup<br/>[Railway.cpp]"]
  node_timetable_setup["Train schedule setup<br/>[Railway.cpp]"]
  node_station["Station behavior<br/>[Station.cpp]"]
  node_principal["Principal station<br/>[Station.cpp]"]
  node_secondary["Secondary station<br/>[Station.cpp]"]
  node_train["Train movement<br/>[Railway.h]"]
  node_train_types["Train types<br/>[Railway.h]"]
end

subgraph group_inputs["Simulation inputs"]
  node_line_data["Line description"]
  node_timetable_data["Timetable<br/>[timetables.txt]"]
end

subgraph group_output["Events and status"]
  node_station_events["Station announcements<br/>[Station.cpp]"]
  node_messages["Railway messages<br/>[Railway.cpp]"]
end

node_operator(("User / operator"))

node_operator -->|"starts simulation"| node_entry
node_entry -->|"constructs; advances time"| node_railway
node_entry -->|"checks completion"| node_completion
node_railway -->|"reads line input"| node_line_data
node_railway -->|"reads schedule input"| node_timetable_data
node_railway -->|"builds stations"| node_line_setup
node_railway -->|"builds trains; corrects times"| node_timetable_setup
node_line_setup -->|"creates station objects"| node_station
node_station -->|"specializes requests"| node_principal
node_station -->|"specializes requests"| node_secondary
node_timetable_setup -->|"creates by type"| node_train_types
node_train_types -->|"inherits movement behavior"| node_train
node_railway -->|"checks train interactions"| node_conflicts
node_conflicts -->|"sets slowing and speed"| node_train
node_train -->|"requests access; asks exit"| node_station
node_railway -->|"updates each minute"| node_station
node_station -->|"records announcements"| node_station_events
node_station_events -->|"appends events"| node_messages
node_railway -->|"collects simulation messages"| node_messages
node_railway -->|"checks train status"| node_completion

click node_entry "https://github.com/ilgobbo00/railway/blob/master/mainRailway.cpp"
click node_railway "https://github.com/ilgobbo00/railway/blob/master/Railway.cpp"
click node_line_data "https://github.com/ilgobbo00/railway/blob/master/line_description.txt"
click node_timetable_data "https://github.com/ilgobbo00/railway/blob/master/timetables.txt"
click node_line_setup "https://github.com/ilgobbo00/railway/blob/master/Railway.cpp"
click node_timetable_setup "https://github.com/ilgobbo00/railway/blob/master/Railway.cpp"
click node_station "https://github.com/ilgobbo00/railway/blob/master/Station.cpp"
click node_principal "https://github.com/ilgobbo00/railway/blob/master/Station.cpp"
click node_secondary "https://github.com/ilgobbo00/railway/blob/master/Station.cpp"
click node_train "https://github.com/ilgobbo00/railway/blob/master/Railway.h"
click node_train_types "https://github.com/ilgobbo00/railway/blob/master/Railway.h"
click node_conflicts "https://github.com/ilgobbo00/railway/blob/master/Railway.cpp"
click node_station_events "https://github.com/ilgobbo00/railway/blob/master/Station.cpp"
click node_messages "https://github.com/ilgobbo00/railway/blob/master/Railway.cpp"
click node_completion "https://github.com/ilgobbo00/railway/blob/master/Railway.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_entry,node_railway,node_conflicts,node_completion,node_operator toneBlue
class node_line_setup,node_timetable_setup,node_station,node_principal,node_secondary,node_train,node_train_types toneAmber
class node_line_data,node_timetable_data toneMint
class node_station_events,node_messages toneRose
```

## Components

### Simulation core

- [Simulation entry](https://github.com/ilgobbo00/railway/blob/master/mainRailway.cpp): `mainRailway.cpp`
- [Railway controller](https://github.com/ilgobbo00/railway/blob/master/Railway.cpp): `Railway.cpp`
- [Train interaction checks](https://github.com/ilgobbo00/railway/blob/master/Railway.cpp): `Railway.cpp`
- [Completion check](https://github.com/ilgobbo00/railway/blob/master/Railway.cpp): `Railway.cpp`

### Railway domain

- [Station line setup](https://github.com/ilgobbo00/railway/blob/master/Railway.cpp): `Railway.cpp`
- [Train schedule setup](https://github.com/ilgobbo00/railway/blob/master/Railway.cpp): `Railway.cpp`
- [Station behavior](https://github.com/ilgobbo00/railway/blob/master/Station.cpp): `Station.cpp`
- [Principal station](https://github.com/ilgobbo00/railway/blob/master/Station.cpp): `Station.cpp`
- [Secondary station](https://github.com/ilgobbo00/railway/blob/master/Station.cpp): `Station.cpp`
- [Train movement](https://github.com/ilgobbo00/railway/blob/master/Railway.h): `Railway.h`
- [Train types](https://github.com/ilgobbo00/railway/blob/master/Railway.h): `Railway.h`

### Simulation inputs

- [Line description](https://github.com/ilgobbo00/railway/blob/master/line_description.txt): `line_description.txt`
- [Timetable](https://github.com/ilgobbo00/railway/blob/master/timetables.txt): `timetables.txt`

### Events and status

- [Station announcements](https://github.com/ilgobbo00/railway/blob/master/Station.cpp): `Station.cpp`
- [Railway messages](https://github.com/ilgobbo00/railway/blob/master/Railway.cpp): `Railway.cpp`

### Other components

- **User / operator**

## Connections

- User / operator → Simulation entry: starts simulation
- Simulation entry → Railway controller: constructs; advances time
- Simulation entry → Completion check: checks completion
- Railway controller → Line description: reads line input
- Railway controller → Timetable: reads schedule input
- Railway controller → Station line setup: builds stations
- Railway controller → Train schedule setup: builds trains; corrects times
- Station line setup → Station behavior: creates station objects
- Station behavior → Principal station: specializes requests
- Station behavior → Secondary station: specializes requests
- Train schedule setup → Train types: creates by type
- Train types → Train movement: inherits movement behavior
- Railway controller → Train interaction checks: checks train interactions
- Train interaction checks → Train movement: sets slowing and speed
- Train movement → Station behavior: requests access; asks exit
- Railway controller → Station behavior: updates each minute
- Station behavior → Station announcements: records announcements
- Station announcements → Railway messages: appends events
- Railway controller → Railway messages: collects simulation messages
- Railway controller → Completion check: checks train status
