mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Reorder some high-use structs to reduce their size. (#11201)
This reduces GoodsEntry from 144 to 136 bytes (thereby reducing Station from 9704 bytes to 9192 bytes), and CargoPacket from 40 bytes to 32 bytes.pull/11251/head
parent
5c2e4ee6fe
commit
bd150df914
|
@ -42,16 +42,16 @@ CargoPacket::CargoPacket()
|
||||||
* that, in contrary to all other pools, does not memset to 0.
|
* that, in contrary to all other pools, does not memset to 0.
|
||||||
*/
|
*/
|
||||||
CargoPacket::CargoPacket(StationID source, TileIndex source_xy, uint16_t count, SourceType source_type, SourceID source_id) :
|
CargoPacket::CargoPacket(StationID source, TileIndex source_xy, uint16_t count, SourceType source_type, SourceID source_id) :
|
||||||
feeder_share(0),
|
|
||||||
count(count),
|
count(count),
|
||||||
periods_in_transit(0),
|
periods_in_transit(0),
|
||||||
|
feeder_share(0),
|
||||||
|
source_xy(source_xy),
|
||||||
|
loaded_at_xy(0),
|
||||||
source_id(source_id),
|
source_id(source_id),
|
||||||
source(source),
|
source(source),
|
||||||
source_xy(source_xy),
|
source_type(source_type)
|
||||||
loaded_at_xy(0)
|
|
||||||
{
|
{
|
||||||
assert(count != 0);
|
assert(count != 0);
|
||||||
this->source_type = source_type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -69,16 +69,16 @@ CargoPacket::CargoPacket(StationID source, TileIndex source_xy, uint16_t count,
|
||||||
* that, in contrary to all other pools, does not memset to 0.
|
* that, in contrary to all other pools, does not memset to 0.
|
||||||
*/
|
*/
|
||||||
CargoPacket::CargoPacket(uint16_t count, uint16_t periods_in_transit, StationID source, TileIndex source_xy, TileIndex loaded_at_xy, Money feeder_share, SourceType source_type, SourceID source_id) :
|
CargoPacket::CargoPacket(uint16_t count, uint16_t periods_in_transit, StationID source, TileIndex source_xy, TileIndex loaded_at_xy, Money feeder_share, SourceType source_type, SourceID source_id) :
|
||||||
feeder_share(feeder_share),
|
|
||||||
count(count),
|
count(count),
|
||||||
periods_in_transit(periods_in_transit),
|
periods_in_transit(periods_in_transit),
|
||||||
|
feeder_share(feeder_share),
|
||||||
|
source_xy(source_xy),
|
||||||
|
loaded_at_xy(loaded_at_xy),
|
||||||
source_id(source_id),
|
source_id(source_id),
|
||||||
source(source),
|
source(source),
|
||||||
source_xy(source_xy),
|
source_type(source_type)
|
||||||
loaded_at_xy(loaded_at_xy)
|
|
||||||
{
|
{
|
||||||
assert(count != 0);
|
assert(count != 0);
|
||||||
this->source_type = source_type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -46,17 +46,17 @@ static_assert(sizeof(TileIndex) == sizeof(StationID_32bit));
|
||||||
*/
|
*/
|
||||||
struct CargoPacket : CargoPacketPool::PoolItem<&_cargopacket_pool> {
|
struct CargoPacket : CargoPacketPool::PoolItem<&_cargopacket_pool> {
|
||||||
private:
|
private:
|
||||||
Money feeder_share; ///< Value of feeder pickup to be paid for on delivery of cargo.
|
|
||||||
uint16_t count; ///< The amount of cargo in this packet.
|
uint16_t count; ///< The amount of cargo in this packet.
|
||||||
uint16_t periods_in_transit; ///< Amount of cargo aging periods this packet has been in transit.
|
uint16_t periods_in_transit; ///< Amount of cargo aging periods this packet has been in transit.
|
||||||
SourceType source_type; ///< Type of \c source_id.
|
Money feeder_share; ///< Value of feeder pickup to be paid for on delivery of cargo.
|
||||||
SourceID source_id; ///< Index of source, INVALID_SOURCE if unknown/invalid.
|
|
||||||
StationID source; ///< The station where the cargo came from first.
|
|
||||||
TileIndex source_xy; ///< The origin of the cargo (first station in feeder chain).
|
TileIndex source_xy; ///< The origin of the cargo (first station in feeder chain).
|
||||||
union {
|
union {
|
||||||
TileIndex loaded_at_xy; ///< Location where this cargo has been loaded into the vehicle.
|
TileIndex loaded_at_xy; ///< Location where this cargo has been loaded into the vehicle.
|
||||||
StationID_32bit next_station; ///< Station where the cargo wants to go next.
|
StationID_32bit next_station; ///< Station where the cargo wants to go next.
|
||||||
};
|
};
|
||||||
|
SourceID source_id; ///< Index of source, INVALID_SOURCE if unknown/invalid.
|
||||||
|
StationID source; ///< The station where the cargo came from first.
|
||||||
|
SourceType source_type; ///< Type of \c source_id.
|
||||||
|
|
||||||
/** The CargoList caches, thus needs to know about it. */
|
/** The CargoList caches, thus needs to know about it. */
|
||||||
template <class Tinst, class Tcont> friend class CargoList;
|
template <class Tinst, class Tcont> friend class CargoList;
|
||||||
|
|
|
@ -206,28 +206,23 @@ struct GoodsEntry {
|
||||||
GES_ACCEPTED_BIGTICK,
|
GES_ACCEPTED_BIGTICK,
|
||||||
};
|
};
|
||||||
|
|
||||||
GoodsEntry() :
|
StationCargoList cargo{}; ///< The cargo packets of cargo waiting in this station
|
||||||
status(0),
|
FlowStatMap flows{}; ///< Planned flows through this station.
|
||||||
time_since_pickup(255),
|
|
||||||
rating(INITIAL_STATION_RATING),
|
|
||||||
last_speed(0),
|
|
||||||
last_age(255),
|
|
||||||
amount_fract(0),
|
|
||||||
link_graph(INVALID_LINK_GRAPH),
|
|
||||||
node(INVALID_NODE),
|
|
||||||
max_waiting_cargo(0)
|
|
||||||
{}
|
|
||||||
|
|
||||||
byte status; ///< Status of this cargo, see #GoodsEntryStatus.
|
uint max_waiting_cargo{0}; ///< Max cargo from this station waiting at any station.
|
||||||
|
NodeID node{INVALID_NODE}; ///< ID of node in link graph referring to this goods entry.
|
||||||
|
LinkGraphID link_graph{INVALID_LINK_GRAPH}; ///< Link graph this station belongs to.
|
||||||
|
|
||||||
|
byte status{0}; ///< Status of this cargo, see #GoodsEntryStatus.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Number of rating-intervals (up to 255) since the last vehicle tried to load this cargo.
|
* Number of rating-intervals (up to 255) since the last vehicle tried to load this cargo.
|
||||||
* The unit used is STATION_RATING_TICKS.
|
* The unit used is STATION_RATING_TICKS.
|
||||||
* This does not imply there was any cargo to load.
|
* This does not imply there was any cargo to load.
|
||||||
*/
|
*/
|
||||||
byte time_since_pickup;
|
uint8_t time_since_pickup{255};
|
||||||
|
|
||||||
byte rating; ///< %Station rating for this cargo.
|
uint8_t rating{INITIAL_STATION_RATING}; ///< %Station rating for this cargo.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Maximum speed (up to 255) of the last vehicle that tried to load this cargo.
|
* Maximum speed (up to 255) of the last vehicle that tried to load this cargo.
|
||||||
|
@ -238,21 +233,15 @@ struct GoodsEntry {
|
||||||
* - Ships: 0.5 * km-ish/h
|
* - Ships: 0.5 * km-ish/h
|
||||||
* - Aircraft: 8 * mph
|
* - Aircraft: 8 * mph
|
||||||
*/
|
*/
|
||||||
byte last_speed;
|
uint8_t last_speed{0};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Age in years (up to 255) of the last vehicle that tried to load this cargo.
|
* Age in years (up to 255) of the last vehicle that tried to load this cargo.
|
||||||
* This does not imply there was any cargo to load.
|
* This does not imply there was any cargo to load.
|
||||||
*/
|
*/
|
||||||
byte last_age;
|
uint8_t last_age{255};
|
||||||
|
|
||||||
byte amount_fract; ///< Fractional part of the amount in the cargo list
|
uint8_t amount_fract{0}; ///< Fractional part of the amount in the cargo list
|
||||||
StationCargoList cargo; ///< The cargo packets of cargo waiting in this station
|
|
||||||
|
|
||||||
LinkGraphID link_graph; ///< Link graph this station belongs to.
|
|
||||||
NodeID node; ///< ID of node in link graph referring to this goods entry.
|
|
||||||
FlowStatMap flows; ///< Planned flows through this station.
|
|
||||||
uint max_waiting_cargo; ///< Max cargo from this station waiting at any station.
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reports whether a vehicle has ever tried to load the cargo at this station.
|
* Reports whether a vehicle has ever tried to load the cargo at this station.
|
||||||
|
|
Loading…
Reference in New Issue