changeset 13000:ddc019d8b839 draft

(svn r17494) -Codechange: improve algorithmic complexitiy of Depot::GetByTile from O(n) to O(1)
author rubidium <rubidium@openttd.org>
date Thu, 10 Sep 2009 14:36:38 +0000
parents 07a634b14de8
children c2298b1d3f83
files src/depot.cpp src/depot_base.h
diffstat 2 files changed, 5 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/src/depot.cpp
+++ b/src/depot.cpp
@@ -24,29 +24,6 @@
 INSTANTIATE_POOL_METHODS(Depot)
 
 /**
- * Gets a depot from a tile
- * @param tile tile with depot
- * @return Returns the depot if the tile had a depot, else it returns NULL
- */
-/* static */ Depot *Depot::GetByTile(TileIndex tile)
-{
-	/* A ship depot is multiple tiles. The north most tile is
-	 * always the ->xy tile, so make sure we always look for
-	 * the nothern tile and not the southern one. */
-	if (IsShipDepotTile(tile)) {
-		tile = min(tile, GetOtherShipDepotTile(tile));
-	}
-
-	Depot *depot;
-
-	FOR_ALL_DEPOTS(depot) {
-		if (depot->xy == tile) return depot;
-	}
-
-	return NULL;
-}
-
-/**
  * Clean up a depot
  */
 Depot::~Depot()
--- a/src/depot_base.h
+++ b/src/depot_base.h
@@ -13,7 +13,7 @@
 #define DEPOT_BASE_H
 
 #include "tile_type.h"
-#include "depot_type.h"
+#include "depot_map.h"
 #include "core/pool_type.hpp"
 #include "town_type.h"
 
@@ -27,7 +27,10 @@
 	Depot(TileIndex xy = INVALID_TILE) : xy(xy) {}
 	~Depot();
 
-	static Depot *GetByTile(TileIndex tile);
+	static FORCEINLINE Depot *GetByTile(TileIndex tile)
+	{
+		return Depot::Get(GetDepotIndex(tile));
+	}
 };
 
 #define FOR_ALL_DEPOTS_FROM(var, start) FOR_ALL_ITEMS_FROM(Depot, depot_index, var, start)