# CargoPacket Struct Reference

Container for cargo from the same location and time. More...

`#include <cargopacket.h>`

Inheritance diagram for CargoPacket:

## Public Member Functions
| CargoPacket ()
| Create a new packet for savegame loading.
| CargoPacket (StationID source, TileIndex source_xy, uint16 count, SourceType source_type, SourceID source_id)
| Creates a new cargo packet.
| CargoPacket (uint16 count, byte days_in_transit, StationID source, TileIndex source_xy, TileIndex loaded_at_xy, Money feeder_share=0, SourceType source_type=ST_INDUSTRY, SourceID source_id=INVALID_SOURCE)
| Creates a new cargo packet.
| ~CargoPacket ()
| Destroy the packet.
CargoPacket * | Split (uint new_size)
| Split this packet in two and return the split off part.
void | Merge (CargoPacket *cp)
| Merge another packet into this one.
FORCEINLINE uint16 | Count () const
| Gets the number of 'items' in this packet.
FORCEINLINE Money | FeederShare () const
| Gets the amount of money already paid to earlier vehicles in the feeder chain.
FORCEINLINE byte | DaysInTransit () const
| Gets the number of days this cargo has been in transit.
FORCEINLINE SourceType | SourceSubsidyType () const
| Gets the type of the cargo's source.
FORCEINLINE SourceID | SourceSubsidyID () const
| Gets the ID of the cargo's source.
FORCEINLINE SourceID | SourceStation () const
| Gets the ID of the station where the cargo was loaded for the first time.
FORCEINLINE TileIndex | SourceStationXY () const
| Gets the coordinates of the cargo's source station.
FORCEINLINE TileIndex | LoadedAtXY () const
| Gets the coordinates of the cargo's last loading station.
## Static Public Member Functions
static void | InvalidateAllFrom (SourceType src_type, SourceID src)
| Invalidates (sets source_id to INVALID_SOURCE) all cargo packets from given source.
static void | InvalidateAllFrom (StationID sid)
| Invalidates (sets source to INVALID_STATION) all cargo packets from given station.
static void | AfterLoad ()
## Static Public Attributes
static const uint16 | MAX_COUNT = UINT16_MAX
| Maximum number of items in a single cargo packet.
## Private Attributes
Money | feeder_share
| Value of feeder pickup to be paid for on delivery of cargo.
uint16 | count
| The amount of cargo in this packet.
byte | days_in_transit
| Amount of days this packet has been in transit.
SourceTypeByte | source_type
| Type of `source_id`.
SourceID | source_id
| Index of source, INVALID_SOURCE if unknown/invalid.
StationID | source
| The station where the cargo came from first.
TileIndex | source_xy
| The origin of the cargo (first station in feeder chain).
TileIndex | loaded_at_xy
| Location where this cargo has been loaded into the vehicle.
## Friends
class | CargoList
| The CargoList caches, thus needs to know about it.
class | VehicleCargoList
class | StationCargoList
struct SaveLoad * | GetCargoPacketDesc ()
| We want this to be saved, right?

## Detailed Description

Container for cargo from the same location and time.

Definition at line 37 of file cargopacket.h.

## Constructor & Destructor Documentation

CargoPacket::CargoPacket | ( | StationID | source,
|  | TileIndex | source_xy,
|  | uint16 | count,
|  | SourceType | source_type,
|  | SourceID | source_id |
| ) |  |  |

Creates a new cargo packet.

Parameters:

  | source | Source station of the packet.
  | source_xy | Source location of the packet.
  | count | Number of cargo entities to put in this packet.
  | source_type | 'Type' of source the packet comes from (for subsidies).
  | source_id | Actual source of the packet (for subsidies).

Precondition:
  count != 0

Note:
  We have to zero memory ourselves here because we are using a 'new' that, in contrary to all other pools, does not memset to 0.

Definition at line 48 of file cargopacket.cpp.

CargoPacket::CargoPacket | ( | uint16 | count,
|  | byte | days_in_transit,
|  | StationID | source,
|  | TileIndex | source_xy,
|  | TileIndex | loaded_at_xy,
|  | Money | feeder_share = `0`,
|  | SourceType | source_type = `ST_INDUSTRY`,
|  | SourceID | source_id = `INVALID_SOURCE` |
| ) |  |  |

Creates a new cargo packet.

Initializes the fields that cannot be changed later. Used when loading or splitting packets.

Parameters:

  | count | Number of cargo entities to put in this packet.
  | days_in_transit | Number of days the cargo has been in transit.
  | source | Station the cargo was initially loaded.
  | source_xy | Station location the cargo was initially loaded.
  | loaded_at_xy | Location the cargo was loaded last.
  | feeder_share | Feeder share the packet has already accumulated.
  | source_type | 'Type' of source the packet comes from (for subsidies).
  | source_id | Actual source of the packet (for subsidies).

Note:
  We have to zero memory ourselves here because we are using a 'new' that, in contrary to all other pools, does not memset to 0.

Definition at line 75 of file cargopacket.cpp.

CargoPacket::~CargoPacket | ( |  | ) | `[inline]`

Destroy the packet.

Definition at line 63 of file cargopacket.h.

## Member Function Documentation

FORCEINLINE uint16 CargoPacket::Count | ( |  | ) | const`[inline]`

Gets the number of 'items' in this packet.

Returns:
  Item count.

Definition at line 72 of file cargopacket.h.

References count.

Referenced by StationViewWindow::OrderWaitingCargo().

FORCEINLINE byte CargoPacket::DaysInTransit | ( |  | ) | const`[inline]`

Gets the number of days this cargo has been in transit.

This number isn't really in days, but in 2.5 days (185 ticks) and it is capped at 255.

Returns:
  Length this cargo has been in transit.

Definition at line 93 of file cargopacket.h.

References days_in_transit.

Referenced by CargoPayment::PayFinalDelivery(), and CargoPayment::PayTransfer().

FORCEINLINE Money CargoPacket::FeederShare | ( |  | ) | const`[inline]`

Gets the amount of money already paid to earlier vehicles in the feeder chain.

Returns:
  Feeder share.

Definition at line 82 of file cargopacket.h.

References feeder_share.

Referenced by CargoPayment::PayFinalDelivery().

void CargoPacket::InvalidateAllFrom | ( | StationID | sid | ) | `[static]`

Invalidates (sets source to INVALID_STATION) all cargo packets from given station.

Parameters:

  | sid | Station that gets removed.

Definition at line 132 of file cargopacket.cpp.

References FOR_ALL_CARGOPACKETS, and source.

void CargoPacket::InvalidateAllFrom | ( | SourceType | src_type,
|  | SourceID | src |
| ) |  |  | `[static]`

Invalidates (sets source_id to INVALID_SOURCE) all cargo packets from given source.

Parameters:

  | src_type | Type of source.
  | src | Index of source.

Definition at line 120 of file cargopacket.cpp.

References FOR_ALL_CARGOPACKETS, INVALID_SOURCE, source_id, and source_type.

Referenced by Station::~Station(), and Town::~Town().

FORCEINLINE TileIndex CargoPacket::LoadedAtXY | ( |  | ) | const`[inline]`

Gets the coordinates of the cargo's last loading station.

Returns:
  Last loading station's coordinates.

Definition at line 138 of file cargopacket.h.

References loaded_at_xy.

Referenced by CargoPayment::PayTransfer().

FORCEINLINE void CargoPacket::Merge | ( | CargoPacket * | cp | ) |

Merge another packet into this one.

Parameters:

  | cp | Packet to be merged in.

Definition at line 108 of file cargopacket.cpp.

References count, and feeder_share.

Referenced by CargoList< Tinst >::Append().

FORCEINLINE SourceID CargoPacket::SourceStation | ( |  | ) | const`[inline]`

Gets the ID of the station where the cargo was loaded for the first time.

Returns:
  StationID.

Definition at line 120 of file cargopacket.h.

References source.

Referenced by StationViewWindow::OrderWaitingCargo().

FORCEINLINE TileIndex CargoPacket::SourceStationXY | ( |  | ) | const`[inline]`

Gets the coordinates of the cargo's source station.

Returns:
  Source station's coordinates.

Definition at line 129 of file cargopacket.h.

References source_xy.

Referenced by CargoPayment::PayFinalDelivery().

FORCEINLINE SourceID CargoPacket::SourceSubsidyID | ( |  | ) | const`[inline]`

Gets the ID of the cargo's source.

An IndustryID, TownID or CompanyID.

Returns:
  Source ID.

Definition at line 111 of file cargopacket.h.

References source_id.

Referenced by CargoPayment::PayFinalDelivery().

FORCEINLINE SourceType CargoPacket::SourceSubsidyType | ( |  | ) | const`[inline]`

Gets the type of the cargo's source.

industry, town or head quarter.

Returns:
  Source type.

Definition at line 102 of file cargopacket.h.

References source_type.

Referenced by CargoPayment::PayFinalDelivery().

FORCEINLINE CargoPacket * CargoPacket::Split | ( | uint | new_size | ) |

Split this packet in two and return the split off part.

Parameters:

  | new_size | Size of the remaining part.

Returns:
  Split off part, or NULL if no packet could be allocated!

Definition at line 93 of file cargopacket.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem<&_cargopacket_pool >::CanAllocateItem(), CargoPacket(), count, days_in_transit, feeder_share, loaded_at_xy, source, source_id, source_type, and source_xy.

Referenced by CargoList< Tinst >::MoveTo().

## Friends And Related Function Documentation

friend class CargoList`[friend]`

The CargoList caches, thus needs to know about it.

Definition at line 49 of file cargopacket.h.

struct SaveLoad* GetCargoPacketDesc | ( |  | ) | `[friend]`

We want this to be saved, right?

Returns:
  the saveload description for CargoPackets.

Definition at line 84 of file cargopacket_sl.cpp.

## Field Documentation

const uint16 CargoPacket::MAX_COUNT = UINT16_MAX`[static]`

Maximum number of items in a single cargo packet.

Definition at line 56 of file cargopacket.h.

Referenced by CargoList< Tinst >::Append().

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

- src/cargopacket.h
- src/cargopacket.cpp
- src/saveload/cargopacket_sl.cpp