Changeset - r14994:b24d36ab6c4f
[Not reviewed]
master
0 5 0
frosch - 14 years ago 2010-04-13 17:29:19
frosch@openttd.org
(svn r19616) -Codechange: Increase transparency of 'Extract' by passing also the number of used bits.
5 files changed with 12 insertions and 11 deletions:
0 comments (0 inline, 0 general)
src/cmd_helper.h
Show inline comments
 
@@ -14,12 +14,13 @@
 

	
 
#include "core/enum_type.hpp"
 

	
 
template<typename T, uint N, typename U> static inline T Extract(U v)
 
template<typename T, uint S, uint N, typename U> static inline T Extract(U v)
 
{
 
	/* Check if there are enough bits in v */
 
	assert_tcompile(N + EnumPropsT<T>::num_bits <= sizeof(U) * 8);
 
	assert_tcompile(EnumPropsT<T>::end <= (1 << EnumPropsT<T>::num_bits));
 
	return (T)GB(v, N, EnumPropsT<T>::num_bits);
 
	assert_tcompile(N == EnumPropsT<T>::num_bits);
 
	assert_tcompile(S + N <= sizeof(U) * 8);
 
	assert_tcompile(EnumPropsT<T>::end <= (1 << N));
 
	return (T)GB(v, S, N);
 
}
 

	
 
#endif
src/rail_cmd.cpp
Show inline comments
 
@@ -837,7 +837,7 @@ CommandCost CmdBuildTrainDepot(TileIndex
 

	
 
	Slope tileh = GetTileSlope(tile, NULL);
 

	
 
	DiagDirection dir = Extract<DiagDirection, 0>(p2);
 
	DiagDirection dir = Extract<DiagDirection, 0, 2>(p2);
 

	
 
	/* Prohibit construction if
 
	 * The tile is non-flat AND
src/road_cmd.cpp
Show inline comments
 
@@ -464,7 +464,7 @@ CommandCost CmdBuildRoad(TileIndex tile,
 
		p2 = (town != NULL) ? town->index : (TownID)INVALID_TOWN;
 
	}
 

	
 
	RoadBits pieces = Extract<RoadBits, 0>(p1);
 
	RoadBits pieces = Extract<RoadBits, 0, 4>(p1);
 

	
 
	/* do not allow building 'zero' road bits, code wouldn't handle it */
 
	if (pieces == ROAD_NONE) return CMD_ERROR;
 
@@ -729,7 +729,7 @@ CommandCost CmdBuildLongRoad(TileIndex s
 
	RoadType rt = (RoadType)GB(p2, 3, 2);
 
	if (!IsValidRoadType(rt) || !ValParamRoadType(rt)) return CMD_ERROR;
 

	
 
	Axis axis = Extract<Axis, 2>(p2);
 
	Axis axis = Extract<Axis, 2, 1>(p2);
 
	/* Only drag in X or Y direction dictated by the direction variable */
 
	if (axis == AXIS_X && TileY(start_tile) != TileY(end_tile)) return CMD_ERROR; // x-axis
 
	if (axis == AXIS_Y && TileX(start_tile) != TileX(end_tile)) return CMD_ERROR; // y-axis
 
@@ -821,7 +821,7 @@ CommandCost CmdRemoveLongRoad(TileIndex 
 
	RoadType rt = (RoadType)GB(p2, 3, 2);
 
	if (!IsValidRoadType(rt)) return CMD_ERROR;
 

	
 
	Axis axis = Extract<Axis, 2>(p2);
 
	Axis axis = Extract<Axis, 2, 1>(p2);
 
	/* Only drag in X or Y direction dictated by the direction variable */
 
	if (axis == AXIS_X && TileY(start_tile) != TileY(end_tile)) return CMD_ERROR; // x-axis
 
	if (axis == AXIS_Y && TileX(start_tile) != TileX(end_tile)) return CMD_ERROR; // y-axis
 
@@ -886,7 +886,7 @@ CommandCost CmdRemoveLongRoad(TileIndex 
 
 */
 
CommandCost CmdBuildRoadDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 
{
 
	DiagDirection dir = Extract<DiagDirection, 0>(p1);
 
	DiagDirection dir = Extract<DiagDirection, 0, 2>(p1);
 
	RoadType rt = (RoadType)GB(p1, 2, 2);
 

	
 
	if (!IsValidRoadType(rt) || !ValParamRoadType(rt)) return CMD_ERROR;
src/station_cmd.cpp
Show inline comments
 
@@ -1096,7 +1096,7 @@ CommandCost CmdBuildRailStation(TileInde
 
{
 
	/* Unpack parameters */
 
	RailType rt    = (RailType)GB(p1, 0, 4);
 
	Axis axis      = Extract<Axis, 4>(p1);
 
	Axis axis      = Extract<Axis, 4, 1>(p1);
 
	byte numtracks = GB(p1,  8, 8);
 
	byte plat_len  = GB(p1, 16, 8);
 
	bool adjacent  = HasBit(p1, 24);
src/water_cmd.cpp
Show inline comments
 
@@ -104,7 +104,7 @@ static void MarkCanalsAndRiversAroundDir
 
 */
 
CommandCost CmdBuildShipDepot(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 
{
 
	Axis axis = Extract<Axis, 0>(p1);
 
	Axis axis = Extract<Axis, 0, 1>(p1);
 

	
 
	TileIndex tile2 = tile + (axis == AXIS_X ? TileDiffXY(1, 0) : TileDiffXY(0, 1));
 

	
0 comments (0 inline, 0 general)