23 #ifndef INCLUDED_GRI_LFSR_H
24 #define INCLUDED_GRI_LFSR_H
88 uint32_t d_shift_register;
91 uint32_t d_shift_register_length;
96 uint32_t r = x - ((x >> 1) & 033333333333)
97 - ((x >> 2) & 011111111111);
98 return ((r + (r >> 3)) & 030707070707) % 63;
103 gri_lfsr(uint32_t mask, uint32_t seed, uint32_t reg_len)
104 : d_shift_register(seed),
107 d_shift_register_length(reg_len)
110 throw std::invalid_argument(
"reg_len must be <= 31");
114 unsigned char output = d_shift_register & 1;
115 unsigned char newbit = popCount( d_shift_register & d_mask )%2;
116 d_shift_register = ((d_shift_register>>1) | (newbit<<d_shift_register_length));
121 unsigned char output = d_shift_register & 1;
122 unsigned char newbit = (popCount( d_shift_register & d_mask )%2)^(input & 1);
123 d_shift_register = ((d_shift_register>>1) | (newbit<<d_shift_register_length));
128 unsigned char output = (popCount( d_shift_register & d_mask )%2)^(input & 1);
129 unsigned char newbit = input & 1;
130 d_shift_register = ((d_shift_register>>1) | (newbit<<d_shift_register_length));
137 void reset() { d_shift_register = d_seed; }
144 for(
int i=0; i<num; i++){
149 int mask()
const {
return d_mask; }