mirror of https://github.com/OpenTTD/OpenTTD
(svn r14463) -Fix [FS#2348]: small possible chance of desync due to sorting on pointer instead of by (station) index (PhilSophus)
parent
e9f5a19544
commit
03bef3fb5b
|
@ -155,6 +155,23 @@ static void PoolCleanBlock(uint start_item, uint end_item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template providing a predicate to allow STL containers of
|
||||||
|
* pointers to pool items to be sorted by index.
|
||||||
|
*/
|
||||||
|
template <typename T>
|
||||||
|
struct PoolItemIndexLess {
|
||||||
|
/**
|
||||||
|
* The actual comparator.
|
||||||
|
* @param lhs the left hand side of the comparison.
|
||||||
|
* @param rhs the right hand side of the comparison.
|
||||||
|
* @return true if lhs' index is less than rhs' index.
|
||||||
|
*/
|
||||||
|
bool operator()(const T *lhs, const T *rhs) const
|
||||||
|
{
|
||||||
|
return lhs->index < rhs->index;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generalization for all pool items that are saved in the savegame.
|
* Generalization for all pool items that are saved in the savegame.
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include "station_type.h"
|
#include "station_type.h"
|
||||||
#include "sprite.h"
|
#include "sprite.h"
|
||||||
|
#include "oldpool.h"
|
||||||
#include "rail_type.h"
|
#include "rail_type.h"
|
||||||
#include "road_type.h"
|
#include "road_type.h"
|
||||||
#include "tile_type.h"
|
#include "tile_type.h"
|
||||||
|
@ -17,7 +18,7 @@
|
||||||
void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint radius);
|
void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint radius);
|
||||||
|
|
||||||
/** A set of stations (\c const \c Station* ) */
|
/** A set of stations (\c const \c Station* ) */
|
||||||
typedef std::set<Station*> StationSet;
|
typedef std::set<Station*, PoolItemIndexLess<Station> > StationSet;
|
||||||
|
|
||||||
StationSet FindStationsAroundIndustryTile(TileIndex tile, int w, int h);
|
StationSet FindStationsAroundIndustryTile(TileIndex tile, int w, int h);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue