1
0
Fork 0

(svn r6141) -Codechange: introduced DepotID and used it as much as possible

-Codechange: DeleteDepot removes a depot from the pool
-Codechange: DestroyDepot is called by DeleteDepot to remove all things where a depot depends on.
  Last 2 changes to prepare for new pool system. Not pretty now, will be soon.
-Codechange: Removed DoDeleteDepot as it was stupid
release/0.5
truelight 2006-08-26 14:44:55 +00:00
parent 7a58659fef
commit f73a2829f3
6 changed files with 23 additions and 23 deletions

18
depot.c
View File

@ -59,7 +59,7 @@ Depot *AllocateDepot(void)
* TODO - This is just a temporary stage, this will be removed. */ * TODO - This is just a temporary stage, this will be removed. */
for (d = GetDepot(0); d != NULL; d = (d->index + 1 < GetDepotPoolSize()) ? GetDepot(d->index + 1) : NULL) { for (d = GetDepot(0); d != NULL; d = (d->index + 1 < GetDepotPoolSize()) ? GetDepot(d->index + 1) : NULL) {
if (!IsValidDepot(d)) { if (!IsValidDepot(d)) {
uint index = d->index; DepotID index = d->index;
memset(d, 0, sizeof(Depot)); memset(d, 0, sizeof(Depot));
d->index = index; d->index = index;
@ -75,26 +75,18 @@ Depot *AllocateDepot(void)
} }
/** /**
* Delete a depot * Clean up a depot
*/ */
void DoDeleteDepot(TileIndex tile) void DestroyDepot(Depot *depot)
{ {
Depot *depot;
/* Get the depot */
depot = GetDepotByTile(tile);
/* Clear the tile */ /* Clear the tile */
DoClearSquare(tile); DoClearSquare(depot->xy);
/* Clear the depot */
depot->xy = 0;
/* Clear the depot from all order-lists */ /* Clear the depot from all order-lists */
RemoveOrderFromAllVehicles(OT_GOTO_DEPOT, depot->index); RemoveOrderFromAllVehicles(OT_GOTO_DEPOT, depot->index);
/* Delete the depot-window */ /* Delete the depot-window */
DeleteWindowById(WC_VEHICLE_DEPOT, tile); DeleteWindowById(WC_VEHICLE_DEPOT, depot->xy);
} }
void InitializeDepots(void) void InitializeDepots(void)

21
depot.h
View File

@ -14,7 +14,7 @@
struct Depot { struct Depot {
TileIndex xy; TileIndex xy;
TownID town_index; TownID town_index;
StationID index; DepotID index;
}; };
extern MemoryPool _depot_pool; extern MemoryPool _depot_pool;
@ -22,7 +22,7 @@ extern MemoryPool _depot_pool;
/** /**
* Get the pointer to the depot with index 'index' * Get the pointer to the depot with index 'index'
*/ */
static inline Depot *GetDepot(uint index) static inline Depot *GetDepot(DepotID index)
{ {
return (Depot*)GetItemFromPool(&_depot_pool, index); return (Depot*)GetItemFromPool(&_depot_pool, index);
} }
@ -38,9 +38,9 @@ static inline uint16 GetDepotPoolSize(void)
/** /**
* Check if a depot really exists. * Check if a depot really exists.
*/ */
static inline bool IsValidDepot(const Depot* depot) static inline bool IsValidDepot(const Depot *depot)
{ {
return depot->xy != 0; return depot != NULL && depot->xy != 0;
} }
static inline bool IsValidDepotID(uint index) static inline bool IsValidDepotID(uint index)
@ -48,6 +48,14 @@ static inline bool IsValidDepotID(uint index)
return index < GetDepotPoolSize() && IsValidDepot(GetDepot(index)); return index < GetDepotPoolSize() && IsValidDepot(GetDepot(index));
} }
void DestroyDepot(Depot *depot);
static inline void DeleteDepot(Depot *depot)
{
DestroyDepot(depot);
depot->xy = 0;
}
#define FOR_ALL_DEPOTS_FROM(d, start) for (d = GetDepot(start); d != NULL; d = (d->index + 1 < GetDepotPoolSize()) ? GetDepot(d->index + 1) : NULL) if (IsValidDepot(d)) #define FOR_ALL_DEPOTS_FROM(d, start) for (d = GetDepot(start); d != NULL; d = (d->index + 1 < GetDepotPoolSize()) ? GetDepot(d->index + 1) : NULL) if (IsValidDepot(d))
#define FOR_ALL_DEPOTS(d) FOR_ALL_DEPOTS_FROM(d, 0) #define FOR_ALL_DEPOTS(d) FOR_ALL_DEPOTS_FROM(d, 0)
@ -56,7 +64,8 @@ static inline bool IsValidDepotID(uint index)
#define MIN_SERVINT_DAYS 30 #define MIN_SERVINT_DAYS 30
#define MAX_SERVINT_DAYS 800 #define MAX_SERVINT_DAYS 800
/** Get the service interval domain. /**
* Get the service interval domain.
* Get the new proposed service interval for the vehicle is indeed, clamped * Get the new proposed service interval for the vehicle is indeed, clamped
* within the given bounds. @see MIN_SERVINT_PERCENT ,etc. * within the given bounds. @see MIN_SERVINT_PERCENT ,etc.
* @param index proposed service interval * @param index proposed service interval
@ -108,10 +117,8 @@ static inline bool CanBuildDepotByTileh(uint32 direction, Slope tileh)
return ((0x4C >> direction) & tileh) != 0; return ((0x4C >> direction) & tileh) != 0;
} }
Depot *GetDepotByTile(TileIndex tile); Depot *GetDepotByTile(TileIndex tile);
void InitializeDepots(void); void InitializeDepots(void);
Depot *AllocateDepot(void); Depot *AllocateDepot(void);
void DoDeleteDepot(TileIndex tile);
#endif /* DEPOT_H */ #endif /* DEPOT_H */

View File

@ -39,6 +39,7 @@ typedef uint16 VehicleID;
typedef uint16 StationID; typedef uint16 StationID;
typedef uint16 TownID; typedef uint16 TownID;
typedef uint16 IndustryID; typedef uint16 IndustryID;
typedef uint16 DepotID;
typedef byte PlayerID; typedef byte PlayerID;
typedef byte OrderID; typedef byte OrderID;
typedef byte CargoID; typedef byte CargoID;

View File

@ -975,7 +975,7 @@ static int32 RemoveTrainDepot(TileIndex tile, uint32 flags)
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
DiagDirection dir = GetRailDepotDirection(tile); DiagDirection dir = GetRailDepotDirection(tile);
DoDeleteDepot(tile); DeleteDepot(GetDepotByTile(tile));
UpdateSignalsOnSegment(tile, dir); UpdateSignalsOnSegment(tile, dir);
YapfNotifyTrackLayoutChange(tile, TrackdirToTrack(DiagdirToDiagTrackdir(dir))); YapfNotifyTrackLayoutChange(tile, TrackdirToTrack(DiagdirToDiagTrackdir(dir)));
} }

View File

@ -603,7 +603,7 @@ static int32 RemoveRoadDepot(TileIndex tile, uint32 flags)
if (!EnsureNoVehicle(tile)) return CMD_ERROR; if (!EnsureNoVehicle(tile)) return CMD_ERROR;
if (flags & DC_EXEC) DoDeleteDepot(tile); if (flags & DC_EXEC) DeleteDepot(GetDepotByTile(tile));
return _price.remove_road_depot; return _price.remove_road_depot;
} }

View File

@ -103,7 +103,7 @@ static int32 RemoveShipDepot(TileIndex tile, uint32 flags)
if (flags & DC_EXEC) { if (flags & DC_EXEC) {
/* Kill the depot, which is registered at the northernmost tile. Use that one */ /* Kill the depot, which is registered at the northernmost tile. Use that one */
DoDeleteDepot(tile2 < tile ? tile2 : tile); DeleteDepot(GetDepotByTile(tile2 < tile ? tile2 : tile));
MakeWater(tile); MakeWater(tile);
MakeWater(tile2); MakeWater(tile2);