changeset 8835:e8296a8dbe93 draft

(svn r12583) -Codechange: make AssignOrder a class function of order.
author rubidium <rubidium@openttd.org>
date Sat, 05 Apr 2008 21:45:05 +0000
parents a2a57c9df9c9
children 890a77315801
files src/oldloader.cpp src/order_base.h src/order_cmd.cpp
diffstat 3 files changed, 39 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/src/oldloader.cpp
+++ b/src/oldloader.cpp
@@ -504,7 +504,7 @@
 {
 	if (!LoadChunk(ls, NULL, order_chunk)) return false;
 
-	AssignOrder(new (num) Order(), UnpackOldOrder(_old_order));
+	(new (num) Order())->AssignOrder(UnpackOldOrder(_old_order));
 
 	/* Relink the orders to eachother (in TTD(Patch) the orders for one
 	vehicle are behind eachother, with an invalid order (OT_NOTHING) as indication that
@@ -1248,7 +1248,7 @@
 			 */
 			if (old_id < 5000) v->orders = GetOrder(old_id);
 		}
-		AssignOrder(&v->current_order, UnpackOldOrder(_old_order));
+		v->current_order.AssignOrder(UnpackOldOrder(_old_order));
 
 		/* For some reason we need to correct for this */
 		switch (v->spritenum) {
--- a/src/order_base.h
+++ b/src/order_base.h
@@ -53,6 +53,19 @@
 	void FreeChain();
 
 	bool ShouldStopAtStation(const Vehicle *v, StationID station) const;
+
+	/**
+	 * Assign the given order to this one.
+	 * @param other the data to copy (except next pointer).
+	 */
+	void AssignOrder(const Order &other);
+
+	/**
+	 * Does this order have the same type, flags and destination?
+	 * @param other the second order to compare to.
+	 * @return true if the type, flags and destination match.
+	 */
+	bool Equals(const Order &other) const;
 };
 
 static inline VehicleOrderID GetMaxOrderIndex()
@@ -80,6 +93,5 @@
 uint32 PackOrder(const Order *order);
 Order UnpackOrder(uint32 packed);
 Order UnpackOldOrder(uint16 packed);
-void AssignOrder(Order *order, Order data);
 
 #endif /* ORDER_H */
--- a/src/order_cmd.cpp
+++ b/src/order_cmd.cpp
@@ -54,6 +54,14 @@
 	delete this;
 }
 
+bool Order::Equals(const Order &other) const
+{
+	return
+			this->type  == other.type &&
+			this->flags == other.flags &&
+			this->dest  == other.dest;
+}
+
 static bool HasOrderPoolFree(uint amount)
 {
 	const Order *order;
@@ -157,9 +165,9 @@
 	Order temp_order;
 
 	temp_order = *order1;
-	AssignOrder(order1, *order2);
+	order1->AssignOrder(*order2);
 	order1->next = order2->next;
-	AssignOrder(order2, temp_order);
+	order2->AssignOrder(temp_order);
 	order2->next = temp_order.next;
 }
 
@@ -169,17 +177,17 @@
  *   This function makes sure that the index is maintained correctly
  *
  */
-void AssignOrder(Order *order, Order data)
+void Order::AssignOrder(const Order &other)
 {
-	order->type  = data.type;
-	order->flags = data.flags;
-	order->dest  = data.dest;
+	this->type  = other.type;
+	this->flags = other.flags;
+	this->dest  = other.dest;
 
-	order->refit_cargo   = data.refit_cargo;
-	order->refit_subtype = data.refit_subtype;
+	this->refit_cargo   = other.refit_cargo;
+	this->refit_subtype = other.refit_subtype;
 
-	order->wait_time   = data.wait_time;
-	order->travel_time = data.travel_time;
+	this->wait_time   = other.wait_time;
+	this->travel_time = other.travel_time;
 }
 
 
@@ -410,7 +418,7 @@
 	if (flags & DC_EXEC) {
 		Vehicle *u;
 		Order *new_o = new Order();
-		AssignOrder(new_o, new_order);
+		new_o->AssignOrder(new_order);
 
 		/* Create new order and link in list */
 		if (v->orders == NULL) {
@@ -905,7 +913,7 @@
 				order_dst = &dst->orders;
 				FOR_VEHICLE_ORDERS(src, order) {
 					*order_dst = new Order();
-					AssignOrder(*order_dst, *order);
+					(*order_dst)->AssignOrder(*order);
 					order_dst = &(*order_dst)->next;
 				}
 
@@ -1172,9 +1180,7 @@
 		if (v->num_orders > 1) {
 			const Order* last = GetLastVehicleOrder(v);
 
-			if (v->orders->type  == last->type &&
-					v->orders->flags == last->flags &&
-					v->orders->dest  == last->dest) {
+			if (v->orders->Equals(*last)) {
 				problem_type = 2;
 			}
 		}
@@ -1415,9 +1421,7 @@
 	}
 
 	/* If it is unchanged, keep it. */
-	if (order->type  == v->current_order.type &&
-			order->flags == v->current_order.flags &&
-			order->dest  == v->current_order.dest &&
+	if (order->Equals(v->current_order) &&
 			(v->type != VEH_SHIP || order->type != OT_GOTO_STATION || GetStation(order->dest)->dock_tile != 0)) {
 		return false;
 	}
@@ -1530,7 +1534,7 @@
 
 			for (i = 0; i < len; ++i) {
 				Order *order = new (i) Order();
-				AssignOrder(order, UnpackVersion4Order(orders[i]));
+				order->AssignOrder(UnpackVersion4Order(orders[i]));
 			}
 
 			free(orders);
@@ -1542,7 +1546,7 @@
 
 			for (i = 0; i < len; ++i) {
 				Order *order = new (i) Order();
-				AssignOrder(order, UnpackOrder(orders[i]));
+				order->AssignOrder(UnpackOrder(orders[i]));
 			}
 
 			free(orders);