1
0
Fork 0

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

release/1.0
rubidium 2009-09-10 14:36:38 +00:00
parent 55ddce8da2
commit 751ea62f44
2 changed files with 5 additions and 25 deletions

View File

@ -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
*/

View File

@ -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)