Mercurial > hg > openttd
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);