# SpecializedVehicle< T, Type > Struct Template Reference

Class defining several overloaded accessors so we don't have to cast vehicle types that often. More...

`#include <vehicle_base.h>`

Inheritance diagram for SpecializedVehicle< T, Type >:

## Public Member Functions

FORCEINLINE | SpecializedVehicle ()
| Set vehicle type correctly.
FORCEINLINE T * | First () const
| Get the first vehicle in the chain.
FORCEINLINE T * | Last ()
| Get the last vehicle in the chain.
FORCEINLINE const T * | Last () const
| Get the last vehicle in the chain.
FORCEINLINE T * | Next () const
| Get next vehicle in the chain.
FORCEINLINE T * | Previous () const
| Get previous vehicle in the chain.

## Static Public Member Functions

static FORCEINLINE bool | IsValidID (size_t index)
| Tests whether given index is a valid index for vehicle of this type.
static FORCEINLINE T * | Get (size_t index)
| Gets vehicle with given index.
static FORCEINLINE T * | GetIfValid (size_t index)
| Returns vehicle if the index is a valid index for this vehicle type.
static FORCEINLINE T * | From (Vehicle *v)
| Converts a Vehicle to SpecializedVehicle with type checking.
static FORCEINLINE const T * | From (const Vehicle *v)
| Converts a const Vehicle to const SpecializedVehicle with type checking.

## Static Public Attributes

static const VehicleType | EXPECTED_TYPE = Type
| Specialized type.

## Detailed Description

### template<class T, VehicleType Type>
struct SpecializedVehicle< T, Type >

Class defining several overloaded accessors so we don't have to cast vehicle types that often.

Definition at line 576 of file vehicle_base.h.

## Member Function Documentation

template<class T, VehicleType Type>

FORCEINLINE T* SpecializedVehicle< T, Type >::First | ( |  | ) | const`[inline]`

Get the first vehicle in the chain.

Returns:
  first vehicle in the chain

Reimplemented from Vehicle.

Definition at line 588 of file vehicle_base.h.

Referenced by BuildDepotVehicleList(), CheckTrainsLengths(), CmdAutoreplaceVehicle(), CmdBuildRailWagon(), CmdMoveRailVehicle(), CmdRefitRailVehicle(), CmdRefitRoadVeh(), CmdReverseTrainDirection(), CmdSellRailWagon(), DeleteLastWagon(), FindTrainOnTrackEnum(), SpecializedVehicle< RoadVehicle, VEH_ROAD >::First(), FollowTrainReservation(), RemoveRoadStop(), UpdateTrainPowerProc(), and VehicleEnter_Track().

template<class T, VehicleType Type>

static FORCEINLINE const T* SpecializedVehicle< T, Type >::From | ( | const Vehicle * | v | ) | `[inline, static]`

Converts a const Vehicle to const SpecializedVehicle with type checking.

Parameters:

  | v | Vehicle pointer

Returns:
  pointer to SpecializedVehicle

Definition at line 659 of file vehicle_base.h.

template<class T, VehicleType Type>

static FORCEINLINE T* SpecializedVehicle< T, Type >::From | ( | Vehicle * | v | ) | `[inline, static]`

Converts a Vehicle to SpecializedVehicle with type checking.

Parameters:

  | v | Vehicle pointer

Returns:
  pointer to SpecializedVehicle

Definition at line 648 of file vehicle_base.h.

template<class T, VehicleType Type>

static FORCEINLINE T* SpecializedVehicle< T, Type >::Get | ( | size_t | index | ) | `[inline, static]`

Gets vehicle with given index.

Returns:
  pointer to vehicle with given index casted to T *

Reimplemented from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem<&_vehicle_pool >.

Definition at line 629 of file vehicle_base.h.

Referenced by SpecializedVehicle< RoadVehicle, VEH_ROAD >::Get(), SpecializedVehicle< RoadVehicle, VEH_ROAD >::GetIfValid(), and SpecializedVehicle< RoadVehicle, VEH_ROAD >::IsValidID().

template<class T, VehicleType Type>

static FORCEINLINE T* SpecializedVehicle< T, Type >::GetIfValid | ( | size_t | index | ) | `[inline, static]`

Returns vehicle if the index is a valid index for this vehicle type.

Returns:
  pointer to vehicle with given index if it's a vehicle of this type

Reimplemented from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem<&_vehicle_pool >.

Definition at line 638 of file vehicle_base.h.

template<class T, VehicleType Type>

static FORCEINLINE bool SpecializedVehicle< T, Type >::IsValidID | ( | size_t | index | ) | `[inline, static]`

Tests whether given index is a valid index for vehicle of this type.

Parameters:

  | index | tested index

Returns:
  is this index valid index of T?

Reimplemented from Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem<&_vehicle_pool >.

Definition at line 620 of file vehicle_base.h.

Referenced by SpecializedVehicle< RoadVehicle, VEH_ROAD >::GetIfValid(), and SpecializedVehicle< RoadVehicle, VEH_ROAD >::IsValidID().

template<class T, VehicleType Type>

FORCEINLINE const T* SpecializedVehicle< T, Type >::Last | ( |  | ) | const`[inline]`

Get the last vehicle in the chain.

Returns:
  last vehicle in the chain

Reimplemented from Vehicle.

Definition at line 600 of file vehicle_base.h.

template<class T, VehicleType Type>

FORCEINLINE T* SpecializedVehicle< T, Type >::Last | ( |  | ) | `[inline]`

Get the last vehicle in the chain.

Returns:
  last vehicle in the chain

Reimplemented from Vehicle.

Definition at line 594 of file vehicle_base.h.

Referenced by AdvanceWagonsAfterSwap(), AdvanceWagonsBeforeSwap(), CmdBuildRailWagon(), InsertInConsist(), SpecializedVehicle< RoadVehicle, VEH_ROAD >::Last(), NPFTrainCheckReverse(), NPFTrainFindNearestDepot(), RemoveFromConsist(), YapfTrainCheckReverse(), and YapfTrainFindNearestDepot().

template<class T, VehicleType Type>

FORCEINLINE T* SpecializedVehicle< T, Type >::Next | ( |  | ) | const`[inline]`

Get next vehicle in the chain.

Returns:
  next vehicle in the chain

Reimplemented from Vehicle.

Definition at line 606 of file vehicle_base.h.

Referenced by AdvanceWagonsAfterSwap(), AdvanceWagonsBeforeSwap(), AircraftController(), CheckCaches(), CheckTrainAttachment(), CheckTrainsLengths(), CmdBuildRailStation(), CmdBuildRoadVeh(), CmdSellRailWagon(), ConvertOldMultiheadToNew(), Train::Crash(), DeleteLastWagon(), DrawAircraftDetails(), DrawRoadVehImage(), DrawTrainDetails(), DrawTrainImage(), GetCargoSummaryOfArticulatedVehicle(), GetLengthOfArticulatedVehicle(), Train::GetNextVehicle(), HandleAircraftEnterHangar(), InsertInConsist(), Train::IsInDepot(), RoadVehicle::IsStoppedInDepot(), MakeTrainBackup(), RoadVehicle::MarkDirty(), Aircraft::MarkDirty(), SpecializedVehicle< RoadVehicle, VEH_ROAD >::Next(), NormaliseDualHeads(), NormaliseSubtypes(), DepotWindow::OnPaint(), RemoveFromConsist(), RemoveFromRailBaseStation(), Train::ReserveTrackUnderConsist(), SetTrainGroupID(), UpdateOldAircraft(), UpdateTrainGroupID(), VehicleEnter_Track(), and VehicleLengthSorter().

template<class T, VehicleType Type>

FORCEINLINE T* SpecializedVehicle< T, Type >::Previous | ( |  | ) | const`[inline]`

Get previous vehicle in the chain.

Returns:
  previous vehicle in the chain

Reimplemented from Vehicle.

Definition at line 612 of file vehicle_base.h.

Referenced by AdvanceWagonsAfterSwap(), AdvanceWagonsBeforeSwap(), Train::GetFirstEnginePart(), Train::GetPrevVehicle(), NormaliseSubtypes(), SpecializedVehicle< RoadVehicle, VEH_ROAD >::Previous(), RemoveFromConsist(), and RestoreTrainBackup().

The documentation for this struct was generated from the following file:

- src/vehicle_base.h