bjarni@6268: /* $Id$ */ bjarni@6268: bjarni@6268: #ifndef CMD_HELPER_H bjarni@6268: #define CMD_HELPER_H bjarni@6268: bjarni@6268: #include "direction.h" bjarni@6268: #include "macros.h" bjarni@6268: #include "road.h" bjarni@6268: bjarni@6268: bjarni@6268: template static inline void ExtractValid(); bjarni@6268: template<> static inline void ExtractValid<1>() {} bjarni@6268: bjarni@6268: bjarni@6268: template struct ExtractBits; bjarni@6268: template<> struct ExtractBits { static const uint Count = 1; }; bjarni@6268: template<> struct ExtractBits { static const uint Count = 2; }; bjarni@6268: template<> struct ExtractBits { static const uint Count = 4; }; bjarni@6268: bjarni@6268: bjarni@6268: template static inline T Extract(U v) bjarni@6268: { bjarni@6268: // Check if there are enough bits in v bjarni@6268: ExtractValid::Count <= sizeof(U) * 8>(); bjarni@6268: return (T)GB(v, N, ExtractBits::Count); bjarni@6268: } bjarni@6268: bjarni@6268: #endif