diff options
author | rubidium <rubidium@openttd.org> | 2013-11-25 13:16:06 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2013-11-25 13:16:06 +0000 |
commit | 4b8d9aad5b4359345c79f8f5567db4f88c2d41e1 (patch) | |
tree | 38093606b7d87024119289e4390e831c43e9117a /src/direction_func.h | |
parent | c143ca729a823f58cfa45aa2ea464d436b81d66b (diff) | |
download | openttd-4b8d9aad5b4359345c79f8f5567db4f88c2d41e1.tar.xz |
(svn r26105) -Codechange: add a lot of assertions to track/road functions that might eventually lead to become indices into tables
Diffstat (limited to 'src/direction_func.h')
-rw-r--r-- | src/direction_func.h | 80 |
1 files changed, 47 insertions, 33 deletions
diff --git a/src/direction_func.h b/src/direction_func.h index 657645e28..888948584 100644 --- a/src/direction_func.h +++ b/src/direction_func.h @@ -15,6 +15,39 @@ #include "direction_type.h" /** + * Checks if an integer value is a valid DiagDirection + * + * @param d The value to check + * @return True if the value belongs to a DiagDirection, else false + */ +static inline bool IsValidDiagDirection(DiagDirection d) +{ + return d < DIAGDIR_END; +} + +/** + * Checks if an integer value is a valid Direction + * + * @param d The value to check + * @return True if the value belongs to a Direction, else false + */ +static inline bool IsValidDirection(Direction d) +{ + return d < DIR_END; +} + +/** + * Checks if an integer value is a valid Axis + * + * @param d The value to check + * @return True if the value belongs to an Axis, else false + */ +static inline bool IsValidAxis(Axis d) +{ + return d < AXIS_END; +} + +/** * Return the reverse of a direction * * @param d The direction to get the reverse from @@ -22,6 +55,7 @@ */ static inline Direction ReverseDir(Direction d) { + assert(IsValidDirection(d)); return (Direction)(4 ^ d); } @@ -35,6 +69,8 @@ static inline Direction ReverseDir(Direction d) */ static inline DirDiff DirDifference(Direction d0, Direction d1) { + assert(IsValidDirection(d0)); + assert(IsValidDirection(d1)); /* Cast to uint so compiler can use bitmask. If the difference is negative * and we used int instead of uint, further "+ 8" would have to be added. */ return (DirDiff)((uint)(d0 - d1) % 8); @@ -69,6 +105,7 @@ static inline DirDiff ChangeDirDiff(DirDiff d, DirDiff delta) */ static inline Direction ChangeDir(Direction d, DirDiff delta) { + assert(IsValidDirection(d)); /* Cast to uint so compiler can use bitmask. Result can never be negative. */ return (Direction)((uint)(d + delta) % 8); } @@ -82,6 +119,7 @@ static inline Direction ChangeDir(Direction d, DirDiff delta) */ static inline DiagDirection ReverseDiagDir(DiagDirection d) { + assert(IsValidDiagDirection(d)); return (DiagDirection)(2 ^ d); } @@ -98,6 +136,7 @@ static inline DiagDirection ReverseDiagDir(DiagDirection d) */ static inline DiagDirection ChangeDiagDir(DiagDirection d, DiagDirDiff delta) { + assert(IsValidDiagDirection(d)); /* Cast to uint so compiler can use bitmask. Result can never be negative. */ return (DiagDirection)((uint)(d + delta) % 4); } @@ -114,6 +153,7 @@ static inline DiagDirection ChangeDiagDir(DiagDirection d, DiagDirDiff delta) */ static inline DiagDirection DirToDiagDir(Direction dir) { + assert(IsValidDirection(dir)); return (DiagDirection)(dir >> 1); } @@ -129,6 +169,7 @@ static inline DiagDirection DirToDiagDir(Direction dir) */ static inline Direction DiagDirToDir(DiagDirection dir) { + assert(IsValidDiagDirection(dir)); return (Direction)(dir * 2 + 1); } @@ -143,6 +184,7 @@ static inline Direction DiagDirToDir(DiagDirection dir) */ static inline Axis OtherAxis(Axis a) { + assert(IsValidAxis(a)); return (Axis)(a ^ 1); } @@ -159,6 +201,7 @@ static inline Axis OtherAxis(Axis a) */ static inline Axis DiagDirToAxis(DiagDirection d) { + assert(IsValidDiagDirection(d)); return (Axis)(d & 1); } @@ -176,6 +219,7 @@ static inline Axis DiagDirToAxis(DiagDirection d) */ static inline DiagDirection AxisToDiagDir(Axis a) { + assert(IsValidAxis(a)); return (DiagDirection)(2 - a); } @@ -192,6 +236,7 @@ static inline DiagDirection AxisToDiagDir(Axis a) */ static inline Direction AxisToDirection(Axis a) { + assert(IsValidAxis(a)); return (Direction)(5 - 2 * a); } @@ -203,43 +248,11 @@ static inline Direction AxisToDirection(Axis a) */ static inline DiagDirection XYNSToDiagDir(Axis xy, uint ns) { + assert(IsValidAxis(xy)); return (DiagDirection)(xy * 3 ^ ns * 2); } /** - * Checks if an integer value is a valid DiagDirection - * - * @param d The value to check - * @return True if the value belongs to a DiagDirection, else false - */ -static inline bool IsValidDiagDirection(DiagDirection d) -{ - return d < DIAGDIR_END; -} - -/** - * Checks if an integer value is a valid Direction - * - * @param d The value to check - * @return True if the value belongs to a Direction, else false - */ -static inline bool IsValidDirection(Direction d) -{ - return d < DIR_END; -} - -/** - * Checks if an integer value is a valid Axis - * - * @param d The value to check - * @return True if the value belongs to an Axis, else false - */ -static inline bool IsValidAxis(Axis d) -{ - return d < AXIS_END; -} - -/** * Checks if a given Direction is diagonal. * * @param dir The given direction. @@ -247,6 +260,7 @@ static inline bool IsValidAxis(Axis d) */ static inline bool IsDiagonalDirection(Direction dir) { + assert(IsValidDirection(dir)); return (dir & 1) != 0; } |