# pbs.h File Reference

PBS support routines. More...

`#include "tile_type.h"`
`#include "direction_type.h"`
`#include "track_type.h"`
`#include "vehicle_type.h"`

Go to the source code of this file.

## Data Structures
struct | PBSTileInfo
| This struct contains information about the end of a reserved path. More...
## Functions
TrackBits | GetReservedTrackbits (TileIndex t)
| Get the reserved trackbits for any tile, regardless of type.
void | SetRailwayStationPlatformReservation (TileIndex start, DiagDirection dir, bool b)
| Set the reservation for a complete station platform.
bool | TryReserveRailTrack (TileIndex tile, Track t)
| Try to reserve a specific track on a tile.
void | UnreserveRailTrack (TileIndex tile, Track t)
| Lift the reservation of a specific track on a tile.
PBSTileInfo | FollowTrainReservation (const Vehicle *v, bool *train_on_res=NULL)
| Follow a train reservation to the last tile.
bool | IsSafeWaitingPosition (const Vehicle *v, TileIndex tile, Trackdir trackdir, bool include_line_end, bool forbid_90deg=false)
| Determine whether a certain track on a tile is a safe position to end a path.
bool | IsWaitingPositionFree (const Vehicle *v, TileIndex tile, Trackdir trackdir, bool forbid_90deg=false)
| Check if a safe position is free.
Vehicle * | GetTrainForReservation (TileIndex tile, Track track)
| Find the train which has reserved a specific path.
static bool | HasReservedTracks (TileIndex tile, TrackBits tracks)
| Check whether some of tracks is reserved on a tile.

## Detailed Description

PBS support routines.

Definition in file pbs.h.

## Function Documentation

PBSTileInfo FollowTrainReservation | ( | const Vehicle * | v,
|  | bool * | train_on_res |
| ) |  |  |

Follow a train reservation to the last tile.

Parameters:

  | v | the vehicle
  | train_on_res | Is set to a train we might encounter

Returns:
  The last tile of the reservation or the current train tile if no reservation present.

Definition at line 254 of file pbs.cpp.

References _settings_game, RailtypeInfo::compatible_railtypes, FindTrainOnTrackEnum(), FollowReservation(), PathfinderSettings::forbid_90_deg, GetRailDepotReservation(), GetRailTypeInfo(), GetVehicleTrackdir(), HasVehicleOnPos(), IsRailDepotTile(), IsSafeWaitingPosition(), PBSTileInfo::okay, GameSettings::pf, FindTrainOnTrackInfo::res, PBSTileInfo::tile, and PBSTileInfo::trackdir.

Referenced by DoTrainPathfind(), ExtendTrainReservation(), FindClosestTrainDepot(), TryPathReserve(), and YapfFindNearestRailDepotTwoWay().

TrackBits GetReservedTrackbits | ( | TileIndex | t | ) |

Get the reserved trackbits for any tile, regardless of type.

Parameters:

  | t | the tile

Returns:
  the reserved trackbits. TRACK_BIT_NONE on nothing reserved or a tile without rail.

Definition at line 16 of file pbs.cpp.

References GetRailCrossingReservation(), GetRailStationReservation(), GetRailTunnelBridgeReservation(), GetRailWaypointReservation(), GetTileType(), GetTrackReservation(), GetTunnelBridgeTransportType(), IsPlainRailTile(), IsRailDepot(), IsRailWaypoint(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, TRACK_BIT_NONE, and TRANSPORT_RAIL.

Referenced by CmdConvertRail(), FollowReservation(), FreeTrainTrackReservation(), HasReservedTracks(), IsWaitingPositionFree(), and TryPathReserve().

Vehicle* GetTrainForReservation | ( | TileIndex | tile,
|  | Track | track |
| ) |  |  |

Find the train which has reserved a specific path.

Parameters:

  | tile | A tile on the path.
  | track | A reserved track on the tile.

Returns:
  The vehicle holding the reservation or NULL if the path is stray.

Definition at line 277 of file pbs.cpp.

References FindTrainOnTrackInfo::best, RailtypeInfo::compatible_railtypes, FindTrainOnTrackEnum(), FindVehicleOnPos(), FollowReservation(), GetOtherTunnelBridgeEnd(), GetRailTypeInfo(), GetTileOwner(), GetTileRailType(), HasReservedTracks(), IsTileType(), MP_TUNNELBRIDGE, FindTrainOnTrackInfo::res, ReverseTrackdir(), PBSTileInfo::tile, TileOffsByDiagDir(), PBSTileInfo::trackdir, TrackdirToExitdir(), TrackToTrackBits(), and TrackToTrackdir().

Referenced by CmdBuildRailroadStation(), CmdBuildSingleSignal(), CmdConvertRail(), CmdRemoveFromRailroadStation(), CmdRemoveSingleRail(), CmdRemoveSingleSignal(), and RemoveTrainWaypoint().

static bool HasReservedTracks | ( | TileIndex | tile,
|  | TrackBits | tracks |
| ) |  |  | `[inline, static]`

Check whether some of tracks is reserved on a tile.

Parameters:

  | tile | the tile
  | tracks | the tracks to test

Returns:
  true if at least on of tracks is reserved

Definition at line 43 of file pbs.h.

References GetReservedTrackbits(), and TRACK_BIT_NONE.

Referenced by CheckNextTrainTile(), CmdBuildSingleSignal(), CmdRemoveSingleRail(), CmdRemoveSingleSignal(), DeleteLastWagon(), DrawTrackBits(), ExtendTrainReservation(), FindClosestTrainDepot(), FollowReservation(), GetTrainForReservation(), IsWaitingPositionFree(), and TryPathReserve().

bool IsSafeWaitingPosition | ( | const Vehicle * | v,
|  | TileIndex | tile,
|  | Trackdir | trackdir,
|  | bool | include_line_end,
|  | bool | forbid_90deg |
| ) |  |  |

Determine whether a certain track on a tile is a safe position to end a path.

Parameters:

  | v | the vehicle to test for
  | tile | The tile
  | trackdir | The trackdir to test
  | include_line_end | Should end-of-line tiles be considered safe?
  | forbid_90def | Don't allow trains to make 90 degree turns

Returns:
  True if it is a safe position

Definition at line 323 of file pbs.cpp.

References RailtypeInfo::compatible_railtypes, DiagdirReachesTrackdirs(), FindFirstTrackdir(), CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GetRailTypeInfo(), HasPbsSignalOnTrackdir(), HasSignalOnTrackdir(), IsRailDepotTile(), IsTileType(), KillFirstBit(), CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_exitdir, CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_td_bits, CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_tile, MP_RAILWAY, TRACKDIR_BIT_NONE, TrackdirCrossesTrackdirs(), and TrackdirToTrack().

Referenced by ExtendTrainReservation(), FindSafePosition(), FollowTrainReservation(), and NPFFindSafeTile().

bool IsWaitingPositionFree | ( | const Vehicle * | v,
|  | TileIndex | tile,
|  | Trackdir | trackdir,
|  | bool | forbid_90deg |
| ) |  |  |

Check if a safe position is free.

Parameters:

  | v | the vehicle to test for
  | tile | The tile
  | trackdir | The trackdir to test
  | forbid_90def | Don't allow trains to make 90 degree turns

Returns:
  True if the position is free

Definition at line 363 of file pbs.cpp.

References RailtypeInfo::compatible_railtypes, DiagdirReachesTrackdirs(), CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::Follow(), GetRailTypeInfo(), GetReservedTrackbits(), HasReservedTracks(), HasSignalOnTrackdir(), IsRailDepotTile(), IsTileType(), CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_exitdir, CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_td_bits, CFollowTrackT< Ttr_type_, T90deg_turns_allowed_, Tmask_reserved_tracks >::m_new_tile, MP_RAILWAY, TrackdirBitsToTrackBits(), TrackdirCrossesTrackdirs(), TrackdirToTrack(), and TrackOverlapsTracks().

Referenced by ExtendTrainReservation(), NPFFindSafeTile(), and NPFSaveTargetData().

void SetRailwayStationPlatformReservation | ( | TileIndex | start,
|  | DiagDirection | dir,
|  | bool | b |
| ) |  |  |

Set the reservation for a complete station platform.

Precondition:
  IsRailwayStationTile(start)

Parameters:

  | start | starting tile of the platform
  | dir | the direction in which to follow the platform
  | b | the state the reservation should be set to

Definition at line 49 of file pbs.cpp.

References DiagDirToAxis(), MarkTileDirtyByTile(), SetRailwayStationReservation(), TILE_ADD, and TileOffsByDiagDir().

Referenced by ClearPathReservation(), CmdBuildRailroadStation(), CmdRemoveFromRailroadStation(), and NPFSaveTargetData().

bool TryReserveRailTrack | ( | TileIndex | tile,
|  | Track | t |
| ) |  |  |

Try to reserve a specific track on a tile.

Parameters:

  | tile | the tile
  | t | the track

Returns:
  true if reservation was successfull, i.e. the track was free and didn't cross any other reserved tracks.

Definition at line 71 of file pbs.cpp.

References _settings_client, GetCrossingReservation(), GetDepotWaypointReservation(), GetRailTunnelBridgeReservation(), GetRailwayStationReservation(), GetTileTrackStatus(), GetTileType(), GetTunnelBridgeTransportType(), ClientSettings::gui, IsPlainRailTile(), IsRailDepot(), IsRailWaypoint(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, SetCrossingReservation(), SetDepotWaypointReservation(), SetRailwayStationReservation(), SetTunnelBridgeReservation(), GUISettings::show_track_reservation, TrackToTrackBits(), TRANSPORT_RAIL, and TryReserveTrack().

Referenced by DeleteLastWagon(), ExtendTrainReservation(), and NPFSaveTargetData().

void UnreserveRailTrack | ( | TileIndex | tile,
|  | Track | t |
| ) |  |  |

Lift the reservation of a specific track on a tile.

Parameters:

  | tile | the tile
  | t | the track

Definition at line 127 of file pbs.cpp.

References _settings_client, GetTileTrackStatus(), GetTileType(), GetTunnelBridgeTransportType(), ClientSettings::gui, IsPlainRailTile(), IsRailDepot(), IsRailWaypoint(), MarkTileDirtyByTile(), MP_RAILWAY, MP_ROAD, MP_STATION, MP_TUNNELBRIDGE, SetCrossingReservation(), SetDepotWaypointReservation(), SetRailwayStationReservation(), SetTunnelBridgeReservation(), GUISettings::show_track_reservation, TrackToTrackBits(), TRANSPORT_RAIL, UnreserveTrack(), and UpdateLevelCrossing().

Referenced by ClearPathReservation(), DeleteLastWagon(), ExtendTrainReservation(), and FreeTrainTrackReservation().