(svn r17494) -Codechange: improve algorithmic complexitiy of Depot::GetByTile from O(n) to O(1)

pull/155/head
rubidium 15 years ago
parent 10c3af4642
commit f93e63fa22

@ -23,29 +23,6 @@
DepotPool _depot_pool("Depot");
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
*/

@ -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 @@ struct Depot : DepotPool::PoolItem<&_depot_pool> {
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)

Loading…
Cancel
Save