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");
|
DepotPool _depot_pool("Depot");
|
||||||
INSTANTIATE_POOL_METHODS(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
|
* Clean up a depot
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#define DEPOT_BASE_H
|
#define DEPOT_BASE_H
|
||||||
|
|
||||||
#include "tile_type.h"
|
#include "tile_type.h"
|
||||||
#include "depot_type.h"
|
#include "depot_map.h"
|
||||||
#include "core/pool_type.hpp"
|
#include "core/pool_type.hpp"
|
||||||
#include "town_type.h"
|
#include "town_type.h"
|
||||||
|
|
||||||
|
@ -27,7 +27,10 @@ struct Depot : DepotPool::PoolItem<&_depot_pool> {
|
||||||
Depot(TileIndex xy = INVALID_TILE) : xy(xy) {}
|
Depot(TileIndex xy = INVALID_TILE) : xy(xy) {}
|
||||||
~Depot();
|
~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)
|
#define FOR_ALL_DEPOTS_FROM(var, start) FOR_ALL_ITEMS_FROM(Depot, depot_index, var, start)
|
||||||
|
|
Loading…
Reference in New Issue