mirror of https://github.com/OpenTTD/OpenTTD
(svn r17494) -Codechange: improve algorithmic complexitiy of Depot::GetByTile from O(n) to O(1)
parent
55ddce8da2
commit
751ea62f44
|
@ -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…
Reference in New Issue