(svn r17801) -Codechange: for StationCargoLists the 'loaded_at_xy' does not matter when merging CargoPackets

This commit is contained in:
rubidium 2009-10-18 14:30:37 +00:00
parent e553983e39
commit be57392ba3
2 changed files with 32 additions and 15 deletions

View File

@ -111,7 +111,7 @@ void CargoList<Tinst>::Append(CargoPacket *cp)
for (List::iterator it = this->packets.begin(); it != this->packets.end(); it++) {
CargoPacket *icp = *it;
if (icp->SameSource(cp) && icp->count + cp->count <= CargoPacket::MAX_COUNT) {
if (Tinst::AreMergable(icp, cp) && icp->count + cp->count <= CargoPacket::MAX_COUNT) {
icp->count += cp->count;
icp->feeder_share += cp->feeder_share;

View File

@ -115,20 +115,6 @@ public:
}
/**
* Checks whether the cargo packet is from (exactly) the same source
* in time and location.
* @param cp the cargo packet to compare to
* @return true if and only if days_in_transit and source_xy are equal
*/
FORCEINLINE bool SameSource(const CargoPacket *cp) const
{
return this->source_xy == cp->source_xy &&
this->days_in_transit == cp->days_in_transit &&
this->source_type == cp->source_type &&
this->source_id == cp->source_id;
}
static void InvalidateAllFrom(SourceType src_type, SourceID src);
};
@ -301,6 +287,22 @@ public:
* Ages the all cargo in this list
*/
void AgeCargo();
/**
* Are two the two CargoPackets mergeable in the context of
* a list of CargoPackets for a Vehicle?
* @param cp1 the first CargoPacket
* @param cp2 the second CargoPacket
* @return true if they are mergeable
*/
static bool AreMergable(const CargoPacket *cp1, const CargoPacket *cp2)
{
return cp1->source_xy == cp2->source_xy &&
cp1->days_in_transit == cp2->days_in_transit &&
cp1->source_type == cp2->source_type &&
cp1->source_id == cp2->source_id &&
cp1->loaded_at_xy == cp2->loaded_at_xy;
}
};
/**
@ -310,6 +312,21 @@ class StationCargoList : public CargoList<StationCargoList> {
public:
/** The stations, via GoodsEntry, have a CargoList. */
friend const struct SaveLoad *GetGoodsDesc();
/**
* Are two the two CargoPackets mergeable in the context of
* a list of CargoPackets for a Vehicle?
* @param cp1 the first CargoPacket
* @param cp2 the second CargoPacket
* @return true if they are mergeable
*/
static bool AreMergable(const CargoPacket *cp1, const CargoPacket *cp2)
{
return cp1->source_xy == cp2->source_xy &&
cp1->days_in_transit == cp2->days_in_transit &&
cp1->source_type == cp2->source_type &&
cp1->source_id == cp2->source_id;
}
};
#endif /* CARGOPACKET_H */