OpenTTD
|
CargoList that is used for vehicles. More...
#include <cargopacket.h>
Public Member Functions | |
StationID | Source () const |
Returns source of the first cargo packet in this list. | |
Money | FeederShare () const |
Returns total sum of the feeder share for all packets. | |
uint | ActionCount (MoveToAction action) const |
Returns the amount of cargo designated for a given purpose. | |
uint | StoredCount () const |
Returns sum of cargo on board the vehicle (ie not only reserved). | |
uint | TotalCount () const |
Returns sum of cargo, including reserved cargo. | |
uint | ReservedCount () const |
Returns sum of reserved cargo. | |
uint | UnloadCount () const |
Returns sum of cargo to be moved out of the vehicle at the current station. | |
uint | RemainingCount () const |
Returns the sum of cargo to be kept in the vehicle at the current station. | |
void | Append (CargoPacket *cp, MoveToAction action=MTA_KEEP) |
Appends the given cargo packet. | |
void | AgeCargo () |
Ages the all cargo in this list. | |
void | InvalidateCache () |
Invalidates the cached data and rebuild it. | |
void | SetTransferLoadPlace (TileIndex xy) |
Sets loaded_at_xy to the current station for all cargo to be transfered. | |
bool | Stage (bool accepted, StationID current_station, StationIDStack next_station, uint8 order_flags, const GoodsEntry *ge, CargoPayment *payment) |
Stages cargo for unloading. | |
void | KeepAll () |
Marks all cargo in the vehicle as to be kept. | |
template<MoveToAction Tfrom, MoveToAction Tto> | |
uint | Reassign (uint max_move, TileOrStationID update=INVALID_TILE) |
Moves some cargo from one designation to another. | |
uint | Return (uint max_move, StationCargoList *dest, StationID next_station) |
Returns reserved cargo to the station and removes it from the cache. | |
uint | Unload (uint max_move, StationCargoList *dest, CargoPayment *payment) |
Unloads cargo at the given station. | |
uint | Shift (uint max_move, VehicleCargoList *dest) |
Shifts cargo between two vehicles. | |
uint | Truncate (uint max_move=UINT_MAX) |
Truncates the cargo in this list to the given amount. | |
uint | Reroute (uint max_move, VehicleCargoList *dest, StationID avoid, StationID avoid2, const GoodsEntry *ge) |
Routes packets with station "avoid" as next hop to a different place. | |
![]() | |
CargoList () | |
Create the cargo list. | |
void | OnCleanPool () |
const CargoPacketList * | Packets () const |
Returns a pointer to the cargo packet list (so you can iterate over it etc). | |
uint | DaysInTransit () const |
Returns average number of days in transit for a cargo entity. |
Static Public Member Functions | |
static bool | AreMergable (const CargoPacket *cp1, const CargoPacket *cp2) |
Are two the two CargoPackets mergeable in the context of a list of CargoPackets for a Vehicle? |
Protected Types | |
typedef CargoList < VehicleCargoList, CargoPacketList > | Parent |
The (direct) parent of this class. |
Protected Member Functions | |
template<class Taction > | |
void | ShiftCargo (Taction action) |
Shifts cargo from the front of the packet list and applies some action to it. | |
template<class Taction > | |
void | PopCargo (Taction action) |
Pops cargo from the back of the packet list and applies some action to it. | |
void | AssertCountConsistency () const |
Assert that the designation counts add up. | |
void | AddToCache (const CargoPacket *cp) |
Update the cache to reflect adding of this packet. | |
void | RemoveFromCache (const CargoPacket *cp, uint count) |
Update the cached values to reflect the removal of this packet or part of it. | |
void | AddToMeta (const CargoPacket *cp, MoveToAction action) |
Adds a packet to the metadata. | |
void | RemoveFromMeta (const CargoPacket *cp, MoveToAction action, uint count) |
Removes a packet or part of it from the metadata. |
Static Protected Member Functions | |
static MoveToAction | ChooseAction (const CargoPacket *cp, StationID cargo_next, StationID current_station, bool accepted, StationIDStack next_station) |
Choose action to be performed with the given cargo packet. | |
![]() | |
static bool | TryMerge (CargoPacket *cp, CargoPacket *icp) |
Protected Attributes | |
Money | feeder_share |
Cache for the feeder share. | |
uint | action_counts [NUM_MOVE_TO_ACTION] |
Counts of cargo to be transfered, delivered, kept and loaded. | |
![]() | |
uint | count |
Cache for the number of cargo entities. | |
uint | cargo_days_in_transit |
Cache for the sum of number of days in transit of each entity; comparable to man-hours. | |
CargoPacketList | packets |
The cargo packets in this list. |
Friends | |
class | StationCargoList |
The station cargo list needs to control the unloading. | |
class | CargoList< VehicleCargoList, CargoPacketList > |
The super class ought to know what it's doing. | |
class | CargoShift |
class | CargoTransfer |
class | CargoDelivery |
class | CargoRemoval |
class | CargoReturn |
class | VehicleCargoReroute |
struct SaveLoad * | GetVehicleDescription (VehicleType vt) |
The vehicles have a cargo list (and we want that saved). |
Additional Inherited Members | |
![]() | |
enum | MoveToAction |
Kind of actions that could be done with packets on move. More... | |
typedef CargoPacketList::iterator | Iterator |
The iterator for our container. | |
typedef CargoPacketList::reverse_iterator | ReverseIterator |
The reverse iterator for our container. | |
typedef CargoPacketList::const_iterator | ConstIterator |
The const iterator for our container. | |
typedef CargoPacketList::const_reverse_iterator | ConstReverseIterator |
The const reverse iterator for our container. |
CargoList that is used for vehicles.
Definition at line 283 of file cargopacket.h.
|
protected |
The (direct) parent of this class.
Definition at line 286 of file cargopacket.h.
|
inline |
Returns the amount of cargo designated for a given purpose.
action | Action the cargo is designated for. |
Definition at line 356 of file cargopacket.h.
References action_counts.
Referenced by Vehicle::CancelReservation(), and StationCargoList::Load().
|
protected |
Update the cache to reflect adding of this packet.
Increases count, feeder share and days_in_transit.
cp | New packet to be inserted. |
Reimplemented from CargoList< VehicleCargoList, CargoPacketList >.
Definition at line 348 of file cargopacket.cpp.
References CargoList< VehicleCargoList, CargoPacketList >::AddToCache(), CargoPacket::feeder_share, and feeder_share.
Referenced by AddToMeta().
|
protected |
Adds a packet to the metadata.
cp | Packet to be added. |
action | MoveToAction of the packet. |
Definition at line 374 of file cargopacket.cpp.
References action_counts, AddToCache(), AssertCountConsistency(), and CargoPacket::count.
Referenced by Append(), and VehicleCargoReroute::operator()().
void VehicleCargoList::Append | ( | CargoPacket * | cp, |
MoveToAction | action = MTA_KEEP |
||
) |
Appends the given cargo packet.
Tries to merge it with another one in the packets list. If no fitting packet is found, appends it. You can only append packets to the ranges of packets designated for keeping or loading. Furthermore if there are already packets reserved for loading you cannot directly add packets to the "keep" list. You first have to load the reserved ones.
cp | Cargo packet to add. |
action | Either MTA_KEEP if you want to add the packet directly or MTA_LOAD if you want to reserve it first. |
Definition at line 254 of file cargopacket.cpp.
References action_counts, AddToMeta(), CargoPacket::count, CargoList< VehicleCargoList, CargoPacketList >::count, CargoList< VehicleCargoList, CargoPacketList >::MTA_KEEP, CargoList< VehicleCargoList, CargoPacketList >::MTA_LOAD, CargoList< VehicleCargoList, CargoPacketList >::packets, and CargoList< VehicleCargoList, CargoPacketList >::TryMerge().
Referenced by Load_VEHS(), LoadOldVehicle(), CargoLoad::operator()(), CargoReservation::operator()(), and CargoShift::operator()().
|
inlinestatic |
Are two the two CargoPackets mergeable in the context of a list of CargoPackets for a Vehicle?
cp1 | First CargoPacket. |
cp2 | Second CargoPacket. |
Definition at line 447 of file cargopacket.h.
References CargoPacket::days_in_transit, CargoPacket::loaded_at_xy, CargoPacket::source_id, CargoPacket::source_type, and CargoPacket::source_xy.
|
staticprotected |
Choose action to be performed with the given cargo packet.
cp | The packet. |
cargo_next | Next hop the cargo wants to pass. |
current_station | Current station of the vehicle carrying the cargo. |
accepted | If the cargo is accepted at the current station. |
next_station | Next station(s) the vehicle may stop at. |
Definition at line 423 of file cargopacket.cpp.
References SmallStack< Titem, Tindex, Tinvalid, Tgrowth_step, Tmax_size >::Contains(), CargoList< VehicleCargoList, CargoPacketList >::MTA_DELIVER, CargoList< VehicleCargoList, CargoPacketList >::MTA_KEEP, CargoList< VehicleCargoList, CargoPacketList >::MTA_TRANSFER, and CargoPacket::source.
Referenced by Stage().
|
inline |
Returns total sum of the feeder share for all packets.
Definition at line 346 of file cargopacket.h.
References feeder_share.
Referenced by DrawRoadVehDetails(), and DrawShipDetails().
void VehicleCargoList::InvalidateCache | ( | ) |
Invalidates the cached data and rebuild it.
Reimplemented from CargoList< VehicleCargoList, CargoPacketList >.
Definition at line 542 of file cargopacket.cpp.
References feeder_share, and CargoList< VehicleCargoList, CargoPacketList >::InvalidateCache().
Referenced by CargoPacket::AfterLoad(), and CheckCaches().
|
inline |
Marks all cargo in the vehicle as to be kept.
This is mostly useful for loading old savegames. When loading is aborted the reserved cargo has to be returned first.
Definition at line 422 of file cargopacket.h.
References action_counts, CargoList< VehicleCargoList, CargoPacketList >::count, CargoList< VehicleCargoList, CargoPacketList >::MTA_DELIVER, CargoList< VehicleCargoList, CargoPacketList >::MTA_KEEP, CargoList< VehicleCargoList, CargoPacketList >::MTA_LOAD, and CargoList< VehicleCargoList, CargoPacketList >::MTA_TRANSFER.
Referenced by CargoPacket::AfterLoad(), and Vehicle::CancelReservation().
|
protected |
Pops cargo from the back of the packet list and applies some action to it.
Taction | Action class or function to be used. It should define "bool operator()(CargoPacket *)". If true is returned the cargo packet will be removed from the list. Otherwise it will be kept and the loop will be aborted. |
action | Action instance to be applied. |
Definition at line 311 of file cargopacket.cpp.
References CargoList< VehicleCargoList, CargoPacketList >::packets.
Referenced by Return(), Shift(), and Truncate().
uint VehicleCargoList::Reassign | ( | uint | max_move, |
TileOrStationID | update = INVALID_TILE |
||
) |
Moves some cargo from one designation to another.
You can only move between adjacent designations. E.g. you can keep cargo that was previously reserved (MTA_LOAD), but you can't reserve cargo that's marked as to be delivered. Furthermore, as this method doesn't change the actual packets, you cannot move cargo from or to MTA_TRANSFER. You need a specialized template method for that.
from | Previous designation of cargo. |
to | New designation of cargo. |
max_move | Maximum amount of cargo to reassign. |
Definition at line 561 of file cargopacket.cpp.
References action_counts, min(), and CargoList< VehicleCargoList, CargoPacketList >::MTA_TRANSFER.
Referenced by StationCargoList::Load().
|
inline |
Returns the sum of cargo to be kept in the vehicle at the current station.
Definition at line 402 of file cargopacket.h.
References action_counts, CargoList< VehicleCargoList, CargoPacketList >::MTA_KEEP, and CargoList< VehicleCargoList, CargoPacketList >::MTA_LOAD.
Referenced by FinalizeRefitAction::operator()().
|
protected |
Update the cached values to reflect the removal of this packet or part of it.
Decreases count, feeder share and days_in_transit.
cp | Packet to be removed from cache. |
count | Amount of cargo from the given packet to be removed. |
Reimplemented from CargoList< VehicleCargoList, CargoPacketList >.
Definition at line 337 of file cargopacket.cpp.
References feeder_share, CargoPacket::FeederShare(), and CargoList< VehicleCargoList, CargoPacketList >::RemoveFromCache().
Referenced by RemoveFromMeta().
|
protected |
Removes a packet or part of it from the metadata.
cp | Packet to be removed. |
action | MoveToAction of the packet (for updating the counts). |
count | Amount of cargo to be removed. |
Definition at line 360 of file cargopacket.cpp.
References action_counts, AssertCountConsistency(), CargoList< VehicleCargoList, CargoPacketList >::count, and RemoveFromCache().
Referenced by CargoDelivery::operator()(), CargoTransfer::operator()(), CargoReturn::operator()(), CargoShift::operator()(), and VehicleCargoReroute::operator()().
uint VehicleCargoList::Reroute | ( | uint | max_move, |
VehicleCargoList * | dest, | ||
StationID | avoid, | ||
StationID | avoid2, | ||
const GoodsEntry * | ge | ||
) |
Routes packets with station "avoid" as next hop to a different place.
max_move | Maximum amount of cargo to move. |
dest | List to prepend the cargo to. |
avoid | Station to exclude from routing and current next hop of packets to reroute. |
avoid2 | Additional station to exclude from routing. ge GoodsEntry to get the routing info from. |
Definition at line 673 of file cargopacket.cpp.
References action_counts, min(), CargoList< VehicleCargoList, CargoPacketList >::MTA_TRANSFER, and ShiftCargo().
Referenced by RerouteCargo().
|
inline |
Returns sum of reserved cargo.
Definition at line 384 of file cargopacket.h.
References action_counts, and CargoList< VehicleCargoList, CargoPacketList >::MTA_LOAD.
Referenced by PrepareRefitAction::operator()().
uint VehicleCargoList::Return | ( | uint | max_move, |
StationCargoList * | dest, | ||
StationID | next | ||
) |
Returns reserved cargo to the station and removes it from the cache.
max_move | Maximum amount of cargo to move. |
dest | Station the cargo is returned to. |
ID | of next the station the cargo wants to go next. |
Definition at line 608 of file cargopacket.cpp.
References action_counts, min(), CargoList< VehicleCargoList, CargoPacketList >::MTA_LOAD, and PopCargo().
Referenced by Vehicle::CancelReservation(), and ReturnCargoAction::operator()().
void VehicleCargoList::SetTransferLoadPlace | ( | TileIndex | xy | ) |
Sets loaded_at_xy to the current station for all cargo to be transfered.
This is done when stopping or skipping while the vehicle is unloading. In that case the vehicle will get part of its transfer credits early and it may get more transfer credits than it's entitled to.
xy | New loaded_at_xy for the cargo. |
Definition at line 404 of file cargopacket.cpp.
References action_counts, CargoPacket::count, CargoPacket::loaded_at_xy, CargoList< VehicleCargoList, CargoPacketList >::MTA_TRANSFER, CargoList< VehicleCargoList, CargoPacketList >::packets, and BaseStation::xy.
Referenced by Vehicle::CancelReservation().
uint VehicleCargoList::Shift | ( | uint | max_move, |
VehicleCargoList * | dest | ||
) |
Shifts cargo between two vehicles.
dest | Other vehicle's cargo list. |
max_move | Maximum amount of cargo to be moved. |
Definition at line 621 of file cargopacket.cpp.
References CargoList< VehicleCargoList, CargoPacketList >::count, min(), and PopCargo().
|
protected |
Shifts cargo from the front of the packet list and applies some action to it.
Taction | Action class or function to be used. It should define "bool operator()(CargoPacket *)". If true is returned the cargo packet will be removed from the list. Otherwise it will be kept and the loop will be aborted. |
action | Action instance to be applied. |
Definition at line 289 of file cargopacket.cpp.
References CargoList< VehicleCargoList, CargoPacketList >::packets.
|
inline |
Returns source of the first cargo packet in this list.
Definition at line 337 of file cargopacket.h.
References CargoList< VehicleCargoList, CargoPacketList >::count, and CargoList< VehicleCargoList, CargoPacketList >::packets.
Referenced by DrawRoadVehDetails(), DrawShipDetails(), and GetCargoSummaryOfArticulatedVehicle().
bool VehicleCargoList::Stage | ( | bool | accepted, |
StationID | current_station, | ||
StationIDStack | next_station, | ||
uint8 | order_flags, | ||
const GoodsEntry * | ge, | ||
CargoPayment * | payment | ||
) |
Stages cargo for unloading.
The cargo is sorted so that packets to be transferred, delivered or kept are in consecutive chunks in the list. At the same time the designation_counts are updated to reflect the size of those chunks.
accepted | If the cargo will be accepted at the station. |
current_station | ID of the station. |
next_station | ID of the station the vehicle will go to next. |
order_flags | OrderUnloadFlags that will apply to the unload operation. |
ge | GoodsEntry for getting the flows. |
payment | Payment object for registering transfers. return If any cargo will be unloaded. |
Definition at line 450 of file cargopacket.cpp.
References action_counts, CargoPacket::AddFeederShare(), AssertCountConsistency(), FlowStat::ChangeShare(), ChooseAction(), CargoPacket::count, CargoList< VehicleCargoList, CargoPacketList >::count, feeder_share, GoodsEntry::flows, FlowStat::GetShares(), FlowStat::GetVia(), SmallStack< Titem, Tindex, Tinvalid, Tgrowth_step, Tmax_size >::IsEmpty(), CargoList< VehicleCargoList, CargoPacketList >::MTA_DELIVER, CargoList< VehicleCargoList, CargoPacketList >::MTA_KEEP, CargoList< VehicleCargoList, CargoPacketList >::MTA_LOAD, CargoList< VehicleCargoList, CargoPacketList >::MTA_TRANSFER, CargoPacket::next_station, OUFB_NO_UNLOAD, OUFB_TRANSFER, OUFB_UNLOAD, CargoList< VehicleCargoList, CargoPacketList >::packets, CargoPayment::PayTransfer(), SmallStack< Titem, Tindex, Tinvalid, Tgrowth_step, Tmax_size >::Pop(), and CargoPacket::source.
|
inline |
Returns sum of cargo on board the vehicle (ie not only reserved).
Definition at line 366 of file cargopacket.h.
References action_counts, CargoList< VehicleCargoList, CargoPacketList >::count, and CargoList< VehicleCargoList, CargoPacketList >::MTA_LOAD.
Referenced by CalcPercentVehicleFilled(), DrawRoadVehDetails(), DrawShipDetails(), GetCargoSummaryOfArticulatedVehicle(), Vehicle::GetConsistFreeCapacities(), RoadVehicle::GetImage(), Train::GetImage(), RoadVehicle::GetWeight(), Train::GetWeight(), IncreaseStats(), LoadUnloadVehicle(), IsEmptyAction::operator()(), and VehicleResolverObject::ResolveReal().
|
inline |
Returns sum of cargo, including reserved cargo.
Definition at line 375 of file cargopacket.h.
References CargoList< VehicleCargoList, CargoPacketList >::count.
Referenced by RefitVehicle(), and TransferCargo().
uint VehicleCargoList::Truncate | ( | uint | max_move = UINT_MAX | ) |
Truncates the cargo in this list to the given amount.
It leaves the first cargo entities and removes max_move from the back of the list.
max_move | Maximum amount of entities to be removed from the list. |
Definition at line 658 of file cargopacket.cpp.
References CargoList< VehicleCargoList, CargoPacketList >::count, min(), and PopCargo().
Referenced by CrashAirplane(), Vehicle::PreDestructor(), and RefitVehicle().
uint VehicleCargoList::Unload | ( | uint | max_move, |
StationCargoList * | dest, | ||
CargoPayment * | payment | ||
) |
Unloads cargo at the given station.
Deliver or transfer, depending on the ranges defined by designation_counts.
dest | StationCargoList to add transferred cargo to. |
max_move | Maximum amount of cargo to move. |
payment | Payment object to register payments in. |
Definition at line 636 of file cargopacket.cpp.
References action_counts, min(), CargoList< VehicleCargoList, CargoPacketList >::MTA_DELIVER, CargoList< VehicleCargoList, CargoPacketList >::MTA_TRANSFER, and ShiftCargo().
|
inline |
Returns sum of cargo to be moved out of the vehicle at the current station.
Definition at line 393 of file cargopacket.h.
References action_counts, CargoList< VehicleCargoList, CargoPacketList >::MTA_DELIVER, and CargoList< VehicleCargoList, CargoPacketList >::MTA_TRANSFER.
|
friend |
The super class ought to know what it's doing.
Definition at line 321 of file cargopacket.h.
|
friend |
The vehicles have a cargo list (and we want that saved).
vt | the vehicle type. Can be VEH_END for the common vehicle description data |
Save and load of vehicles
Definition at line 572 of file vehicle_sl.cpp.
|
friend |
The station cargo list needs to control the unloading.
Definition at line 319 of file cargopacket.h.