(svn r13307) -Codechange: Separate VehicleList and its two functions so only the 3 users include it, reducing dependencies on misc/smallvec.h
authorpeter1138
Wed, 28 May 2008 11:56:21 +0000
changeset 9396 3f70b1b8642c
parent 9395 003c5b8d2931
child 9397 3939a8d41911
(svn r13307) -Codechange: Separate VehicleList and its two functions so only the 3 users include it, reducing dependencies on misc/smallvec.h
source.list
src/depot_gui.cpp
src/vehicle.cpp
src/vehicle_func.h
src/vehicle_gui.cpp
src/vehicle_type.h
src/vehiclelist.cpp
src/vehiclelist.h
--- a/source.list	Wed May 28 10:29:48 2008 +0000
+++ b/source.list	Wed May 28 11:56:21 2008 +0000
@@ -112,6 +112,7 @@
 	#end
 #end
 vehicle.cpp
+vehiclelist.cpp
 viewport.cpp
 waypoint.cpp
 widget.cpp
@@ -324,6 +325,7 @@
 vehicle_func.h
 vehicle_gui.h
 vehicle_type.h
+vehiclelist.h
 viewport_func.h
 viewport_type.h
 waypoint.h
--- a/src/depot_gui.cpp	Wed May 28 10:29:48 2008 +0000
+++ b/src/depot_gui.cpp	Wed May 28 11:56:21 2008 +0000
@@ -26,6 +26,7 @@
 #include "depot_base.h"
 #include "tilehighlight_func.h"
 #include "window_gui.h"
+#include "vehiclelist.h"
 
 #include "table/strings.h"
 #include "table/sprites.h"
--- a/src/vehicle.cpp	Wed May 28 10:29:48 2008 +0000
+++ b/src/vehicle.cpp	Wed May 28 11:56:21 2008 +0000
@@ -51,6 +51,7 @@
 #include "animated_tile_func.h"
 #include "effectvehicle_base.h"
 #include "core/alloc_func.hpp"
+#include "vehiclelist.h"
 
 #include "table/sprites.h"
 #include "table/strings.h"
@@ -1292,137 +1293,6 @@
 }
 
 /**
- * Generate a list of vehicles inside a depot.
- * @param type    Type of vehicle
- * @param tile    The tile the depot is located on
- * @param engines Pointer to list to add vehicles to
- * @param wagons  Pointer to list to add wagons to (can be NULL)
- */
-void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engines, VehicleList *wagons)
-{
-	engines->Clear();
-	if (wagons != NULL && wagons != engines) wagons->Clear();
-
-	const Vehicle *v;
-	FOR_ALL_VEHICLES(v) {
-		/* General tests for all vehicle types */
-		if (v->type != type) continue;
-		if (v->tile != tile) continue;
-
-		switch (type) {
-			case VEH_TRAIN:
-				if (v->u.rail.track != TRACK_BIT_DEPOT) continue;
-				if (wagons != NULL && IsFreeWagon(v)) {
-					*wagons->Append() = v;
-					continue;
-				}
-				break;
-
-			default:
-				if (!v->IsInDepot()) continue;
-				break;
-		}
-
-		if (!v->IsPrimaryVehicle()) continue;
-
-		*engines->Append() = v;
-	}
-
-	/* Ensure the lists are not wasting too much space. If the lists are fresh
-	 * (i.e. built within a command) then this will actually do nothing. */
-	engines->Compact();
-	if (wagons != NULL && wagons != engines) wagons->Compact();
-}
-
-/**
- * Generate a list of vehicles based on window type.
- * @param list        Pointer to list to add vehicles to
- * @param type        Type of vehicle
- * @param owner       Player to generate list for
- * @param index       This parameter has different meanings depending on window_type
- *    <ul>
- *      <li>VLW_STATION_LIST:  index of station to generate a list for</li>
- *      <li>VLW_SHARED_ORDERS: index of order to generate a list for<li>
- *      <li>VLW_STANDARD: not used<li>
- *      <li>VLW_DEPOT_LIST: TileIndex of the depot/hangar to make the list for</li>
- *      <li>VLW_GROUP_LIST: index of group to generate a list for</li>
- *    </ul>
- * @param window_type The type of window the list is for, using the VLW_ flags in vehicle_gui.h
- */
-void GenerateVehicleSortList(VehicleList *list, VehicleType type, PlayerID owner, uint32 index, uint16 window_type)
-{
-	list->Clear();
-
-	const Vehicle *v;
-
-	switch (window_type) {
-		case VLW_STATION_LIST:
-			FOR_ALL_VEHICLES(v) {
-				if (v->type == type && v->IsPrimaryVehicle()) {
-					const Order *order;
-
-					FOR_VEHICLE_ORDERS(v, order) {
-						if (order->IsType(OT_GOTO_STATION) && order->GetDestination() == index) {
-							*list->Append() = v;
-							break;
-						}
-					}
-				}
-			}
-			break;
-
-		case VLW_SHARED_ORDERS:
-			FOR_ALL_VEHICLES(v) {
-				/* Find a vehicle with the order in question */
-				if (v->orders != NULL && v->orders->index == index) {
-					/* Add all vehicles from this vehicle's shared order list */
-					for (v = GetFirstVehicleFromSharedList(v); v != NULL; v = v->next_shared) {
-						*list->Append() = v;
-					}
-					break;
-				}
-			}
-			break;
-
-		case VLW_STANDARD:
-			FOR_ALL_VEHICLES(v) {
-				if (v->type == type && v->owner == owner && v->IsPrimaryVehicle()) {
-					*list->Append() = v;
-				}
-			}
-			break;
-
-		case VLW_DEPOT_LIST:
-			FOR_ALL_VEHICLES(v) {
-				if (v->type == type && v->IsPrimaryVehicle()) {
-					const Order *order;
-
-					FOR_VEHICLE_ORDERS(v, order) {
-						if (order->IsType(OT_GOTO_DEPOT) && order->GetDestination() == index) {
-							*list->Append() = v;
-							break;
-						}
-					}
-				}
-			}
-			break;
-
-		case VLW_GROUP_LIST:
-			FOR_ALL_VEHICLES(v) {
-				if (v->type == type && v->IsPrimaryVehicle() &&
-						v->owner == owner && v->group_id == index) {
-					*list->Append() = v;
-				}
-			}
-			break;
-
-		default: NOT_REACHED(); break;
-	}
-
-	list->Compact();
-}
-
-/**
  * Send all vehicles of type to depots
  * @param type type of vehicle
  * @param flags the flags used for DoCommand()
--- a/src/vehicle_func.h	Wed May 28 10:29:48 2008 +0000
+++ b/src/vehicle_func.h	Wed May 28 11:56:21 2008 +0000
@@ -68,8 +68,6 @@
 void TrainPowerChanged(Vehicle *v);
 Money GetTrainRunningCost(const Vehicle *v);
 
-void GenerateVehicleSortList(VehicleList *list, VehicleType type, PlayerID owner, uint32 index, uint16 window_type);
-void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine_list, VehicleList *wagon_list);
 CommandCost SendAllVehiclesToDepot(VehicleType type, uint32 flags, bool service, PlayerID owner, uint16 vlw_flag, uint32 id);
 void VehicleEnterDepot(Vehicle *v);
 
--- a/src/vehicle_gui.cpp	Wed May 28 10:29:48 2008 +0000
+++ b/src/vehicle_gui.cpp	Wed May 28 11:56:21 2008 +0000
@@ -36,6 +36,7 @@
 #include "widgets/dropdown_func.h"
 #include "order_func.h"
 #include "timetable.h"
+#include "vehiclelist.h"
 
 #include "table/sprites.h"
 #include "table/strings.h"
--- a/src/vehicle_type.h	Wed May 28 10:29:48 2008 +0000
+++ b/src/vehicle_type.h	Wed May 28 11:56:21 2008 +0000
@@ -6,7 +6,6 @@
 #define VEHICLE_TYPE_H
 
 #include "core/enum_type.hpp"
-#include "misc/smallvec.h"
 
 typedef uint16 VehicleID;
 
@@ -57,6 +56,4 @@
 	DEPOT_COMMAND_MASK  = 0xF,
 };
 
-typedef SmallVector<const Vehicle*, 32> VehicleList;
-
 #endif /* VEHICLE_TYPE_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/vehiclelist.cpp	Wed May 28 11:56:21 2008 +0000
@@ -0,0 +1,144 @@
+/* $Id$ */
+
+/** @file vehicle.cpp Base implementations of all vehicles. */
+
+#include "stdafx.h"
+#include "openttd.h"
+#include "vehicle_type.h"
+#include "vehicle_func.h"
+#include "vehicle_base.h"
+#include "vehicle_gui.h"
+#include "core/alloc_func.hpp"
+#include "train.h"
+#include "vehiclelist.h"
+
+/**
+ * Generate a list of vehicles inside a depot.
+ * @param type    Type of vehicle
+ * @param tile    The tile the depot is located on
+ * @param engines Pointer to list to add vehicles to
+ * @param wagons  Pointer to list to add wagons to (can be NULL)
+ */
+void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engines, VehicleList *wagons)
+{
+	engines->Clear();
+	if (wagons != NULL && wagons != engines) wagons->Clear();
+
+	const Vehicle *v;
+	FOR_ALL_VEHICLES(v) {
+		/* General tests for all vehicle types */
+		if (v->type != type) continue;
+		if (v->tile != tile) continue;
+
+		switch (type) {
+			case VEH_TRAIN:
+				if (v->u.rail.track != TRACK_BIT_DEPOT) continue;
+				if (wagons != NULL && IsFreeWagon(v)) {
+					*wagons->Append() = v;
+					continue;
+				}
+				break;
+
+			default:
+				if (!v->IsInDepot()) continue;
+				break;
+		}
+
+		if (!v->IsPrimaryVehicle()) continue;
+
+		*engines->Append() = v;
+	}
+
+	/* Ensure the lists are not wasting too much space. If the lists are fresh
+	 * (i.e. built within a command) then this will actually do nothing. */
+	engines->Compact();
+	if (wagons != NULL && wagons != engines) wagons->Compact();
+}
+
+/**
+ * Generate a list of vehicles based on window type.
+ * @param list        Pointer to list to add vehicles to
+ * @param type        Type of vehicle
+ * @param owner       Player to generate list for
+ * @param index       This parameter has different meanings depending on window_type
+ *    <ul>
+ *      <li>VLW_STATION_LIST:  index of station to generate a list for</li>
+ *      <li>VLW_SHARED_ORDERS: index of order to generate a list for<li>
+ *      <li>VLW_STANDARD: not used<li>
+ *      <li>VLW_DEPOT_LIST: TileIndex of the depot/hangar to make the list for</li>
+ *      <li>VLW_GROUP_LIST: index of group to generate a list for</li>
+ *    </ul>
+ * @param window_type The type of window the list is for, using the VLW_ flags in vehicle_gui.h
+ */
+void GenerateVehicleSortList(VehicleList *list, VehicleType type, PlayerID owner, uint32 index, uint16 window_type)
+{
+	list->Clear();
+
+	const Vehicle *v;
+
+	switch (window_type) {
+		case VLW_STATION_LIST:
+			FOR_ALL_VEHICLES(v) {
+				if (v->type == type && v->IsPrimaryVehicle()) {
+					const Order *order;
+
+					FOR_VEHICLE_ORDERS(v, order) {
+						if (order->IsType(OT_GOTO_STATION) && order->GetDestination() == index) {
+							*list->Append() = v;
+							break;
+						}
+					}
+				}
+			}
+			break;
+
+		case VLW_SHARED_ORDERS:
+			FOR_ALL_VEHICLES(v) {
+				/* Find a vehicle with the order in question */
+				if (v->orders != NULL && v->orders->index == index) {
+					/* Add all vehicles from this vehicle's shared order list */
+					for (v = GetFirstVehicleFromSharedList(v); v != NULL; v = v->next_shared) {
+						*list->Append() = v;
+					}
+					break;
+				}
+			}
+			break;
+
+		case VLW_STANDARD:
+			FOR_ALL_VEHICLES(v) {
+				if (v->type == type && v->owner == owner && v->IsPrimaryVehicle()) {
+					*list->Append() = v;
+				}
+			}
+			break;
+
+		case VLW_DEPOT_LIST:
+			FOR_ALL_VEHICLES(v) {
+				if (v->type == type && v->IsPrimaryVehicle()) {
+					const Order *order;
+
+					FOR_VEHICLE_ORDERS(v, order) {
+						if (order->IsType(OT_GOTO_DEPOT) && order->GetDestination() == index) {
+							*list->Append() = v;
+							break;
+						}
+					}
+				}
+			}
+			break;
+
+		case VLW_GROUP_LIST:
+			FOR_ALL_VEHICLES(v) {
+				if (v->type == type && v->IsPrimaryVehicle() &&
+						v->owner == owner && v->group_id == index) {
+					*list->Append() = v;
+				}
+			}
+			break;
+
+		default: NOT_REACHED(); break;
+	}
+
+	list->Compact();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/vehiclelist.h	Wed May 28 11:56:21 2008 +0000
@@ -0,0 +1,15 @@
+/* $Id$ */
+
+/** @file vehiclelist.h Functions and type for generating vehicle lists. */
+
+#ifndef VEHICLELIST_H
+#define VEHICLELIST_H
+
+#include "misc/smallvec.h"
+
+typedef SmallVector<const Vehicle *, 32> VehicleList;
+
+void GenerateVehicleSortList(VehicleList *list, VehicleType type, PlayerID owner, uint32 index, uint16 window_type);
+void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine_list, VehicleList *wagon_list);
+
+#endif /* VEHICLELIST_H */