# CargoList< Tinst > Class Template Reference

Simple collection class for a list of cargo packets. More...

`#include <cargopacket.h>`

## Public Types
enum | MoveToAction { MTA_FINAL_DELIVERY, MTA_CARGO_LOAD, MTA_TRANSFER, MTA_UNLOAD }
| Kind of actions that could be done with packets on move. More...
typedef std::list< CargoPacket * > | List
| Container with cargo packets.
typedef List::iterator | Iterator
| The iterator for our container.
typedef List::const_iterator | ConstIterator
| The const iterator for our container.
## Public Member Functions
| CargoList ()
| Create the cargo list.
| ~CargoList ()
| And destroy it ("frees" all cargo packets).
FORCEINLINE const List * | Packets () const
| Returns a pointer to the cargo packet list (so you can iterate over it etc).
FORCEINLINE bool | Empty () const
| Checks whether this list is empty.
FORCEINLINE uint | Count () const
| Returns the number of cargo entities in this list.
FORCEINLINE StationID | Source () const
| Returns source of the first cargo packet in this list.
FORCEINLINE uint | DaysInTransit () const
| Returns average number of days in transit for a cargo entity.
void | Append (CargoPacket *cp)
| Appends the given cargo packet.
void | Truncate (uint max_remaining)
| Truncates the cargo in this list to the given amount.
template<class Tother_inst>
bool | MoveTo (Tother_inst *dest, uint count, MoveToAction mta, CargoPayment *payment, uint data=0)
| Moves the given amount of cargo to another list.
void | InvalidateCache ()
| Invalidates the cached data and rebuild it.
## Protected Member Functions
void | AddToCache (const CargoPacket *cp)
| Update the cache to reflect adding of this packet.
void | RemoveFromCache (const CargoPacket *cp)
| Update the cached values to reflect the removal of this packet.
## Protected Attributes
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.
List | packets
| The cargo packets in this list.

## Detailed Description

### template<class Tinst>
class CargoList< Tinst >

Simple collection class for a list of cargo packets.

Template Parameters:

  | Tinst | The actual instantation of this cargo list

Definition at line 191 of file cargopacket.h.

## Member Enumeration Documentation

template<class Tinst>

enum CargoList::MoveToAction

Kind of actions that could be done with packets on move.

Enumerator:

  MTA_FINAL_DELIVERY | "Deliver" the packet to the final destination, i.e. destroy the packet
  MTA_CARGO_LOAD | Load the packet onto a vehicle, i.e. set the last loaded station ID.
  MTA_TRANSFER | The cargo is moved as part of a transfer.
  MTA_UNLOAD | The cargo is moved as part of a forced unload.

Definition at line 201 of file cargopacket.h.

## Member Function Documentation

template<class Tinst>

void CargoList< Tinst >::AddToCache | ( | const CargoPacket * | cp | ) | `[inline, protected]`

Update the cache to reflect adding of this packet.

Increases count and days_in_transit

Parameters:

  | cp | a new packet to be inserted

Reimplemented in VehicleCargoList.

Definition at line 109 of file cargopacket.cpp.

References CargoList< Tinst >::cargo_days_in_transit, CargoPacket::count, CargoList< Tinst >::count, and CargoPacket::days_in_transit.

Referenced by CargoList< Tinst >::Append(), and CargoList< Tinst >::InvalidateCache().

template<class Tinst>

void CargoList< Tinst >::RemoveFromCache | ( | const CargoPacket * | cp | ) | `[inline, protected]`

Update the cached values to reflect the removal of this packet.

Decreases count and days_in_transit

Parameters:

  | cp | Packet to be removed from cache

Reimplemented in VehicleCargoList.

Definition at line 102 of file cargopacket.cpp.

References CargoList< Tinst >::cargo_days_in_transit, CargoPacket::count, CargoList< Tinst >::count, and CargoPacket::days_in_transit.

Referenced by CargoList< Tinst >::MoveTo(), and CargoList< Tinst >::Truncate().

template<class Tinst>

FORCEINLINE const List* CargoList< Tinst >::Packets | ( |  | ) | const`[inline]`

Returns a pointer to the cargo packet list (so you can iterate over it etc).

Returns:
  pointer to the packet list

Definition at line 238 of file cargopacket.h.

template<class Tinst>

FORCEINLINE bool CargoList< Tinst >::Empty | ( |  | ) | const`[inline]`

Checks whether this list is empty.

Returns:
  true if and only if the list is empty

Definition at line 247 of file cargopacket.h.

Referenced by CargoList< VehicleCargoList >::Source().

template<class Tinst>

FORCEINLINE uint CargoList< Tinst >::Count | ( |  | ) | const`[inline]`

Returns the number of cargo entities in this list.

Returns:
  the before mentioned number

Definition at line 256 of file cargopacket.h.

template<class Tinst>

FORCEINLINE StationID CargoList< Tinst >::Source | ( |  | ) | const`[inline]`

Returns source of the first cargo packet in this list.

Returns:
  the before mentioned source

Definition at line 265 of file cargopacket.h.

template<class Tinst>

FORCEINLINE uint CargoList< Tinst >::DaysInTransit | ( |  | ) | const`[inline]`

Returns average number of days in transit for a cargo entity.

Returns:
  the before mentioned number

Definition at line 274 of file cargopacket.h.

template<class Tinst>

void CargoList< Tinst >::Append | ( | CargoPacket * | cp | ) | `[inline]`

Appends the given cargo packet.

Warning:
  After appending this packet may not exist anymore!

Note:
  Do not use the cargo packet anymore after it has been appended to this CargoList!

Parameters:

  | cp | the cargo packet to add

Precondition:
  cp != NULL

Definition at line 116 of file cargopacket.cpp.

References CargoList< Tinst >::AddToCache(), CargoPacket::count, CargoPacket::feeder_share, CargoPacket::MAX_COUNT, and CargoList< Tinst >::packets.

template<class Tinst>

void CargoList< Tinst >::Truncate | ( | uint | max_remaining | ) | `[inline]`

Truncates the cargo in this list to the given amount.

It leaves the first count cargo entities and removes the rest.

Parameters:

  | max_remaining | the maximum amount of entities to be in the list after the command

Definition at line 138 of file cargopacket.cpp.

References CargoList< Tinst >::cargo_days_in_transit, CargoList< Tinst >::count, CargoPacket::count, CargoPacket::days_in_transit, CargoList< Tinst >::packets, and CargoList< Tinst >::RemoveFromCache().

template<class Tinst>
template<class Tother_inst>

bool CargoList< Tinst >::MoveTo | ( | Tother_inst * | dest,
|  | uint | count,
|  | MoveToAction | mta,
|  | CargoPayment * | payment,
|  | uint | data = `0` |
| ) |  |  | `[inline]`

Moves the given amount of cargo to another list.

Depending on the value of mta the side effects of this function differ:

- MTA_FINAL_DELIVERY: destroys the packets that do not originate from a specific station
- MTA_CARGO_LOAD: sets the loaded_at_xy value of the moved packets
- MTA_TRANSFER: just move without side effects
- MTA_UNLOAD: just move without side effects
  Parameters:

    | dest | the destination to move the cargo to
    | count | the amount of cargo entities to move
    | mta | how to handle the moving (side effects)
    | data | Depending on mta the data of this variable differs: MTA_FINAL_DELIVERY - station ID of packet's origin not to remove MTA_CARGO_LOAD - station's tile index of load MTA_TRANSFER - unused MTA_UNLOAD - unused
    | payment | The payment helper

  Precondition:
    mta == MTA_FINAL_DELIVERY || dest != NULL

    mta == MTA_UNLOAD || mta == MTA_CARGO_LOAD || payment != NULL

  Returns:
    true if there are still packets that might be moved from this cargo list

Definition at line 166 of file cargopacket.cpp.

References CargoPacket::count, CargoPacket::days_in_transit, CargoPacket::feeder_share, CargoPacket::loaded_at_xy, CargoList< Tinst >::MTA_CARGO_LOAD, CargoList< Tinst >::MTA_FINAL_DELIVERY, CargoList< Tinst >::MTA_TRANSFER, CargoList< Tinst >::MTA_UNLOAD, CargoList< Tinst >::packets, CargoPayment::PayFinalDelivery(), CargoPayment::PayTransfer(), CargoList< Tinst >::RemoveFromCache(), CargoPacket::source, CargoPacket::source_id, CargoPacket::source_type, and CargoPacket::source_xy.

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

- src/cargopacket.h
- src/cargopacket.cpp