changeset 9015:6d3b0bed5229 draft

(svn r12814) -Codechange: reshuffle some variables in the Vehicle struct saving 20 bytes with a 32 bit compiler and 32 bytes on 64 bit compiler per vehicle.
author rubidium <rubidium@openttd.org>
date Mon, 21 Apr 2008 08:35:27 +0000
parents faed11573a2d
children 7a4dd5afd20c
files src/vehicle_base.h
diffstat 1 files changed, 82 insertions(+), 86 deletions(-) [+]
line wrap: on
line diff
--- a/src/vehicle_base.h
+++ b/src/vehicle_base.h
@@ -78,20 +78,27 @@
 };
 
 struct VehicleRail {
+	/* Link between the two ends of a multiheaded engine */
+	Vehicle *other_multiheaded_part;
+
+	/* Cached wagon override spritegroup */
+	const struct SpriteGroup *cached_override;
+
 	uint16 last_speed; // NOSAVE: only used in UI
 	uint16 crash_anim_pos;
 
 	/* cached values, recalculated on load and each time a vehicle is added to/removed from the consist. */
-	uint16 cached_max_speed;  // max speed of the consist. (minimum of the max speed of all vehicles in the consist)
-	uint32 cached_power;      // total power of the consist.
-	bool cached_tilt;         // train can tilt; feature provides a bonus in curves
-	uint8 cached_veh_length;  // length of this vehicle in units of 1/8 of normal length, cached because this can be set by a callback
+	uint32 cached_power;        ///< total power of the consist.
+	uint16 cached_max_speed;    ///< max speed of the consist. (minimum of the max speed of all vehicles in the consist)
 	uint16 cached_total_length; ///< Length of the whole train, valid only for first engine.
+	uint8 cached_veh_length;    ///< length of this vehicle in units of 1/8 of normal length, cached because this can be set by a callback
+	bool cached_tilt;           ///< train can tilt; feature provides a bonus in curves
 
 	/* cached values, recalculated when the cargo on a train changes (in addition to the conditions above) */
-	uint32 cached_weight;     // total weight of the consist.
-	uint32 cached_veh_weight; // weight of the vehicle.
-	uint32 cached_max_te;     // max tractive effort of consist
+	uint32 cached_weight;     ///< total weight of the consist.
+	uint32 cached_veh_weight; ///< weight of the vehicle.
+	uint32 cached_max_te;     ///< max tractive effort of consist
+
 	/**
 	 * Position/type of visual effect.
 	 * bit 0 - 3 = position of effect relative to vehicle. (0 = front, 8 = centre, 15 = rear)
@@ -106,18 +113,11 @@
 	 * 0xffff == not in train */
 	EngineID first_engine;
 
+	byte flags;
 	TrackBitsByte track;
 	byte force_proceed;
 	RailTypeByte railtype;
 	RailTypes compatible_railtypes;
-
-	byte flags;
-
-	/* Link between the two ends of a multiheaded engine */
-	Vehicle *other_multiheaded_part;
-
-	/* Cached wagon override spritegroup */
-	const struct SpriteGroup *cached_override;
 };
 
 enum VehicleRailFlags {
@@ -193,32 +193,64 @@
 extern bool LoadOldVehicle(LoadgameState *ls, int num);
 
 struct Vehicle : PoolItem<Vehicle, VehicleID, &_Vehicle_pool>, BaseVehicle {
-	byte subtype;            // subtype (Filled with values from EffectVehicles/TrainSubTypes/AircraftSubTypes)
+private:
+	Vehicle *next;           ///< pointer to the next vehicle in the chain
+	Vehicle *previous;       ///< NOSAVE: pointer to the previous vehicle in the chain
+	Vehicle *first;          ///< NOSAVE: pointer to the first vehicle in the chain
+public:
+	friend const SaveLoad *GetVehicleDescription(VehicleType vt); ///< So we can use private/protected variables in the saveload code
+	friend void AfterLoadVehicles(bool clear_te_id);              ///< So we can set the previous and first pointers while loading
+	friend bool LoadOldVehicle(LoadgameState *ls, int num);       ///< So we can set the proper next pointer while loading
 
-private:
-	Vehicle *next;           // pointer to the next vehicle in the chain
-	Vehicle *previous;       // NOSAVE: pointer to the previous vehicle in the chain
-	Vehicle *first;          // NOSAVE: pointer to the first vehicle in the chain
-public:
-	friend const SaveLoad *GetVehicleDescription(VehicleType vt); // So we can use private/protected variables in the saveload code
-	friend void AfterLoadVehicles(bool clear_te_id);              // So we can set the previous and first pointers while loading
-	friend bool LoadOldVehicle(LoadgameState *ls, int num);       // So we can set the proper next pointer while loading
-
-	Vehicle *depot_list;     // NOSAVE: linked list to tell what vehicles entered a depot during the last tick. Used by autoreplace
+	Vehicle *depot_list;     ///< NOSAVE: linked list to tell what vehicles entered a depot during the last tick. Used by autoreplace
 
 	char *name;              ///< Name of vehicle
 
-	UnitID unitnumber;       // unit number, for display purposes only
-	PlayerByte owner;        // which player owns the vehicle?
+	TileIndex tile;          ///< Current tile index
+	TileIndex dest_tile;     ///< Heading for this tile
+
+	Vehicle *next_shared;    ///< If not NULL, this points to the next vehicle that shared the order
+	Vehicle *prev_shared;    ///< If not NULL, this points to the prev vehicle that shared the order
+
+	Money profit_this_year;        ///< Profit this year << 8, low 8 bits are fract
+	Money profit_last_year;        ///< Profit last year << 8, low 8 bits are fract
+	Money value;
+
+	/* Used for timetabling. */
+	uint32 current_order_time;     ///< How many ticks have passed since this order started.
+	int32 lateness_counter;        ///< How many ticks late (or early if negative) this vehicle is.
 
-	TileIndex tile;          // Current tile index
-	TileIndex dest_tile;     // Heading for this tile
+	/* Boundaries for the current position in the world and a next hash link.
+	 * NOSAVE: All of those can be updated with VehiclePositionChanged() */
+	int32 left_coord;
+	int32 top_coord;
+	int32 right_coord;
+	int32 bottom_coord;
+	Vehicle *next_hash;
+	Vehicle *next_new_hash;
+	Vehicle **old_new_hash;
+
+	SpriteID colormap; // NOSAVE: cached color mapping
+
+	/* Related to age and service time */
+	Year build_year;
+	Date age;     // Age in days
+	Date max_age; // Maximum age
+	Date date_of_last_service;
+	Date service_interval;
+	uint16 reliability;
+	uint16 reliability_spd_dec;
+	byte breakdown_ctr;
+	byte breakdown_delay;
+	byte breakdowns_since_last_service;
+	byte breakdown_chance;
 
 	int32 x_pos;             // coordinates
 	int32 y_pos;
 	byte z_pos;
 	DirectionByte direction; // facing
 
+	PlayerByte owner;        // which player owns the vehicle?
 	byte spritenum;          // currently displayed sprite index
 	                         // 0xfd == custom sprite, 0xfe == custom second head sprite
 	                         // 0xff == reserved for another custom sprite
@@ -231,83 +263,47 @@
 	EngineID engine_type;
 
 	TextEffectID fill_percent_te_id; // a text-effect id to a loading indicator object
+	UnitID unitnumber;       // unit number, for display purposes only
+
+	uint16 max_speed;        ///< maximum speed
+	uint16 cur_speed;        ///< current speed
+	byte subspeed;           ///< fractional speed
+	byte acceleration;       ///< used by train & aircraft
+	uint32 motion_counter;
+	byte progress;
 
 	/* for randomized variational spritegroups
 	 * bitmask used to resolve them; parts of it get reseeded when triggers
 	 * of corresponding spritegroups get matched */
 	byte random_bits;
-	byte waiting_triggers;   // triggers to be yet matched
+	byte waiting_triggers;   ///< triggers to be yet matched
 
-	uint16 max_speed;        // maximum speed
-	uint16 cur_speed;        // current speed
-	byte subspeed;           // fractional speed
-	byte acceleration;       // used by train & aircraft
-	byte progress;
-	uint32 motion_counter;
-
-	byte vehstatus;          // Status
 	StationID last_station_visited;
 
-	CargoID cargo_type;      // type of cargo this vehicle is carrying
-	uint16 cargo_cap;        // total capacity
+	CargoID cargo_type;      ///< type of cargo this vehicle is carrying
 	byte cargo_subtype;      ///< Used for livery refits (NewGRF variations)
+	uint16 cargo_cap;        ///< total capacity
 	CargoList cargo;         ///< The cargo this vehicle is carrying
 
-
 	byte day_counter;        ///< Increased by one for each day
 	byte tick_counter;       ///< Increased by one for each tick
 	byte running_ticks;      ///< Number of ticks this vehicle was not stopped this day
 
-	/* Begin Order-stuff */
-	Order current_order;     ///< The current order (+ status, like: loading)
+	byte vehstatus;                 ///< Status
+	Order current_order;            ///< The current order (+ status, like: loading)
+	VehicleOrderID num_orders;      ///< How many orders there are in the list
 	VehicleOrderID cur_order_index; ///< The index to the current order
 
-	Order *orders;           ///< Pointer to the first order for this vehicle
-	VehicleOrderID num_orders;      ///< How many orders there are in the list
-
-	Vehicle *next_shared;    ///< If not NULL, this points to the next vehicle that shared the order
-	Vehicle *prev_shared;    ///< If not NULL, this points to the prev vehicle that shared the order
-	/* End Order-stuff */
+	Order *orders;                  ///< Pointer to the first order for this vehicle
 
-	/* Boundaries for the current position in the world and a next hash link.
-	 * NOSAVE: All of those can be updated with VehiclePositionChanged() */
-	int32 left_coord;
-	int32 top_coord;
-	int32 right_coord;
-	int32 bottom_coord;
-	Vehicle *next_hash;
-	Vehicle *next_new_hash;
-	Vehicle **old_new_hash;
+	bool leave_depot_instantly;     ///< NOSAVE: stores if the vehicle needs to leave the depot it just entered. Used by autoreplace
 
-	/* Related to age and service time */
-	Date age;     // Age in days
-	Date max_age; // Maximum age
-	Date date_of_last_service;
-	Date service_interval;
-	uint16 reliability;
-	uint16 reliability_spd_dec;
-	byte breakdown_ctr;
-	byte breakdown_delay;
-	byte breakdowns_since_last_service;
-	byte breakdown_chance;
-	Year build_year;
-
-	bool leave_depot_instantly; // NOSAVE: stores if the vehicle needs to leave the depot it just entered. Used by autoreplace
+	byte vehicle_flags;             ///< Used for gradual loading and other miscellaneous things (@see VehicleFlags enum)
+	uint16 load_unload_time_rem;
 
-	uint16 load_unload_time_rem;
-	byte vehicle_flags;         // Used for gradual loading and other miscellaneous things (@see VehicleFlags enum)
-
-	Money profit_this_year;        ///< Profit this year << 8, low 8 bits are fract
-	Money profit_last_year;        ///< Profit last year << 8, low 8 bits are fract
-	Money value;
+	GroupID group_id;               ///< Index of group Pool array
 
-	GroupID group_id;              ///< Index of group Pool array
-
-	/* Used for timetabling. */
-	uint32 current_order_time;     ///< How many ticks have passed since this order started.
-	int32 lateness_counter;        ///< How many ticks late (or early if negative) this vehicle is.
-
-	SpriteID colormap; // NOSAVE: cached color mapping
+	byte subtype;                   ///< subtype (Filled with values from EffectVehicles/TrainSubTypes/AircraftSubTypes)
 
 	union {
 		VehicleRail rail;