12 #ifndef hifi_Radix2IntegerScanner_h
13 #define hifi_Radix2IntegerScanner_h
18 namespace type_traits {
24 template<
typename T >
struct is_signed
25 {
static bool const value = T(-1) < T(0); };
27 template<
typename T,
size_t S = sizeof(T) >
struct make_unsigned;
28 template<
typename T >
struct make_unsigned< T, 1 > {
typedef uint8_t type; };
29 template<
typename T >
struct make_unsigned< T, 2 > {
typedef uint16_t type; };
30 template<
typename T >
struct make_unsigned< T, 4 > {
typedef uint32_t type; };
31 template<
typename T >
struct make_unsigned< T, 8 > {
typedef quint64 type; };
39 bool _Signed = type_traits::is_signed<T>::value >
44 template<
typename UInt >
51 : valMsb(~UInt(0) &~ (~UInt(0) >> 1)) { }
54 : valMsb(UInt(1u) << (bits - 1)) {
57 typedef UInt state_type;
59 state_type initial_state()
const {
return valMsb; }
60 bool advance(state_type& s)
const {
return (s >>= 1) != 0u; }
62 bool bit(UInt
const& v, state_type
const& s)
const {
return !!(v & s); }
65 template<
typename Int >
68 typename type_traits::make_unsigned<Int>::type valMsb;
72 : valMsb(~state_type(0u) &~ (~state_type(0u) >> 1)) {
76 : valMsb(state_type(1u) << (bits - 1)) {
80 typedef typename type_traits::make_unsigned<Int>::type state_type;
82 state_type initial_state()
const {
return valMsb; }
83 bool advance(state_type& s)
const {
return (s >>= 1) != 0u; }
85 bool bit(Int
const& v, state_type
const& s)
const {
return !!((v-valMsb) & s); }
Definition: Radix2IntegerScanner.h:40