diff options
Diffstat (limited to 'src/cmd_helper.h')
-rw-r--r-- | src/cmd_helper.h | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/src/cmd_helper.h b/src/cmd_helper.h index 8c9c789ca..a034f1217 100644 --- a/src/cmd_helper.h +++ b/src/cmd_helper.h @@ -12,25 +12,14 @@ #ifndef CMD_HELPER_H #define CMD_HELPER_H -#include "direction_type.h" -#include "road_type.h" - - -template<uint N> static inline void ExtractValid(); -template<> inline void ExtractValid<1>() {} - - -template<typename T> struct ExtractBits; -template<> struct ExtractBits<Axis> { static const uint Count = 1; }; -template<> struct ExtractBits<DiagDirection> { static const uint Count = 2; }; -template<> struct ExtractBits<RoadBits> { static const uint Count = 4; }; - +#include "core/enum_type.hpp" template<typename T, uint N, typename U> static inline T Extract(U v) { /* Check if there are enough bits in v */ - ExtractValid<N + ExtractBits<T>::Count <= sizeof(U) * 8>(); - return (T)GB(v, N, ExtractBits<T>::Count); + 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); } #endif |