changeset 13292:83cbdcfbcf11 draft

(svn r17801) -Codechange: for StationCargoLists the 'loaded_at_xy' does not matter when merging CargoPackets
author rubidium <rubidium@openttd.org>
date Sun, 18 Oct 2009 14:30:37 +0000
parents 07fc7c78b30b
children cc367d877409
files src/cargopacket.cpp src/cargopacket.h
diffstat 2 files changed, 32 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/cargopacket.cpp
+++ b/src/cargopacket.cpp
@@ -111,7 +111,7 @@
 
 	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;
 
--- a/src/cargopacket.h
+++ b/src/cargopacket.h
@@ -115,20 +115,6 @@
 	}
 
 
-	/**
-	 * 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 @@
 	 * 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 @@
 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 */