diff options
author | rubidium <rubidium@openttd.org> | 2009-10-06 17:23:15 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-10-06 17:23:15 +0000 |
commit | 5f59d0c5b4e85a3bb51936fa05b2c5493f571eca (patch) | |
tree | ca2af53f7c2c4af662725813b62d480a3748954d /src/cargopacket.h | |
parent | a4835e3f0b8c0d4f330fc8e91bdd529af60cc7a3 (diff) | |
download | openttd-5f59d0c5b4e85a3bb51936fa05b2c5493f571eca.tar.xz |
(svn r17720) -Codechange: guard the CargoPacket variables that are cached in CargoLists so they cannot be written from outside the CargoList class (based on patch by fonsinchen)
Diffstat (limited to 'src/cargopacket.h')
-rw-r--r-- | src/cargopacket.h | 68 |
1 files changed, 61 insertions, 7 deletions
diff --git a/src/cargopacket.h b/src/cargopacket.h index 508263332..4d66b0943 100644 --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -26,34 +26,88 @@ struct CargoPacket; typedef Pool<CargoPacket, CargoPacketID, 1024, 1048576> CargoPacketPool; extern CargoPacketPool _cargopacket_pool; +class CargoList; +extern const struct SaveLoad *GetCargoPacketDesc(); + /** * Container for cargo from the same location and time */ struct CargoPacket : CargoPacketPool::PoolItem<&_cargopacket_pool> { +private: + /* Variables used by the CargoList cache. Only let them be modified via + * the proper accessor functions and/or CargoList itself. */ Money feeder_share; ///< Value of feeder pickup to be paid for on delivery of cargo - 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 - StationID source; ///< The station where the cargo came from first - uint16 count; ///< The amount of cargo in this packet byte days_in_transit; ///< Amount of days this packet has been in transit + /** The CargoList caches, thus needs to know about it. */ + friend class CargoList; + /** We want this to be saved, right? */ + friend const struct SaveLoad *GetCargoPacketDesc(); +public: + + 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 + StationID source; ///< The station where the cargo came from first SourceTypeByte source_type; ///< Type of #source_id SourceID source_id; ///< Index of source, INVALID_SOURCE if unknown/invalid /** * Creates a new cargo packet - * @param source the source of the packet - * @param count the number of cargo entities to put in this packet + * @param source the source of the packet + * @param count the number of cargo entities to put in this packet * @param source_type the 'type' of source the packet comes from (for subsidies) - * @param source_id the actual source of the packet (for subsidies) + * @param source_id the actual source of the packet (for subsidies) * @pre count != 0 || source == INVALID_STATION */ CargoPacket(StationID source = INVALID_STATION, uint16 count = 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. + * @param count the number of cargo entities to put in this packet + * @param days_in_transit number of days the cargo has been in transit + * @param feeder_share feeder share the packet has already accumulated + * @param source_type the 'type' of source the packet comes from (for subsidies) + * @param source_id the actual source of the packet (for subsidies) + */ + CargoPacket(uint16 count, byte days_in_transit, Money feeder_share = 0, SourceType source_type = ST_INDUSTRY, SourceID source_id = INVALID_SOURCE); + /** Destroy the packet */ ~CargoPacket() { } + + /** + * Gets the number of 'items' in this packet. + * @return the item count + */ + FORCEINLINE uint16 Count() const + { + return this->count; + } + + /** + * Gets the amount of money already paid to earlier vehicles in + * the feeder chain. + * @return the feeder share + */ + FORCEINLINE Money FeederShare() const + { + return this->feeder_share; + } + + /** + * 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. + * @return the length this cargo has been in transit + */ + FORCEINLINE byte DaysInTransit() const + { + return this->days_in_transit; + } + + /** * Checks whether the cargo packet is from (exactly) the same source * in time and location. |