(svn r16550) -Codechange: move definition of ScaleByMapSize to header file, use shifts instead of mults

This commit is contained in:
smatz 2009-06-10 08:18:40 +00:00
parent 4e2c1ef08f
commit ec78a39f9e
2 changed files with 24 additions and 35 deletions

View File

@ -92,37 +92,6 @@ TileIndex TileAdd(TileIndex tile, TileIndexDiff add,
}
#endif
/*!
* Scales the given value by the map size, where the given value is
* for a 256 by 256 map.
* @param n the value to scale
* @return the scaled size
*/
uint ScaleByMapSize(uint n)
{
/* First shift by 12 to prevent integer overflow for large values of n.
* >>12 is safe since the min mapsize is 64x64
* Add (1<<4)-1 to round upwards. */
return (n * (MapSize() >> 12) + (1 << 4) - 1) >> 4;
}
/*!
* Scales the given value by the maps circumference, where the given
* value is for a 256 by 256 map
* @param n the value to scale
* @return the scaled size
*/
uint ScaleByMapSize1D(uint n)
{
/* Normal circumference for the X+Y is 256+256 = 1<<9
* Note, not actually taking the full circumference into account,
* just half of it.
* (1<<9) - 1 is there to scale upwards. */
return (n * (MapSizeX() + MapSizeY()) + (1 << 9) - 1) >> 9;
}
/*!
* This function checks if we add addx/addy to tile, if we
* do wrap around the edges. For example, tile = (10,2) and

View File

@ -111,14 +111,34 @@ static inline uint MapMaxY()
}
/**
* Scales relative to the number of tiles.
* Scales the given value by the map size, where the given value is
* for a 256 by 256 map.
* @param n the value to scale
* @return the scaled size
*/
uint ScaleByMapSize(uint);
static inline uint ScaleByMapSize(uint n)
{
/* Subtract 12 from shift in order to prevent integer overflow
* for large values of n. It's safe since the min mapsize is 64x64.
* Add (1<<4)-1 to round upwards. */
return ((n << (MapLogX() + MapLogY() - 12)) + (1 << 4) - 1) >> 4;
}
/**
* Scale relative to the circumference of the map.
* Scales the given value by the maps circumference, where the given
* value is for a 256 by 256 map
* @param n the value to scale
* @return the scaled size
*/
uint ScaleByMapSize1D(uint);
static inline uint ScaleByMapSize1D(uint n)
{
/* Normal circumference for the X+Y is 256+256 = 1<<9
* Note, not actually taking the full circumference into account,
* just half of it.
* (1<<9) - 1 is there to scale upwards. */
return ((n << MapLogX()) + (n << MapLogY()) + (1 << 9) - 1) >> 9;
}
/**
* An offset value between to tiles.