|
- static inline uint32_t modify(int i, uint64_t seed, uint64_t idx, uint32_t ori, uint64_t num)
- {
- uint32_t mod;
- mod = ori;
- if(seed == 0)
- {
- if(mdo[idx].offsetop[i][0] != 0)
- {
- if(((~mdo[idx].offset[i][1]) & ori) !=
- ((~mdo[idx].offset[i][1]) & mdo[idx].offset[i][0]))
- return mod;//match fails
- else
- matchbit[idx][num] += (1 << i);
- }
- }
- else
- {
- if(mdo[idx].offsetop[i][0] != 0)
- {
- if((matchbit[idx][num] & (1 << i)) == 0)
- {
- return mod;
- }
- }
- }
- if(mdo[idx].offset[i][2] == mdo[idx].offset[i][3])
- {
- mod = (mdo[idx].offset[i][1]&ori) + (mdo[idx].offset[i][2]&(~mdo[idx].offset[i][1]));
- }
- else
- {
- if(mdo[idx].offsetop[i][3] == 0)
- {
- mod = RandomULLimit(seed, idx, i);
- mod = (mdo[idx].offset[i][1] & ori) + ((~mdo[idx].offset[i][1]) & mod);
- }
- else
- {
-
- if(seed == 0)
- {
- if(mdo[idx].offsetop[i][3] > 0)
- {
- mod = (mdo[idx].offset[i][1] & ori)
- + (mdo[idx].offset[i][2] & (~mdo[idx].offset[i][1]));
- }
- else
- {
- mod = (mdo[idx].offset[i][1] & ori)
- + (mdo[idx].offset[i][3] & (~mdo[idx].offset[i][1]));
- }
- }
- else
- {
- int k = 0;
- do
- {
- if((mdo[idx].offset[i][1] >> k) % 2 != 0)
- k++;
- else
- break;
- }
- while(k < 32);
- if(mdo[idx].offsetop[i][3] > 0)
- {
- mod = ori + ((mdo[idx].offsetop[i][3]<<k) & (~mdo[idx].offset[i][1]));
- if(mod > (mdo[idx].offset[i][1] & ori) + (mdo[idx].offset[i][3] & (~mdo[idx].offset[i][1])))
- mod = mod - (mdo[idx].offset[i][3] & (~mdo[idx].offset[i][1]))
- + (mdo[idx].offset[i][2] & (~mdo[idx].offset[i][1])) - (1<<k);
- }
- else if(mdo[idx].offsetop[i][3] < 0)
- {
- mod = ori - (((-mdo[idx].offsetop[i][3])<<k) & (~mdo[idx].offset[i][1]));
- if(mod < (mdo[idx].offset[i][1] & ori) + (mdo[idx].offset[i][2] & (~mdo[idx].offset[i][1])))
- mod = mod - (mdo[idx].offset[i][2] & (~mdo[idx].offset[i][1]))
- + (mdo[idx].offset[i][3] & (~mdo[idx].offset[i][1])) + (1<<k);
- }
- }
- }
- }
- return mod;
- }
复制代码 |
|