const struct minimask *mask, uint32_t basis)
{
const uint32_t *p = mask->masks.values;
- uint32_t hash;
- uint64_t map;
- const uint32_t *fp = flow->values;
- uint64_t fmap = flow->map;
- uint64_t rm1bit;
-
- hash = basis;
-
- for (map = mask->masks.map; map; map -= rm1bit) {
- uint32_t flow_u32 = 0;
-
- rm1bit = rightmost_1bit(map);
- if (fmap & rm1bit) {
- uint64_t trash = fmap & (rm1bit - 1);
+ uint32_t hash = basis;
+ uint32_t flow_u32;
- /* Skip data in 'flow' that is of no interest, once. */
- if (trash) {
- fp += count_1bits(trash);
- fmap -= trash;
- }
- flow_u32 = *fp;
- }
+ MINIFLOW_FOR_EACH_IN_MAP(flow_u32, flow, mask->masks.map) {
hash = mhash_add(hash, flow_u32 & *p++);
}