gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Merge
0 1 0
merge default
0 files changed with 1 insertions and 1 deletions:
↑ Collapse diff ↑
Ignore white space 48 line context
... ...
@@ -233,49 +233,49 @@
233 233

	
234 234
  
235 235
      void fillState() {
236 236
        static const Word mask[2] = { 0x0ul, RandomTraits<Word>::mask };
237 237
        static const Word loMask = RandomTraits<Word>::loMask;
238 238
        static const Word hiMask = RandomTraits<Word>::hiMask;
239 239

	
240 240
        current = state + length; 
241 241

	
242 242
        register Word *curr = state + length - 1;
243 243
        register long num;
244 244
      
245 245
        num = length - shift;
246 246
        while (num--) {
247 247
          curr[0] = (((curr[0] & hiMask) | (curr[-1] & loMask)) >> 1) ^
248 248
            curr[- shift] ^ mask[curr[-1] & 1ul];
249 249
          --curr;
250 250
        }
251 251
        num = shift - 1;
252 252
        while (num--) {
253 253
          curr[0] = (((curr[0] & hiMask) | (curr[-1] & loMask)) >> 1) ^
254 254
            curr[length - shift] ^ mask[curr[-1] & 1ul];
255 255
          --curr;
256 256
        }
257
        curr[0] = (((curr[0] & hiMask) | (curr[length - 1] & loMask)) >> 1) ^
257
        state[0] = (((state[0] & hiMask) | (curr[length - 1] & loMask)) >> 1) ^
258 258
          curr[length - shift] ^ mask[curr[length - 1] & 1ul];
259 259

	
260 260
      }
261 261

	
262 262
  
263 263
      Word *current;
264 264
      Word state[length];
265 265
      
266 266
    };
267 267

	
268 268

	
269 269
    template <typename Result, 
270 270
              int shift = (std::numeric_limits<Result>::digits + 1) / 2>
271 271
    struct Masker {
272 272
      static Result mask(const Result& result) {
273 273
        return Masker<Result, (shift + 1) / 2>::
274 274
          mask(static_cast<Result>(result | (result >> shift)));
275 275
      }
276 276
    };
277 277
    
278 278
    template <typename Result>
279 279
    struct Masker<Result, 1> {
280 280
      static Result mask(const Result& result) {
281 281
        return static_cast<Result>(result | (result >> 1));
0 comments (0 inline)