ojhMp5English function hashes

int ojhMp5English(
  1. int f
)

Convert bitfiled into minimal perfect hash

Implementation

int ojhMp5English(int f) {
  // make ranks contiguous
  int b = f >> 8;
  b = (b & 0x000000FFFFFFFFFF) | ((b & 0x00FFF00000000000) >> 8);

  int h = ojBinomial(52, 5);
  int mask = 0x0008000000000000;
  int m = 1;

  for (int j = 0; j < 52; j += 1) {
    if (0 != (b & mask)) {
      h -= ojBinomial(j, m);
      m += 1;
      if (m > 5) break;
    }
    mask >>= 1;
  }
  return h;
}