(svn r15067) -Fix [FS#2531]: Possible compiler bug, alleviated by using SmallVector instead of using std::set. SmallVector does everything needed anyway.

This commit is contained in:
peter1138 2009-01-13 18:18:53 +00:00
parent f293bff01b
commit afb94c252d
4 changed files with 13 additions and 15 deletions

View File

@ -123,7 +123,7 @@
if (!IsValidIndustry(industry_id)) return -1; if (!IsValidIndustry(industry_id)) return -1;
Industry *ind = ::GetIndustry(industry_id); Industry *ind = ::GetIndustry(industry_id);
return (int32)::FindStationsAroundTiles(ind->xy, ind->width, ind->height).size(); return (int32)::FindStationsAroundTiles(ind->xy, ind->width, ind->height).Length();
} }
/* static */ int32 AIIndustry::GetDistanceManhattanToTile(IndustryID industry_id, TileIndex tile) /* static */ int32 AIIndustry::GetDistanceManhattanToTile(IndustryID industry_id, TileIndex tile)

View File

@ -1992,9 +1992,9 @@ static void CanCargoServiceIndustry(CargoID cargo, Industry *ind, bool *c_accept
int WhoCanServiceIndustry(Industry *ind) int WhoCanServiceIndustry(Industry *ind)
{ {
/* Find all stations within reach of the industry */ /* Find all stations within reach of the industry */
StationSet stations = FindStationsAroundTiles(ind->xy, ind->width, ind->height); StationList stations = FindStationsAroundTiles(ind->xy, ind->width, ind->height);
if (stations.size() == 0) return 0; // No stations found at all => nobody services if (stations.Length() == 0) return 0; // No stations found at all => nobody services
const Vehicle *v; const Vehicle *v;
int result = 0; int result = 0;
@ -2030,7 +2030,7 @@ int WhoCanServiceIndustry(Industry *ind)
/* Same cargo produced by industry is dropped here => not serviced by vehicle v */ /* Same cargo produced by industry is dropped here => not serviced by vehicle v */
if ((o->GetUnloadType() & OUFB_UNLOAD) && !c_accepts) break; if ((o->GetUnloadType() & OUFB_UNLOAD) && !c_accepts) break;
if (stations.find(st) != stations.end()) { if (stations.Contains(st)) {
if (v->owner == _local_company) return 2; // Company services industry if (v->owner == _local_company) return 2; // Company services industry
result = 1; // Competitor services industry result = 1; // Competitor services industry
} }

View File

@ -2940,9 +2940,9 @@ CommandCost CmdRenameStation(TileIndex tile, uint32 flags, uint32 p1, uint32 p2,
* *
* @return: Set of found stations * @return: Set of found stations
*/ */
StationSet FindStationsAroundTiles(TileIndex tile, int w_prod, int h_prod) StationList FindStationsAroundTiles(TileIndex tile, int w_prod, int h_prod)
{ {
StationSet station_set; StationList stations;
/* area to search = producer plus station catchment radius */ /* area to search = producer plus station catchment radius */
int max_rad = (_settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED); int max_rad = (_settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED);
@ -2989,11 +2989,11 @@ StationSet FindStationsAroundTiles(TileIndex tile, int w_prod, int h_prod)
/* Insert the station in the set. This will fail if it has /* Insert the station in the set. This will fail if it has
* already been added. * already been added.
*/ */
station_set.insert(st); stations.Include(st);
END_TILE_LOOP(cur_tile, w, h, tile - TileDiffXY(max_rad, max_rad)) END_TILE_LOOP(cur_tile, w, h, tile - TileDiffXY(max_rad, max_rad))
return station_set; return stations;
} }
uint MoveGoodsToStation(TileIndex tile, int w, int h, CargoID type, uint amount) uint MoveGoodsToStation(TileIndex tile, int w, int h, CargoID type, uint amount)
@ -3003,8 +3003,8 @@ uint MoveGoodsToStation(TileIndex tile, int w, int h, CargoID type, uint amount)
uint best_rating1 = 0; // rating of st1 uint best_rating1 = 0; // rating of st1
uint best_rating2 = 0; // rating of st2 uint best_rating2 = 0; // rating of st2
StationSet all_stations = FindStationsAroundTiles(tile, w, h); StationList all_stations = FindStationsAroundTiles(tile, w, h);
for (StationSet::iterator st_iter = all_stations.begin(); st_iter != all_stations.end(); ++st_iter) { for (Station **st_iter = all_stations.Begin(); st_iter != all_stations.End(); ++st_iter) {
Station *st = *st_iter; Station *st = *st_iter;
/* Is the station reserved exclusively for somebody else? */ /* Is the station reserved exclusively for somebody else? */

View File

@ -13,14 +13,12 @@
#include "tile_type.h" #include "tile_type.h"
#include "cargo_type.h" #include "cargo_type.h"
#include "vehicle_type.h" #include "vehicle_type.h"
#include <set> #include "core/smallvec_type.hpp"
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* ) */ typedef SmallVector<Station*, 1> StationList;
typedef std::set<Station*, PoolItemIndexLess<Station> > StationSet; StationList FindStationsAroundTiles(TileIndex tile, int w_prod, int h_prod);
StationSet FindStationsAroundTiles(TileIndex tile, int w_prod, int h_prod);
void ShowStationViewWindow(StationID station); void ShowStationViewWindow(StationID station);
void UpdateAllStationVirtCoord(); void UpdateAllStationVirtCoord();